@pipeline-builder/api-core 5.2.7 → 5.2.8

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.
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import jwt from 'jsonwebtoken';
4
4
  import { refuseForAssurance } from './assurance.js';
5
+ import { clientVersionOf } from './client-version.js';
5
6
  import { runDeferredQuotaCheck } from './deferred-quota-check.js';
6
7
  import { hasValidIdentityClaims, verifyBearerToken } from './jwt-verify.js';
7
8
  import { recordAuthzDenial } from './permission-gates.js';
@@ -70,7 +71,7 @@ async function resolveApiKey(options, key, req, res, next) {
70
71
  const { exchangeApiKey, ApiKeyExchangeUnavailableError } = await import('../services/api-key-exchange.js');
71
72
  let token;
72
73
  try {
73
- token = await exchangeApiKey(key);
74
+ token = await exchangeApiKey(key, clientVersionOf(req));
74
75
  }
75
76
  catch (error) {
76
77
  if (error instanceof ApiKeyExchangeUnavailableError) {
@@ -199,4 +200,4 @@ async function verifyAndAttach(options, rawToken, req, res, next) {
199
200
  return sendError(res, HttpStatus.UNAUTHORIZED, 'Authentication failed', ErrorCode.UNAUTHORIZED);
200
201
  }
201
202
  }
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBUXRDLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUF1QixNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9C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O0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIGByZXF1aXJlQXV0aGA6IGJlYXJlciAvIGFjY2Vzcy1rZXkgYXV0aGVudGljYXRpb24sIHRoZSBjaGVja3MgZXZlcnlcbiAqIHZlcmlmaWVkIHJlcXVlc3QgcGFzc2VzLCBhbmQgdGhlIHRlbmFudCBpZGVudGl0eSBpdCBhdHRhY2hlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcbmltcG9ydCB7IHJlZnVzZUZvckFzc3VyYW5jZSB9IGZyb20gJy4vYXNzdXJhbmNlLmpzJztcbmltcG9ydCB7IHJ1bkRlZmVycmVkUXVvdGFDaGVjayB9IGZyb20gJy4vZGVmZXJyZWQtcXVvdGEtY2hlY2suanMnO1xuaW1wb3J0IHsgaGFzVmFsaWRJZGVudGl0eUNsYWltcywgdmVyaWZ5QmVhcmVyVG9rZW4gfSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuaW1wb3J0IHsgcmVjb3JkQXV0aHpEZW5pYWwgfSBmcm9tICcuL3Blcm1pc3Npb24tZ2F0ZXMuanMnO1xuaW1wb3J0IHsgY2hlY2tSZXZvY2F0aW9uLCBpc0ltcGVyc29uYXRpb25Xcml0ZUJsb2NrZWQsIG5lZWRzUmV2b2NhdGlvbkNoZWNrIH0gZnJvbSAnLi9yZXZvY2F0aW9uLmpzJztcbmltcG9ydCB7IHRhZ1JvdXRlR2F0ZSB9IGZyb20gJy4vcm91dGUtdGFibGUuanMnO1xuaW1wb3J0IHsgaXNTZXJ2aWNlVG9rZW5EZW5pZWQsIHNlcnZpY2VOYW1lT2YgfSBmcm9tICcuL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IEh0dHBTdGF0dXMgfSBmcm9tICcuLi9jb25zdGFudHMvaHR0cC1zdGF0dXMuanMnO1xuaW1wb3J0IHsgSndrc1VuYXZhaWxhYmxlRXJyb3IsIFVua25vd25LaWRFcnJvciB9IGZyb20gJy4uL3NlcnZpY2VzL2p3a3MtY2FjaGUuanMnO1xuaW1wb3J0IHsgU2VydmljZUtleUVycm9yLCBzZXJ2aWNlSWRlbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZXJ2aWNlLWtleXMuanMnO1xuaW1wb3J0IHsgdHlwZSBBc3N1cmFuY2VMZXZlbCB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMvaHR0cC5qcyc7XG5pbXBvcnQgeyBpc09wYXF1ZUFwaUtleSB9IGZyb20gJy4uL3V0aWxzL2FwaS1rZXkuanMnO1xuaW1wb3J0IHsgZ2V0SGVhZGVyU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvaGVhZGVycy5qcyc7XG5pbXBvcnQgeyBnZXRJZGVudGl0eSwgdHlwZSBSZXF1ZXN0SWRlbnRpdHkgfSBmcm9tICcuLi91dGlscy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXV0aC1taWRkbGV3YXJlJyk7XG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVBdXRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbGxvdyB4LW9yZy1pZC94LW9yZy1uYW1lIGhlYWRlcnMgdG8gb3ZlcnJpZGUgdGhlIEpXVCdzIG9yZ2FuaXphdGlvbiBmaWVsZHMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGB4LW9yZy1pZGAvYHgtb3JnLW5hbWVgIGhlYWRlcnMgb3ZlcnJpZGUgdGhlIGNhbGxlcidzIG9yZ1xuICAgKiDigJQgYnV0IE9OTFkgZm9yIGEgdmVyaWZpZWQgU1lTLUFETUlOIChgaXNTdXBlckFkbWluYCBjbGFpbSkuIEZvciBhbnkgb3JkaW5hcnlcbiAgICogYXV0aGVudGljYXRlZCB1c2VyIHRoZSBoZWFkZXJzIGFyZSBpZ25vcmVkLCBzbyBlbmFibGluZyB0aGlzIGNhbiBuZXZlciBsZXQgYVxuICAgKiBub3JtYWwgdXNlciBpbXBlcnNvbmF0ZSBhbm90aGVyIHRlbmFudCdzIG9yZy4gVXNlIGZvciBjcm9zcy1vcmcgYWRtaW4gdG9vbGluZ1xuICAgKiAoZS5nLiBhIHN5c2FkbWluIG1hbmFnaW5nIGEgZ2l2ZW4gb3JnJ3MgYmlsbGluZykuIElmIHVuc3VyZSwgbGVhdmUgaXQgZGlzYWJsZWQuXG4gICAqL1xuICBhbGxvd09yZ0hlYWRlck92ZXJyaWRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERlbWFuZCB0aGF0IHRoZSB3aG9sZSBTRVNTSU9OIGJlIGF0IGxlYXN0IHRoaXMgYXNzdXJhbmNlIGxldmVsLlxuICAgKlxuICAgKiBgbWluQXNzdXJhbmNlOiAyYCBtZWFucyB0aGUgcGVyc29uIGF1dGhlbnRpY2F0ZWQgd2l0aCBhIHNlY29uZCBmYWN0b3Ig4oCUIGFcbiAgICogcGFzc2tleSB3aXRoIHVzZXIgdmVyaWZpY2F0aW9uLCBhIHBhc3N3b3JkIHBsdXMgYW4gYXV0aGVudGljYXRvciBjb2RlLCBvclxuICAgKiBTU08gdGhyb3VnaCBhbiBJZFAgdGhlIG9yZyBtYXJrZWQgYXMgZW5mb3JjaW5nIE1GQS4gQSB3ZWFrZXIgdG9rZW4gZ2V0c1xuICAgKiAqKjQwMSBgTUZBX1JFUVVJUkVEYCoqLCB3aGljaCB0aGUgY2xpZW50IGFuc3dlcnMgYnkgc2VuZGluZyB0aGUgcGVyc29uIHRvXG4gICAqIGVucm9sbWVudCBvciB0byBhIHN0cm9uZ2VyIHNpZ24taW47IHJlZnJlc2hpbmcgY2Fubm90IGhlbHAsIGJlY2F1c2UgYGFhbGBcbiAgICogbGl2ZXMgb24gdGhlIHNlc3Npb24gc2xvdCBhbmQgYSByZWZyZXNoIG5ldmVyIHJhaXNlcyBpdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgU0VTU0lPTi1sZXZlbCBjb3VudGVycGFydCB0byB7QGxpbmsgcmVxdWlyZVN0ZXBVcH0sIHdoaWNoIHN0YXlzXG4gICAqIGEgZnJlc2gsIHBlci1hY3Rpb24gY29uZmlybWF0aW9uLiBVc2UgYm90aCBvbiB0aGUgbW9zdCBkYW5nZXJvdXMgcm91dGVzLlxuICAgKlxuICAgKiBNQUNISU5FUyBORVZFUiBTQVRJU0ZZIElULiBBIHNlcnZpY2UgcHJpbmNpcGFsLCBhbiBvcmcgc2VydmljZSBhY2NvdW50IGFuZFxuICAgKiBhbiBleGNoYW5nZWQgYWNjZXNzIGtleSBhbGwgZ2V0ICoqNDAzIGBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEYCoqIOKAlCB0aGVyZSBpc1xuICAgKiBubyBwZXJzb24gYmVoaW5kIHRoZW0gdG8gaGF2ZSBwcmVzZW50ZWQgYSBmYWN0b3IsIHNvIFwiYXNzdXJhbmNlXCIgaXMgbm90IGFcbiAgICogcXVlc3Rpb24gdGhlaXIgY3JlZGVudGlhbCBjYW4gYW5zd2VyLiBUaGF0IGlzIGRlbGliZXJhdGVseSBub3QgYSBzaWxlbnRcbiAgICogcGFzcy10aHJvdWdoIGZvciBpbnRlcm5hbCBzZXJ2aWNlczogYSByb3V0ZSB0aGF0IGRlbWFuZHMgTUZBIGlzIGEgcm91dGUgYVxuICAgKiBodW1hbiBpcyBkb2luZyBzb21ldGhpbmcgZGFuZ2Vyb3VzIG9uLlxuICAgKi9cbiAgbWluQXNzdXJhbmNlPzogQXNzdXJhbmNlTGV2ZWw7XG4gIC8qKlxuICAgKiBXaXRoIHtAbGluayBtaW5Bc3N1cmFuY2V9LCBhZGRpdGlvbmFsbHkgYm91bmQgaG93IGxvbmcgYWdvIHRoYXQgc2lnbi1pblxuICAgKiBoYXBwZW5lZCAoc2Vjb25kcywgY29tcGFyZWQgYWdhaW5zdCB0aGUgdG9rZW4ncyBgYXV0aF90aW1lYCkuIEEgc2Vzc2lvbiB0aGF0XG4gICAqIGlzIE1GQS1ncmFkZSBidXQgb2xkZXIgdGhhbiB0aGlzIGdldHMgKio0MDEgYFJFQVVUSF9SRVFVSVJFRGAqKi4gSWdub3JlZFxuICAgKiB3aXRob3V0IGBtaW5Bc3N1cmFuY2VgIOKAlCBcImhvdyByZWNlbnRcIiBpcyBvbmx5IG1lYW5pbmdmdWwgb25jZSBcImhvdyBzdHJvbmdcIlxuICAgKiBpcyBiZWluZyBhc2tlZC5cbiAgICovXG4gIG1heEFnZT86IG51bWJlcjtcbn1cblxuLyoqIEpXVCBhdXRoIG1pZGRsZXdhcmUuIFVzZSBkaXJlY3RseSBvciBjYWxsIHdpdGggb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQXV0aChcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBdXRoKFxuICBvcHRpb25zPzogUmVxdWlyZUF1dGhPcHRpb25zLFxuKTogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBdXRoKFxuICByZXFPck9wdGlvbnM/OiBSZXF1ZXN0IHwgUmVxdWlyZUF1dGhPcHRpb25zLFxuICByZXM/OiBSZXNwb25zZSxcbiAgbmV4dD86IE5leHRGdW5jdGlvbixcbik6IHZvaWQgfCAoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkKSB7XG4gIGlmIChyZXFPck9wdGlvbnMgJiYgcmVzICYmIG5leHQgJiYgJ2hlYWRlcnMnIGluIHJlcU9yT3B0aW9ucykge1xuICAgIHJldHVybiBfcmVxdWlyZUF1dGgoe30sIHJlcU9yT3B0aW9ucyBhcyBSZXF1ZXN0LCByZXMsIG5leHQpO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IChyZXFPck9wdGlvbnMgYXMgUmVxdWlyZUF1dGhPcHRpb25zKSB8fCB7fTtcbiAgY29uc3QgZ2F0ZSA9IHRhZ1JvdXRlR2F0ZSgocmVxOiBSZXF1ZXN0LCByZXNJbm5lcjogUmVzcG9uc2UsIG5leHRJbm5lcjogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgX3JlcXVpcmVBdXRoKG9wdGlvbnMsIHJlcSwgcmVzSW5uZXIsIG5leHRJbm5lcik7XG4gIH0sIHsga2luZDogJ2F1dGgnIH0pO1xuICBpZiAob3B0aW9ucy5taW5Bc3N1cmFuY2UpIHtcbiAgICB0YWdSb3V0ZUdhdGUoZ2F0ZSwgeyBraW5kOiAnYXNzdXJhbmNlJywgbWluQXNzdXJhbmNlOiBvcHRpb25zLm1pbkFzc3VyYW5jZSwgLi4uKG9wdGlvbnMubWF4QWdlICE9PSB1bmRlZmluZWQgPyB7IG1heEFnZTogb3B0aW9ucy5tYXhBZ2UgfSA6IHt9KSB9KTtcbiAgfVxuICByZXR1cm4gZ2F0ZTtcbn1cbnRhZ1JvdXRlR2F0ZShyZXF1aXJlQXV0aCwgeyBraW5kOiAnYXV0aCcgfSk7XG5cbmZ1bmN0aW9uIF9yZXF1aXJlQXV0aChcbiAgb3B0aW9uczogUmVxdWlyZUF1dGhPcHRpb25zLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvbixcbik6IHZvaWQge1xuICBjb25zdCBhdXRoSGVhZGVyID0gcmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcblxuICBpZiAoIWF1dGhIZWFkZXIpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRob3JpemF0aW9uIGhlYWRlciByZXF1aXJlZCcsIEVycm9yQ29kZS5UT0tFTl9NSVNTSU5HKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gYXV0aEhlYWRlci5zcGxpdCgnICcpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyIHx8IHBhcnRzWzBdICE9PSAnQmVhcmVyJykge1xuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgYXV0aG9yaXphdGlvbiBmb3JtYXQuIFVzZTogQmVhcmVyIDx0b2tlbj4nLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gIH1cblxuICAvLyBBbiBPUEFRVUUgQUNDRVNTIEtFWSAoYHBiX3BhdF/igKZgIC8gYHBiX3NhX+KApmApIGNhcnJpZXMgbm8gY2xhaW1zIGFuZCBub1xuICAvLyBzaWduYXR1cmUsIHNvIGl0IGNhbm5vdCBiZSB2ZXJpZmllZCBoZXJlLiBUcmFkZSBpdCBhdCBwbGF0Zm9ybSBmb3IgYVxuICAvLyBzaG9ydC1saXZlZCBKV1QgKGNhY2hlZCBpbi1wcm9jZXNzIHVudGlsIGl0IGV4cGlyZXMpIGFuZCB0aGVuIHZlcmlmeSB0aGF0XG4gIC8vIEpXVCBvbiB0aGUgbm9ybWFsIHBhdGgg4oCUIHNlcnZpY2VzIG5ldmVyIHJlYWQgYSBrZXkgaGFzaC4gU2VlXG4gIC8vIGBzZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzYC5cbiAgaWYgKGlzT3BhcXVlQXBpS2V5KHBhcnRzWzFdKSkge1xuICAgIHZvaWQgcmVzb2x2ZUFwaUtleShvcHRpb25zLCBwYXJ0c1sxXSwgcmVxLCByZXMsIG5leHQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGAuY2F0Y2gobmV4dClgIGZvcndhcmRzIGEgRE9XTlNUUkVBTSBzeW5jaHJvbm91cyB0aHJvdyBmcm9tIGBuZXh0KClgIHRvXG4gIC8vIEV4cHJlc3MncyBlcnJvciBtaWRkbGV3YXJlIOKAlCB2ZXJpZmljYXRpb24gaXRzZWxmIG5ldmVyIHJlamVjdHMgKGl0IG1hcHNcbiAgLy8gZXZlcnkgZmFpbHVyZSB0byBhIHJlc3BvbnNlKS5cbiAgdm9pZCB2ZXJpZnlBbmRBdHRhY2gob3B0aW9ucywgcGFydHNbMV0sIHJlcSwgcmVzLCBuZXh0KS5jYXRjaChuZXh0KTtcbn1cblxuLyoqXG4gKiBFeGNoYW5nZSBhbiBvcGFxdWUga2V5IGZvciBhIEpXVCwgdGhlbiBjb250aW51ZSBvbiB0aGUgbm9ybWFsIHZlcmlmaWNhdGlvblxuICogcGF0aC4gQSByZWZ1c2VkIGtleSBpcyBhIDQwMTsgYW4gdW5yZWFjaGFibGUgcGxhdGZvcm0gaXMgYSA1MDMgKG5ldmVyIGEgcGFzcyDigJRcbiAqIGFuIHVudmVyaWZpYWJsZSBjcmVkZW50aWFsIGlzIG5vdCBhbiBpZGVudGl0eSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBcGlLZXkoXG4gIG9wdGlvbnM6IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAga2V5OiBzdHJpbmcsXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIExvYWRlZCBMQVpJTFksIG9uIHRoZSBmaXJzdCBrZXkgZXZlciBwcmVzZW50ZWQuIEEgc3RhdGljIGltcG9ydCB3b3VsZCBwdXRcbiAgLy8gdGhlIEhUVFAgY2xpZW50IChhbmQgcGxhdGZvcm0ncyBhZGRyZXNzKSBpbnRvIHRoZSBpbXBvcnQgZ3JhcGggb2YgZXZlcnlcbiAgLy8gbW9kdWxlIHRoYXQgbWVyZWx5IHVzZXMgYHJlcXVpcmVBdXRoYCwgd2hpY2ggYm90aCB3aWRlbnMgdGhlIGJvb3QgZ3JhcGggYW5kXG4gIC8vIGJyZWFrcyBhbnkgdGVzdCB0aGF0IG1vY2tzIGBodHRwLWNsaWVudC5qc2Agd2l0aCBhIHBhcnRpYWwgbW9kdWxlLlxuICBjb25zdCB7IGV4Y2hhbmdlQXBpS2V5LCBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvYXBpLWtleS1leGNoYW5nZS5qcycpO1xuICBsZXQgdG9rZW46IHN0cmluZztcbiAgdHJ5IHtcbiAgICB0b2tlbiA9IGF3YWl0IGV4Y2hhbmdlQXBpS2V5KGtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICAgJ0FjY2Vzcy1rZXkgdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlOyBwbGVhc2UgcmV0cnknLFxuICAgICAgICBFcnJvckNvZGUuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgb3IgcmV2b2tlZCBhY2Nlc3Mga2V5JywgRXJyb3JDb2RlLlRPS0VOX0lOVkFMSUQpO1xuICB9XG4gIGF3YWl0IHZlcmlmeUFuZEF0dGFjaChvcHRpb25zLCB0b2tlbiwgcmVxLCByZXMsIG5leHQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBbmRBdHRhY2goXG4gIG9wdGlvbnM6IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAgcmF3VG9rZW46IHN0cmluZyxcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICAvLyBUd28gY2hhaW5zLCBvbmUgZW50cnkgcG9pbnQgKHNlZSBgdmVyaWZ5QmVhcmVyVG9rZW5gKTogYSB1c2VyIHRva2VuIG11c3RcbiAgICAvLyBiZSBFUzI1NiBzaWduZWQgYnkgcGxhdGZvcm0gYW5kIHZlcmlmaWVkIGFnYWluc3QgaXRzIHB1Ymxpc2hlZCBKV0tTOyBhblxuICAgIC8vIGludGVybmFsIHNlcnZpY2UgdG9rZW4gbXVzdCBiZSBFUzI1NiBzaWduZWQgYnkgdGhhdCBzZXJ2aWNlJ3MgT1dOIGtleSBhbmRcbiAgICAvLyBkZWNsYXJlIGl0c2VsZiBhIHNlcnZpY2UgcHJpbmNpcGFsLiBCb3RoIHBpbiB0aGUgYWxnb3JpdGhtIChub1xuICAgIC8vIGFsZy1jb25mdXNpb24sIG5vIGBhbGc6bm9uZWApIGFuZCBib3RoIGFwcGx5IHRoZSBvcHRpb25hbCBpc3N1ZXIvYXVkaWVuY2VcbiAgICAvLyBiaW5kaW5nLlxuICAgIGNvbnN0IGRlY29kZWQgPSBhd2FpdCB2ZXJpZnlCZWFyZXJUb2tlbihyYXdUb2tlbik7XG5cbiAgICBpZiAoZGVjb2RlZC50eXBlICE9PSAnYWNjZXNzJykge1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnT25seSBhY2Nlc3MgdG9rZW5zIGNhbiBiZSB1c2VkIGZvciBBUEkgcmVxdWVzdHMnLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gICAgfVxuXG4gICAgaWYgKCFkZWNvZGVkLnN1YiB8fCAhZGVjb2RlZC5yb2xlIHx8ICFoYXNWYWxpZElkZW50aXR5Q2xhaW1zKGRlY29kZWQpKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdUb2tlbiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcycsIEVycm9yQ29kZS5UT0tFTl9JTlZBTElEKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2aWNlLXRva2VuIGtpbGwtc3dpdGNoOiByZWplY3QgYSBzZXJ2aWNlIHByaW5jaXBhbCB3aG9zZSBzZXJ2aWNlIGhhc1xuICAgIC8vIGJlZW4gYWRkZWQgdG8gdGhlIGRlbnlsaXN0LiBPdGhlcndpc2UgdGhlIG9ubHkgd2F5IHRvIGludmFsaWRhdGUgYVxuICAgIC8vIHNlcnZpY2UncyB0b2tlbnMgYmVmb3JlIHRoZWlyIChzaG9ydCkgVFRMIGlzIHJvdGF0aW5nIHRoYXQgc2VydmljZSdzXG4gICAgLy8gc2lnbmluZyBrZXk7IHRoaXMgY3V0cyBvbmUgY29tcHJvbWlzZWQvcm9ndWUgc2VydmljZSBvZmYgaW1tZWRpYXRlbHkuIE8oMSkgU2V0IGxvb2t1cCwgemVybyBjb3N0IHdoZW4gdGhlIGRlbnlsaXN0XG4gICAgLy8gaXMgZW1wdHkgKHRoZSBkZWZhdWx0KSwgc28gaXQgbmV2ZXIgdGF4ZXMgdGhlIFMyUyBob3QgcGF0aCB1bmxlc3MgYXJtZWQuXG4gICAgaWYgKGlzU2VydmljZVRva2VuRGVuaWVkKGRlY29kZWQpKSB7XG4gICAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl9kZW5pZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lT2YoZGVjb2RlZCkgPz8gJ3Vua25vd24nIH0pO1xuICAgICAgbG9nZ2VyLndhcm4oJ1JlamVjdGVkIGRlbnlsaXN0ZWQgc2VydmljZSB0b2tlbicsIHsgc3ViOiBkZWNvZGVkLnN1YiB9KTtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ1NlcnZpY2UgdG9rZW4gcmV2b2tlZCcsIEVycm9yQ29kZS5UT0tFTl9SRVZPS0VEKTtcbiAgICB9XG5cbiAgICByZXEudXNlciA9IHsgLi4uZGVjb2RlZCB9O1xuXG4gICAgLy8gUkVBRC1PTkxZIElNUEVSU09OQVRJT04uIFRoZSB0b2tlbiBuYW1lcyB0aGUgb3BlcmF0b3IgQU5EIHNheXMgaXQgbWF5IG9ubHlcbiAgICAvLyBsb29rOiBldmVyeSBzZXJ2aWNlIHJlZnVzZXMgYSBzdGF0ZSBjaGFuZ2UgdW5kZXIgaXQsIG5vdCBvbmx5IHBsYXRmb3JtIOKAlFxuICAgIC8vIGEgc3VwcG9ydCBzZXNzaW9uIHRoYXQgY291bGQgd3JpdGUgdG8gcGx1Z2luL2NvbXBsaWFuY2UvYmlsbGluZyBpcyBub3RcbiAgICAvLyByZWFkLW9ubHkuIENoZWNrZWQgYmVmb3JlIGFueSBvdGhlciBnYXRlIHNvIG5vIHJvdXRlIGNhbiBmb3JnZXQgaXQuXG4gICAgaWYgKGlzSW1wZXJzb25hdGlvbldyaXRlQmxvY2tlZChyZXEubWV0aG9kLCBkZWNvZGVkKSkge1xuICAgICAgaWYgKHJlcS5tZXRob2QpIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ2ltcGVyc29uYXRpb24tcmVhZC1vbmx5Jyk7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuRk9SQklEREVOLFxuICAgICAgICAnV3JpdGUgcmVxdWVzdHMgYXJlIGRpc2FibGVkIGR1cmluZyByZWFkLW9ubHkgaW1wZXJzb25hdGlvbi4gU3RvcCBpbXBlcnNvbmF0aW5nIHRvIG1ha2UgY2hhbmdlcy4nLFxuICAgICAgICBFcnJvckNvZGUuSU1QRVJTT05BVElPTl9SRUFEX09OTFksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJPT1RTVFJBUC1BRE1JTiBFTlJPTE1FTlQgU0VTU0lPTi4gU3VjaCBhIHRva2VuIGV4aXN0cyBzb1xuICAgIC8vIHRoZSBpbnN0YWxsJ3Mgb25seSBhZG1pbiBjYW4gZW5yb2wgYSBmYWN0b3I7IGl0IGlzIGBhYWw6IDFgIGFuZCBtdXN0IG5vdFxuICAgIC8vIHJlYWNoIGFueXRoaW5nIGVsc2UuIFBsYXRmb3JtIOKAlCB3aGljaCBvd25zIHRoZSBleGNlcHRpb24gYW5kIGtub3dzIHdoaWNoXG4gICAgLy8gb2YgaXRzIG93biByb3V0ZXMgYGluaXQtcGxhdGZvcm0uc2hgIGNhbGxzIOKAlCBhbGxvd3MgYW4gZXhwbGljaXQgZmV3IGJlZm9yZVxuICAgIC8vIHRoaXMgcG9pbnQgKHNlZSBpdHMgb3duIGByZXF1aXJlQXV0aGApOyBpbiBFVkVSWSBvdGhlciBzZXJ2aWNlIHRoZSBhbnN3ZXJcbiAgICAvLyBpcyBzaW1wbHkgbm8sIHNvIHRoZSByZWFjaCByZXN0cmljdGlvbiBob2xkcyB3aXRob3V0IGEgcGVyLXNlcnZpY2VcbiAgICAvLyBhbGxvd2xpc3QgdG8ga2VlcCBpbiBzeW5jLlxuICAgIGlmIChkZWNvZGVkLm1mYUVucm9sbG1lbnRQZW5kaW5nID09PSB0cnVlKSB7XG4gICAgICBlbWl0Q291bnRlcignbWZhX2VuZm9yY2VtZW50X3JlZnVzZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VJZGVudGl0eSgpLCByZWFzb246ICdib290c3RyYXBfc2Vzc2lvbicgfSk7XG4gICAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdtZmEtZW5yb2xtZW50Jyk7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuRk9SQklEREVOLFxuICAgICAgICAnRmluaXNoIHNldHRpbmcgdXAgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBiZWZvcmUgdXNpbmcgdGhlIHJlc3Qgb2YgUGlwZWxpbmUgQnVpbGRlcicsXG4gICAgICAgIEVycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2Vzc2lvbi1sZXZlbCBhc3N1cmFuY2UgKGByZXF1aXJlQXV0aCh7IG1pbkFzc3VyYW5jZSwgbWF4QWdlIH0pYCkuXG4gICAgaWYgKG9wdGlvbnMubWluQXNzdXJhbmNlXG4gICAgICAmJiByZWZ1c2VGb3JBc3N1cmFuY2UoeyBtaW5Bc3N1cmFuY2U6IG9wdGlvbnMubWluQXNzdXJhbmNlLCAuLi4ob3B0aW9ucy5tYXhBZ2UgIT09IHVuZGVmaW5lZCA/IHsgbWF4QWdlOiBvcHRpb25zLm1heEFnZSB9IDoge30pIH0sIGRlY29kZWQsIHJlcSwgcmVzKSkgcmV0dXJuO1xuXG4gICAgLy8gVGhlIHgtb3JnLWlkL3gtb3JnLW5hbWUgb3ZlcnJpZGUgbGV0cyBhIFNZUy1BRE1JTiBhY3Qgb24gYSBjaG9zZW4gb3JnXG4gICAgLy8gKGNyb3NzLW9yZyBhZG1pbiB0b29saW5nKS4gSXQgaXMgZ2F0ZWQgb24gdGhlIHZlcmlmaWVkIGBpc1N1cGVyQWRtaW5gIGNsYWltXG4gICAgLy8gaGVyZSBzbyB0aGF0IGV2ZW4gYSByb3V0ZSB3aGljaCBtaXN0YWtlbmx5IGVuYWJsZXMgYGFsbG93T3JnSGVhZGVyT3ZlcnJpZGVgXG4gICAgLy8gY2FuIE5FVkVSIGxldCBhbiBvcmRpbmFyeSBhdXRoZW50aWNhdGVkIHVzZXIgc3Bvb2YgYW5vdGhlciB0ZW5hbnQncyBvcmcgdmlhXG4gICAgLy8gdGhlIGhlYWRlciDigJQgZGVmZW5jZS1pbi1kZXB0aCBhZ2FpbnN0IHRoZSBjcm9zcy10ZW5hbnQgYnJlYWsgdGhpcyBjYXVzZWQuXG4gICAgaWYgKG9wdGlvbnMuYWxsb3dPcmdIZWFkZXJPdmVycmlkZSAmJiBkZWNvZGVkLmlzU3VwZXJBZG1pbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaGVhZGVyT3JnSWQgPSBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtb3JnLWlkJ10pO1xuICAgICAgY29uc3QgaGVhZGVyT3JnTmFtZSA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctbmFtZSddKTtcbiAgICAgIGlmIChoZWFkZXJPcmdJZCkgcmVxLnVzZXIub3JnYW5pemF0aW9uSWQgPSBoZWFkZXJPcmdJZDtcbiAgICAgIGlmIChoZWFkZXJPcmdOYW1lKSByZXEudXNlci5vcmdhbml6YXRpb25OYW1lID0gaGVhZGVyT3JnTmFtZTtcbiAgICB9XG5cbiAgICAvLyBSZS1kZXJpdmUgdGhlIHJlcXVlc3QncyB0ZW5hbnQgaWRlbnRpdHkgZnJvbSB0aGUgTk9XLXZlcmlmaWVkIEpXVC5cbiAgICAvL1xuICAgIC8vIGBhdHRhY2hSZXF1ZXN0Q29udGV4dGAgcnVucyBhcyBhIGdsb2JhbCBtaWRkbGV3YXJlIEJFRk9SRSB0aGlzIHBlci1yb3V0ZVxuICAgIC8vIGByZXF1aXJlQXV0aGAsIHNvIGl0IGNhcHR1cmVkIGByZXEuY29udGV4dC5pZGVudGl0eWAgd2hpbGUgYHJlcS51c2VyYCB3YXNcbiAgICAvLyBzdGlsbCB1bmRlZmluZWQg4oCUIGF0IHdoaWNoIHBvaW50IGBnZXRJZGVudGl0eWAgZmFsbHMgYmFjayB0byB0aGUgcmF3LFxuICAgIC8vIGNsaWVudC1zZXR0YWJsZSBgeC1vcmctaWRgL2B4LXVzZXItaWRgIGhlYWRlcnMuIEV2ZXJ5IGRvd25zdHJlYW0gdGVuYW50LVxuICAgIC8vIGF1dGhvcml0eSBjb25zdW1lciAocmVxdWlyZU9yZ0lkLCB3aXRoVGVuYW50Q29udGV4dCdzIFJMUyBzY29wZSwgY2hlY2tRdW90YSxcbiAgICAvLyB3aXRoUm91dGUsIGFuZCB0aGUgaWRlbXBvdGVuY3kgbmFtZXNwYWNlKSByZWFkcyBgcmVxLmNvbnRleHQuaWRlbnRpdHlgLCBzb1xuICAgIC8vIHRoYXQgZnJvemVuIGhlYWRlci1kZXJpdmVkIHZhbHVlIOKAlCBub3QgdGhlIEpXVCDigJQgd2FzIGdvdmVybmluZyB0ZW5hbmN5IG9uXG4gICAgLy8gYW55IG5vbi1uZ2lueCBwYXRoLiBSZWNvbXB1dGluZyBoZXJlLCBhdCB0aGUgc2luZ2xlIHBvc3QtdmVyaWZpY2F0aW9uIGNob2tlXG4gICAgLy8gcG9pbnQsIG1ha2VzIGBnZXRJZGVudGl0eWAgcHJlZmVyIHRoZSB2ZXJpZmllZCBgcmVxLnVzZXJgIChzZWUgaWRlbnRpdHkudHMpXG4gICAgLy8gc28gdGVuYW5jeSBpcyBKV1QtYXV0aG9yaXRhdGl2ZS4gVGhlIG5naW54IGB4LW9yZy1pZGAgb3ZlcndyaXRlIHN0YXlzIGFzXG4gICAgLy8gZGVmZW5jZS1pbi1kZXB0aC4gR3VhcmRlZCBvbiBgcmVxLmNvbnRleHRgIHNvIHNlcnZpY2VzL3BhdGhzIHRoYXQgbmV2ZXJcbiAgICAvLyBhdHRhY2ggYSBjb250ZXh0IChvciBydW4gcmVxdWlyZUF1dGggcHJlLWNvbnRleHQpIGFyZSB1bmFmZmVjdGVkLlxuICAgIGNvbnN0IHJlcUN0eCA9IChyZXEgYXMgUmVxdWVzdCAmIHsgY29udGV4dD86IHsgaWRlbnRpdHk6IFJlcXVlc3RJZGVudGl0eSB9IH0pLmNvbnRleHQ7XG4gICAgaWYgKHJlcUN0eCkge1xuICAgICAgcmVxQ3R4LmlkZW50aXR5ID0gZ2V0SWRlbnRpdHkocmVxIGFzIHVua25vd24gYXMgSHR0cFJlcXVlc3QpO1xuICAgIH1cblxuICAgIC8vIFNlc3Npb24gaW52YWxpZGF0aW9uICh0b2tlbi12ZXJzaW9uIHN0b3JlICsgaW1wZXJzb25hdGlvbi1zZXNzaW9uXG4gICAgLy8gbGl2ZW5lc3MpLiBObyBzdG9yZSByZWdpc3RlcmVkIOKHkiBvbmx5IGltcGVyc29uYXRpb24gc2Vzc2lvbnMgYXJlIGNoZWNrZWQuXG4gICAgaWYgKG5lZWRzUmV2b2NhdGlvbkNoZWNrKGRlY29kZWQpKSB7XG4gICAgICAvLyBgLmNhdGNoKG5leHQpYCBmb3J3YXJkcyBhIERPV05TVFJFQU0gc3luY2hyb25vdXMgdGhyb3cgZnJvbSBgbmV4dCgpYCB0b1xuICAgICAgLy8gRXhwcmVzcydzIGVycm9yIG1pZGRsZXdhcmUg4oCUIHRoaXMgYG5leHQoKWAgcnVucyBpbiBhIG1pY3JvdGFzaywgb3V0c2lkZVxuICAgICAgLy8gdGhlIHN1cnJvdW5kaW5nIHRyeS9jYXRjaC4gVGhlIGNoZWNrIGl0c2VsZiBuZXZlciByZWplY3RzLlxuICAgICAgY2hlY2tSZXZvY2F0aW9uKGRlY29kZWQpLnRoZW4oKHJlZnVzYWwpID0+IHtcbiAgICAgICAgaWYgKHJlZnVzYWwpIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgcmVmdXNhbCwgRXJyb3JDb2RlLlRPS0VOX1JFVk9LRUQpO1xuICAgICAgICBydW5EZWZlcnJlZFF1b3RhQ2hlY2socmVxLCByZXMsIG5leHQpO1xuICAgICAgfSkuY2F0Y2gobmV4dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIGFwaUNhbGxzIGNoZWNrIGEgbW91bnQgYXJtZWQgKGFwaS1zZXJ2ZXIgYGFwaUNhbGxzUXVvdGFgKSBydW5zIGhlcmUsXG4gICAgLy8gbm93IHRoYXQgdGVuYW5jeSBpcyBKV1QtYXV0aG9yaXRhdGl2ZTsgYSBwbGFpbiBuZXh0KCkgd2hlcmUgbm9uZSB3YXMgYXJtZWQuXG4gICAgcnVuRGVmZXJyZWRRdW90YUNoZWNrKHJlcSwgcmVzLCBuZXh0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBqd3QuVG9rZW5FeHBpcmVkRXJyb3IpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ1Rva2VuIGhhcyBleHBpcmVkJywgRXJyb3JDb2RlLlRPS0VOX0VYUElSRUQpO1xuICAgIH1cblxuICAgIC8vIFRoZSBzaWduaW5nIGtleXMgY291bGRuJ3QgYmUgZmV0Y2hlZCwgc28gdGhlIHRva2VuJ3MgdmFsaWRpdHkgaXMgVU5LTk9XTi5cbiAgICAvLyBGYWlsIENMT1NFRCB3aXRoIGEgcmV0cnlhYmxlIDUwMyDigJQgbmV2ZXIgYSBwYXNzLCBhbmQgbmV2ZXIgYSA0MDEgdGhhdFxuICAgIC8vIHdvdWxkIHNlbmQgYSBsZWdpdGltYXRlIGNsaWVudCBvZmYgdG8gcmUtYXV0aGVudGljYXRlIG92ZXIgb3VyIG91dGFnZS5cbiAgICAvLyBTYW1lIHJlYXNvbmluZyBmb3IgdGhlIFNFUlZJQ0UgY2hhaW46IG5vIHJlYWRhYmxlIGtleSBidW5kbGUgbWVhbnMgbm8gd2F5XG4gICAgLy8gdG8gdGVsbCBhIHBlZXIncyB0b2tlbiBmcm9tIGEgZm9yZ2VyeSwgc28gdGhlIHJlcXVlc3QgaXMgcmVmdXNlZCB3aXRoIGFcbiAgICAvLyByZXRyeWFibGUgNTAzIHJhdGhlciB0aGFuIGFkbWl0dGVkIG9yIGJvdW5jZWQgdG8gcmUtYXV0aGVudGljYXRlLlxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEp3a3NVbmF2YWlsYWJsZUVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgU2VydmljZUtleUVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignUmVqZWN0aW5nIHJlcXVlc3Q6IHRva2VuIHNpZ25pbmcga2V5cyB1bmF2YWlsYWJsZScsIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICAgJ1Rva2VuIHZlcmlmaWNhdGlvbiBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZTsgcGxlYXNlIHJldHJ5JyxcbiAgICAgICAgRXJyb3JDb2RlLlNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFVua25vd25LaWRFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIGp3dC5Kc29uV2ViVG9rZW5FcnJvcikge1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnSW52YWxpZCB0b2tlbicsIEVycm9yQ29kZS5UT0tFTl9JTlZBTElEKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLCBFcnJvckNvZGUuVU5BVVRIT1JJWkVEKTtcbiAgfVxufVxuXG4iXX0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBUXRDLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBdUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUF3QixNQUFNLHNC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LFVBQVUsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xHLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogYHJlcXVpcmVBdXRoYDogYmVhcmVyIC8gYWNjZXNzLWtleSBhdXRoZW50aWNhdGlvbiwgdGhlIGNoZWNrcyBldmVyeVxuICogdmVyaWZpZWQgcmVxdWVzdCBwYXNzZXMsIGFuZCB0aGUgdGVuYW50IGlkZW50aXR5IGl0IGF0dGFjaGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGp3dCBmcm9tICdqc29ud2VidG9rZW4nO1xuaW1wb3J0IHsgcmVmdXNlRm9yQXNzdXJhbmNlIH0gZnJvbSAnLi9hc3N1cmFuY2UuanMnO1xuaW1wb3J0IHsgY2xpZW50VmVyc2lvbk9mIH0gZnJvbSAnLi9jbGllbnQtdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBydW5EZWZlcnJlZFF1b3RhQ2hlY2sgfSBmcm9tICcuL2RlZmVycmVkLXF1b3RhLWNoZWNrLmpzJztcbmltcG9ydCB7IGhhc1ZhbGlkSWRlbnRpdHlDbGFpbXMsIHZlcmlmeUJlYXJlclRva2VuIH0gZnJvbSAnLi9qd3QtdmVyaWZ5LmpzJztcbmltcG9ydCB7IHJlY29yZEF1dGh6RGVuaWFsIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWdhdGVzLmpzJztcbmltcG9ydCB7IGNoZWNrUmV2b2NhdGlvbiwgaXNJbXBlcnNvbmF0aW9uV3JpdGVCbG9ja2VkLCBuZWVkc1Jldm9jYXRpb25DaGVjayB9IGZyb20gJy4vcmV2b2NhdGlvbi5qcyc7XG5pbXBvcnQgeyB0YWdSb3V0ZUdhdGUgfSBmcm9tICcuL3JvdXRlLXRhYmxlLmpzJztcbmltcG9ydCB7IGlzU2VydmljZVRva2VuRGVuaWVkLCBzZXJ2aWNlTmFtZU9mIH0gZnJvbSAnLi9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2h0dHAtc3RhdHVzLmpzJztcbmltcG9ydCB7IEp3a3NVbmF2YWlsYWJsZUVycm9yLCBVbmtub3duS2lkRXJyb3IgfSBmcm9tICcuLi9zZXJ2aWNlcy9qd2tzLWNhY2hlLmpzJztcbmltcG9ydCB7IFNlcnZpY2VLZXlFcnJvciwgc2VydmljZUlkZW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvc2VydmljZS1rZXlzLmpzJztcbmltcG9ydCB7IHR5cGUgQXNzdXJhbmNlTGV2ZWwgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIdHRwUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzL2h0dHAuanMnO1xuaW1wb3J0IHsgaXNPcGFxdWVBcGlLZXkgfSBmcm9tICcuLi91dGlscy9hcGkta2V5LmpzJztcbmltcG9ydCB7IGdldEhlYWRlclN0cmluZyB9IGZyb20gJy4uL3V0aWxzL2hlYWRlcnMuanMnO1xuaW1wb3J0IHsgZ2V0SWRlbnRpdHksIHR5cGUgUmVxdWVzdElkZW50aXR5IH0gZnJvbSAnLi4vdXRpbHMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2F1dGgtbWlkZGxld2FyZScpO1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlQXV0aE9wdGlvbnMge1xuICAvKipcbiAgICogQWxsb3cgeC1vcmctaWQveC1vcmctbmFtZSBoZWFkZXJzIHRvIG92ZXJyaWRlIHRoZSBKV1QncyBvcmdhbml6YXRpb24gZmllbGRzLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBgeC1vcmctaWRgL2B4LW9yZy1uYW1lYCBoZWFkZXJzIG92ZXJyaWRlIHRoZSBjYWxsZXIncyBvcmdcbiAgICog4oCUIGJ1dCBPTkxZIGZvciBhIHZlcmlmaWVkIFNZUy1BRE1JTiAoYGlzU3VwZXJBZG1pbmAgY2xhaW0pLiBGb3IgYW55IG9yZGluYXJ5XG4gICAqIGF1dGhlbnRpY2F0ZWQgdXNlciB0aGUgaGVhZGVycyBhcmUgaWdub3JlZCwgc28gZW5hYmxpbmcgdGhpcyBjYW4gbmV2ZXIgbGV0IGFcbiAgICogbm9ybWFsIHVzZXIgaW1wZXJzb25hdGUgYW5vdGhlciB0ZW5hbnQncyBvcmcuIFVzZSBmb3IgY3Jvc3Mtb3JnIGFkbWluIHRvb2xpbmdcbiAgICogKGUuZy4gYSBzeXNhZG1pbiBtYW5hZ2luZyBhIGdpdmVuIG9yZydzIGJpbGxpbmcpLiBJZiB1bnN1cmUsIGxlYXZlIGl0IGRpc2FibGVkLlxuICAgKi9cbiAgYWxsb3dPcmdIZWFkZXJPdmVycmlkZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEZW1hbmQgdGhhdCB0aGUgd2hvbGUgU0VTU0lPTiBiZSBhdCBsZWFzdCB0aGlzIGFzc3VyYW5jZSBsZXZlbC5cbiAgICpcbiAgICogYG1pbkFzc3VyYW5jZTogMmAgbWVhbnMgdGhlIHBlcnNvbiBhdXRoZW50aWNhdGVkIHdpdGggYSBzZWNvbmQgZmFjdG9yIOKAlCBhXG4gICAqIHBhc3NrZXkgd2l0aCB1c2VyIHZlcmlmaWNhdGlvbiwgYSBwYXNzd29yZCBwbHVzIGFuIGF1dGhlbnRpY2F0b3IgY29kZSwgb3JcbiAgICogU1NPIHRocm91Z2ggYW4gSWRQIHRoZSBvcmcgbWFya2VkIGFzIGVuZm9yY2luZyBNRkEuIEEgd2Vha2VyIHRva2VuIGdldHNcbiAgICogKio0MDEgYE1GQV9SRVFVSVJFRGAqKiwgd2hpY2ggdGhlIGNsaWVudCBhbnN3ZXJzIGJ5IHNlbmRpbmcgdGhlIHBlcnNvbiB0b1xuICAgKiBlbnJvbG1lbnQgb3IgdG8gYSBzdHJvbmdlciBzaWduLWluOyByZWZyZXNoaW5nIGNhbm5vdCBoZWxwLCBiZWNhdXNlIGBhYWxgXG4gICAqIGxpdmVzIG9uIHRoZSBzZXNzaW9uIHNsb3QgYW5kIGEgcmVmcmVzaCBuZXZlciByYWlzZXMgaXQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIFNFU1NJT04tbGV2ZWwgY291bnRlcnBhcnQgdG8ge0BsaW5rIHJlcXVpcmVTdGVwVXB9LCB3aGljaCBzdGF5c1xuICAgKiBhIGZyZXNoLCBwZXItYWN0aW9uIGNvbmZpcm1hdGlvbi4gVXNlIGJvdGggb24gdGhlIG1vc3QgZGFuZ2Vyb3VzIHJvdXRlcy5cbiAgICpcbiAgICogTUFDSElORVMgTkVWRVIgU0FUSVNGWSBJVC4gQSBzZXJ2aWNlIHByaW5jaXBhbCwgYW4gb3JnIHNlcnZpY2UgYWNjb3VudCBhbmRcbiAgICogYW4gZXhjaGFuZ2VkIGFjY2VzcyBrZXkgYWxsIGdldCAqKjQwMyBgSFVNQU5fU0VTU0lPTl9SRVFVSVJFRGAqKiDigJQgdGhlcmUgaXNcbiAgICogbm8gcGVyc29uIGJlaGluZCB0aGVtIHRvIGhhdmUgcHJlc2VudGVkIGEgZmFjdG9yLCBzbyBcImFzc3VyYW5jZVwiIGlzIG5vdCBhXG4gICAqIHF1ZXN0aW9uIHRoZWlyIGNyZWRlbnRpYWwgY2FuIGFuc3dlci4gVGhhdCBpcyBkZWxpYmVyYXRlbHkgbm90IGEgc2lsZW50XG4gICAqIHBhc3MtdGhyb3VnaCBmb3IgaW50ZXJuYWwgc2VydmljZXM6IGEgcm91dGUgdGhhdCBkZW1hbmRzIE1GQSBpcyBhIHJvdXRlIGFcbiAgICogaHVtYW4gaXMgZG9pbmcgc29tZXRoaW5nIGRhbmdlcm91cyBvbi5cbiAgICovXG4gIG1pbkFzc3VyYW5jZT86IEFzc3VyYW5jZUxldmVsO1xuICAvKipcbiAgICogV2l0aCB7QGxpbmsgbWluQXNzdXJhbmNlfSwgYWRkaXRpb25hbGx5IGJvdW5kIGhvdyBsb25nIGFnbyB0aGF0IHNpZ24taW5cbiAgICogaGFwcGVuZWQgKHNlY29uZHMsIGNvbXBhcmVkIGFnYWluc3QgdGhlIHRva2VuJ3MgYGF1dGhfdGltZWApLiBBIHNlc3Npb24gdGhhdFxuICAgKiBpcyBNRkEtZ3JhZGUgYnV0IG9sZGVyIHRoYW4gdGhpcyBnZXRzICoqNDAxIGBSRUFVVEhfUkVRVUlSRURgKiouIElnbm9yZWRcbiAgICogd2l0aG91dCBgbWluQXNzdXJhbmNlYCDigJQgXCJob3cgcmVjZW50XCIgaXMgb25seSBtZWFuaW5nZnVsIG9uY2UgXCJob3cgc3Ryb25nXCJcbiAgICogaXMgYmVpbmcgYXNrZWQuXG4gICAqL1xuICBtYXhBZ2U/OiBudW1iZXI7XG59XG5cbi8qKiBKV1QgYXV0aCBtaWRkbGV3YXJlLiBVc2UgZGlyZWN0bHkgb3IgY2FsbCB3aXRoIG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZUF1dGgoXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQXV0aChcbiAgb3B0aW9ucz86IFJlcXVpcmVBdXRoT3B0aW9ucyxcbik6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQXV0aChcbiAgcmVxT3JPcHRpb25zPzogUmVxdWVzdCB8IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAgcmVzPzogUmVzcG9uc2UsXG4gIG5leHQ/OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHwgKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZCkge1xuICBpZiAocmVxT3JPcHRpb25zICYmIHJlcyAmJiBuZXh0ICYmICdoZWFkZXJzJyBpbiByZXFPck9wdGlvbnMpIHtcbiAgICByZXR1cm4gX3JlcXVpcmVBdXRoKHt9LCByZXFPck9wdGlvbnMgYXMgUmVxdWVzdCwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSAocmVxT3JPcHRpb25zIGFzIFJlcXVpcmVBdXRoT3B0aW9ucykgfHwge307XG4gIGNvbnN0IGdhdGUgPSB0YWdSb3V0ZUdhdGUoKHJlcTogUmVxdWVzdCwgcmVzSW5uZXI6IFJlc3BvbnNlLCBuZXh0SW5uZXI6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIF9yZXF1aXJlQXV0aChvcHRpb25zLCByZXEsIHJlc0lubmVyLCBuZXh0SW5uZXIpO1xuICB9LCB7IGtpbmQ6ICdhdXRoJyB9KTtcbiAgaWYgKG9wdGlvbnMubWluQXNzdXJhbmNlKSB7XG4gICAgdGFnUm91dGVHYXRlKGdhdGUsIHsga2luZDogJ2Fzc3VyYW5jZScsIG1pbkFzc3VyYW5jZTogb3B0aW9ucy5taW5Bc3N1cmFuY2UsIC4uLihvcHRpb25zLm1heEFnZSAhPT0gdW5kZWZpbmVkID8geyBtYXhBZ2U6IG9wdGlvbnMubWF4QWdlIH0gOiB7fSkgfSk7XG4gIH1cbiAgcmV0dXJuIGdhdGU7XG59XG50YWdSb3V0ZUdhdGUocmVxdWlyZUF1dGgsIHsga2luZDogJ2F1dGgnIH0pO1xuXG5mdW5jdGlvbiBfcmVxdWlyZUF1dGgoXG4gIG9wdGlvbnM6IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHtcbiAgY29uc3QgYXV0aEhlYWRlciA9IHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG5cbiAgaWYgKCFhdXRoSGVhZGVyKSB7XG4gICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnQXV0aG9yaXphdGlvbiBoZWFkZXIgcmVxdWlyZWQnLCBFcnJvckNvZGUuVE9LRU5fTUlTU0lORyk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IGF1dGhIZWFkZXIuc3BsaXQoJyAnKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCBwYXJ0c1swXSAhPT0gJ0JlYXJlcicpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdJbnZhbGlkIGF1dGhvcml6YXRpb24gZm9ybWF0LiBVc2U6IEJlYXJlciA8dG9rZW4+JywgRXJyb3JDb2RlLlRPS0VOX0lOVkFMSUQpO1xuICB9XG5cbiAgLy8gQW4gT1BBUVVFIEFDQ0VTUyBLRVkgKGBwYl9wYXRf4oCmYCAvIGBwYl9zYV/igKZgKSBjYXJyaWVzIG5vIGNsYWltcyBhbmQgbm9cbiAgLy8gc2lnbmF0dXJlLCBzbyBpdCBjYW5ub3QgYmUgdmVyaWZpZWQgaGVyZS4gVHJhZGUgaXQgYXQgcGxhdGZvcm0gZm9yIGFcbiAgLy8gc2hvcnQtbGl2ZWQgSldUIChjYWNoZWQgaW4tcHJvY2VzcyB1bnRpbCBpdCBleHBpcmVzKSBhbmQgdGhlbiB2ZXJpZnkgdGhhdFxuICAvLyBKV1Qgb24gdGhlIG5vcm1hbCBwYXRoIOKAlCBzZXJ2aWNlcyBuZXZlciByZWFkIGEga2V5IGhhc2guIFNlZVxuICAvLyBgc2VydmljZXMvYXBpLWtleS1leGNoYW5nZS50c2AuXG4gIGlmIChpc09wYXF1ZUFwaUtleShwYXJ0c1sxXSkpIHtcbiAgICB2b2lkIHJlc29sdmVBcGlLZXkob3B0aW9ucywgcGFydHNbMV0sIHJlcSwgcmVzLCBuZXh0KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBgLmNhdGNoKG5leHQpYCBmb3J3YXJkcyBhIERPV05TVFJFQU0gc3luY2hyb25vdXMgdGhyb3cgZnJvbSBgbmV4dCgpYCB0b1xuICAvLyBFeHByZXNzJ3MgZXJyb3IgbWlkZGxld2FyZSDigJQgdmVyaWZpY2F0aW9uIGl0c2VsZiBuZXZlciByZWplY3RzIChpdCBtYXBzXG4gIC8vIGV2ZXJ5IGZhaWx1cmUgdG8gYSByZXNwb25zZSkuXG4gIHZvaWQgdmVyaWZ5QW5kQXR0YWNoKG9wdGlvbnMsIHBhcnRzWzFdLCByZXEsIHJlcywgbmV4dCkuY2F0Y2gobmV4dCk7XG59XG5cbi8qKlxuICogRXhjaGFuZ2UgYW4gb3BhcXVlIGtleSBmb3IgYSBKV1QsIHRoZW4gY29udGludWUgb24gdGhlIG5vcm1hbCB2ZXJpZmljYXRpb25cbiAqIHBhdGguIEEgcmVmdXNlZCBrZXkgaXMgYSA0MDE7IGFuIHVucmVhY2hhYmxlIHBsYXRmb3JtIGlzIGEgNTAzIChuZXZlciBhIHBhc3Mg4oCUXG4gKiBhbiB1bnZlcmlmaWFibGUgY3JlZGVudGlhbCBpcyBub3QgYW4gaWRlbnRpdHkpLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpS2V5KFxuICBvcHRpb25zOiBSZXF1aXJlQXV0aE9wdGlvbnMsXG4gIGtleTogc3RyaW5nLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvbixcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBMb2FkZWQgTEFaSUxZLCBvbiB0aGUgZmlyc3Qga2V5IGV2ZXIgcHJlc2VudGVkLiBBIHN0YXRpYyBpbXBvcnQgd291bGQgcHV0XG4gIC8vIHRoZSBIVFRQIGNsaWVudCAoYW5kIHBsYXRmb3JtJ3MgYWRkcmVzcykgaW50byB0aGUgaW1wb3J0IGdyYXBoIG9mIGV2ZXJ5XG4gIC8vIG1vZHVsZSB0aGF0IG1lcmVseSB1c2VzIGByZXF1aXJlQXV0aGAsIHdoaWNoIGJvdGggd2lkZW5zIHRoZSBib290IGdyYXBoIGFuZFxuICAvLyBicmVha3MgYW55IHRlc3QgdGhhdCBtb2NrcyBgaHR0cC1jbGllbnQuanNgIHdpdGggYSBwYXJ0aWFsIG1vZHVsZS5cbiAgY29uc3QgeyBleGNoYW5nZUFwaUtleSwgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL2FwaS1rZXktZXhjaGFuZ2UuanMnKTtcbiAgbGV0IHRva2VuOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgdG9rZW4gPSBhd2FpdCBleGNoYW5nZUFwaUtleShrZXksIGNsaWVudFZlcnNpb25PZihyZXEpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IoXG4gICAgICAgIHJlcywgSHR0cFN0YXR1cy5TRVJWSUNFX1VOQVZBSUxBQkxFLFxuICAgICAgICAnQWNjZXNzLWtleSB2ZXJpZmljYXRpb24gaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGU7IHBsZWFzZSByZXRyeScsXG4gICAgICAgIEVycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnSW52YWxpZCBvciByZXZva2VkIGFjY2VzcyBrZXknLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gIH1cbiAgYXdhaXQgdmVyaWZ5QW5kQXR0YWNoKG9wdGlvbnMsIHRva2VuLCByZXEsIHJlcywgbmV4dCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUFuZEF0dGFjaChcbiAgb3B0aW9uczogUmVxdWlyZUF1dGhPcHRpb25zLFxuICByYXdUb2tlbjogc3RyaW5nLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvbixcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIC8vIFR3byBjaGFpbnMsIG9uZSBlbnRyeSBwb2ludCAoc2VlIGB2ZXJpZnlCZWFyZXJUb2tlbmApOiBhIHVzZXIgdG9rZW4gbXVzdFxuICAgIC8vIGJlIEVTMjU2IHNpZ25lZCBieSBwbGF0Zm9ybSBhbmQgdmVyaWZpZWQgYWdhaW5zdCBpdHMgcHVibGlzaGVkIEpXS1M7IGFuXG4gICAgLy8gaW50ZXJuYWwgc2VydmljZSB0b2tlbiBtdXN0IGJlIEVTMjU2IHNpZ25lZCBieSB0aGF0IHNlcnZpY2UncyBPV04ga2V5IGFuZFxuICAgIC8vIGRlY2xhcmUgaXRzZWxmIGEgc2VydmljZSBwcmluY2lwYWwuIEJvdGggcGluIHRoZSBhbGdvcml0aG0gKG5vXG4gICAgLy8gYWxnLWNvbmZ1c2lvbiwgbm8gYGFsZzpub25lYCkgYW5kIGJvdGggYXBwbHkgdGhlIG9wdGlvbmFsIGlzc3Vlci9hdWRpZW5jZVxuICAgIC8vIGJpbmRpbmcuXG4gICAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IHZlcmlmeUJlYXJlclRva2VuKHJhd1Rva2VuKTtcblxuICAgIGlmIChkZWNvZGVkLnR5cGUgIT09ICdhY2Nlc3MnKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdPbmx5IGFjY2VzcyB0b2tlbnMgY2FuIGJlIHVzZWQgZm9yIEFQSSByZXF1ZXN0cycsIEVycm9yQ29kZS5UT0tFTl9JTlZBTElEKTtcbiAgICB9XG5cbiAgICBpZiAoIWRlY29kZWQuc3ViIHx8ICFkZWNvZGVkLnJvbGUgfHwgIWhhc1ZhbGlkSWRlbnRpdHlDbGFpbXMoZGVjb2RlZCkpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ1Rva2VuIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzJywgRXJyb3JDb2RlLlRPS0VOX0lOVkFMSUQpO1xuICAgIH1cblxuICAgIC8vIFNlcnZpY2UtdG9rZW4ga2lsbC1zd2l0Y2g6IHJlamVjdCBhIHNlcnZpY2UgcHJpbmNpcGFsIHdob3NlIHNlcnZpY2UgaGFzXG4gICAgLy8gYmVlbiBhZGRlZCB0byB0aGUgZGVueWxpc3QuIE90aGVyd2lzZSB0aGUgb25seSB3YXkgdG8gaW52YWxpZGF0ZSBhXG4gICAgLy8gc2VydmljZSdzIHRva2VucyBiZWZvcmUgdGhlaXIgKHNob3J0KSBUVEwgaXMgcm90YXRpbmcgdGhhdCBzZXJ2aWNlJ3NcbiAgICAvLyBzaWduaW5nIGtleTsgdGhpcyBjdXRzIG9uZSBjb21wcm9taXNlZC9yb2d1ZSBzZXJ2aWNlIG9mZiBpbW1lZGlhdGVseS4gTygxKSBTZXQgbG9va3VwLCB6ZXJvIGNvc3Qgd2hlbiB0aGUgZGVueWxpc3RcbiAgICAvLyBpcyBlbXB0eSAodGhlIGRlZmF1bHQpLCBzbyBpdCBuZXZlciB0YXhlcyB0aGUgUzJTIGhvdCBwYXRoIHVubGVzcyBhcm1lZC5cbiAgICBpZiAoaXNTZXJ2aWNlVG9rZW5EZW5pZWQoZGVjb2RlZCkpIHtcbiAgICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3Rva2VuX2RlbmllZF90b3RhbCcsIHsgc2VydmljZTogc2VydmljZU5hbWVPZihkZWNvZGVkKSA/PyAndW5rbm93bicgfSk7XG4gICAgICBsb2dnZXIud2FybignUmVqZWN0ZWQgZGVueWxpc3RlZCBzZXJ2aWNlIHRva2VuJywgeyBzdWI6IGRlY29kZWQuc3ViIH0pO1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnU2VydmljZSB0b2tlbiByZXZva2VkJywgRXJyb3JDb2RlLlRPS0VOX1JFVk9LRUQpO1xuICAgIH1cblxuICAgIHJlcS51c2VyID0geyAuLi5kZWNvZGVkIH07XG5cbiAgICAvLyBSRUFELU9OTFkgSU1QRVJTT05BVElPTi4gVGhlIHRva2VuIG5hbWVzIHRoZSBvcGVyYXRvciBBTkQgc2F5cyBpdCBtYXkgb25seVxuICAgIC8vIGxvb2s6IGV2ZXJ5IHNlcnZpY2UgcmVmdXNlcyBhIHN0YXRlIGNoYW5nZSB1bmRlciBpdCwgbm90IG9ubHkgcGxhdGZvcm0g4oCUXG4gICAgLy8gYSBzdXBwb3J0IHNlc3Npb24gdGhhdCBjb3VsZCB3cml0ZSB0byBwbHVnaW4vY29tcGxpYW5jZS9iaWxsaW5nIGlzIG5vdFxuICAgIC8vIHJlYWQtb25seS4gQ2hlY2tlZCBiZWZvcmUgYW55IG90aGVyIGdhdGUgc28gbm8gcm91dGUgY2FuIGZvcmdldCBpdC5cbiAgICBpZiAoaXNJbXBlcnNvbmF0aW9uV3JpdGVCbG9ja2VkKHJlcS5tZXRob2QsIGRlY29kZWQpKSB7XG4gICAgICBpZiAocmVxLm1ldGhvZCkgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnaW1wZXJzb25hdGlvbi1yZWFkLW9ubHknKTtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IoXG4gICAgICAgIHJlcywgSHR0cFN0YXR1cy5GT1JCSURERU4sXG4gICAgICAgICdXcml0ZSByZXF1ZXN0cyBhcmUgZGlzYWJsZWQgZHVyaW5nIHJlYWQtb25seSBpbXBlcnNvbmF0aW9uLiBTdG9wIGltcGVyc29uYXRpbmcgdG8gbWFrZSBjaGFuZ2VzLicsXG4gICAgICAgIEVycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQk9PVFNUUkFQLUFETUlOIEVOUk9MTUVOVCBTRVNTSU9OLiBTdWNoIGEgdG9rZW4gZXhpc3RzIHNvXG4gICAgLy8gdGhlIGluc3RhbGwncyBvbmx5IGFkbWluIGNhbiBlbnJvbCBhIGZhY3RvcjsgaXQgaXMgYGFhbDogMWAgYW5kIG11c3Qgbm90XG4gICAgLy8gcmVhY2ggYW55dGhpbmcgZWxzZS4gUGxhdGZvcm0g4oCUIHdoaWNoIG93bnMgdGhlIGV4Y2VwdGlvbiBhbmQga25vd3Mgd2hpY2hcbiAgICAvLyBvZiBpdHMgb3duIHJvdXRlcyBgaW5pdC1wbGF0Zm9ybS5zaGAgY2FsbHMg4oCUIGFsbG93cyBhbiBleHBsaWNpdCBmZXcgYmVmb3JlXG4gICAgLy8gdGhpcyBwb2ludCAoc2VlIGl0cyBvd24gYHJlcXVpcmVBdXRoYCk7IGluIEVWRVJZIG90aGVyIHNlcnZpY2UgdGhlIGFuc3dlclxuICAgIC8vIGlzIHNpbXBseSBubywgc28gdGhlIHJlYWNoIHJlc3RyaWN0aW9uIGhvbGRzIHdpdGhvdXQgYSBwZXItc2VydmljZVxuICAgIC8vIGFsbG93bGlzdCB0byBrZWVwIGluIHN5bmMuXG4gICAgaWYgKGRlY29kZWQubWZhRW5yb2xsbWVudFBlbmRpbmcgPT09IHRydWUpIHtcbiAgICAgIGVtaXRDb3VudGVyKCdtZmFfZW5mb3JjZW1lbnRfcmVmdXNlZF90b3RhbCcsIHsgc2VydmljZTogc2VydmljZUlkZW50aXR5KCksIHJlYXNvbjogJ2Jvb3RzdHJhcF9zZXNzaW9uJyB9KTtcbiAgICAgIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ21mYS1lbnJvbG1lbnQnKTtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IoXG4gICAgICAgIHJlcywgSHR0cFN0YXR1cy5GT1JCSURERU4sXG4gICAgICAgICdGaW5pc2ggc2V0dGluZyB1cCB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGJlZm9yZSB1c2luZyB0aGUgcmVzdCBvZiBQaXBlbGluZSBCdWlsZGVyJyxcbiAgICAgICAgRXJyb3JDb2RlLk1GQV9FTlJPTExNRU5UX1JFUVVJUkVELFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZXNzaW9uLWxldmVsIGFzc3VyYW5jZSAoYHJlcXVpcmVBdXRoKHsgbWluQXNzdXJhbmNlLCBtYXhBZ2UgfSlgKS5cbiAgICBpZiAob3B0aW9ucy5taW5Bc3N1cmFuY2VcbiAgICAgICYmIHJlZnVzZUZvckFzc3VyYW5jZSh7IG1pbkFzc3VyYW5jZTogb3B0aW9ucy5taW5Bc3N1cmFuY2UsIC4uLihvcHRpb25zLm1heEFnZSAhPT0gdW5kZWZpbmVkID8geyBtYXhBZ2U6IG9wdGlvbnMubWF4QWdlIH0gOiB7fSkgfSwgZGVjb2RlZCwgcmVxLCByZXMpKSByZXR1cm47XG5cbiAgICAvLyBUaGUgeC1vcmctaWQveC1vcmctbmFtZSBvdmVycmlkZSBsZXRzIGEgU1lTLUFETUlOIGFjdCBvbiBhIGNob3NlbiBvcmdcbiAgICAvLyAoY3Jvc3Mtb3JnIGFkbWluIHRvb2xpbmcpLiBJdCBpcyBnYXRlZCBvbiB0aGUgdmVyaWZpZWQgYGlzU3VwZXJBZG1pbmAgY2xhaW1cbiAgICAvLyBoZXJlIHNvIHRoYXQgZXZlbiBhIHJvdXRlIHdoaWNoIG1pc3Rha2VubHkgZW5hYmxlcyBgYWxsb3dPcmdIZWFkZXJPdmVycmlkZWBcbiAgICAvLyBjYW4gTkVWRVIgbGV0IGFuIG9yZGluYXJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBzcG9vZiBhbm90aGVyIHRlbmFudCdzIG9yZyB2aWFcbiAgICAvLyB0aGUgaGVhZGVyIOKAlCBkZWZlbmNlLWluLWRlcHRoIGFnYWluc3QgdGhlIGNyb3NzLXRlbmFudCBicmVhayB0aGlzIGNhdXNlZC5cbiAgICBpZiAob3B0aW9ucy5hbGxvd09yZ0hlYWRlck92ZXJyaWRlICYmIGRlY29kZWQuaXNTdXBlckFkbWluID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBoZWFkZXJPcmdJZCA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctaWQnXSk7XG4gICAgICBjb25zdCBoZWFkZXJPcmdOYW1lID0gZ2V0SGVhZGVyU3RyaW5nKHJlcS5oZWFkZXJzWyd4LW9yZy1uYW1lJ10pO1xuICAgICAgaWYgKGhlYWRlck9yZ0lkKSByZXEudXNlci5vcmdhbml6YXRpb25JZCA9IGhlYWRlck9yZ0lkO1xuICAgICAgaWYgKGhlYWRlck9yZ05hbWUpIHJlcS51c2VyLm9yZ2FuaXphdGlvbk5hbWUgPSBoZWFkZXJPcmdOYW1lO1xuICAgIH1cblxuICAgIC8vIFJlLWRlcml2ZSB0aGUgcmVxdWVzdCdzIHRlbmFudCBpZGVudGl0eSBmcm9tIHRoZSBOT1ctdmVyaWZpZWQgSldULlxuICAgIC8vXG4gICAgLy8gYGF0dGFjaFJlcXVlc3RDb250ZXh0YCBydW5zIGFzIGEgZ2xvYmFsIG1pZGRsZXdhcmUgQkVGT1JFIHRoaXMgcGVyLXJvdXRlXG4gICAgLy8gYHJlcXVpcmVBdXRoYCwgc28gaXQgY2FwdHVyZWQgYHJlcS5jb250ZXh0LmlkZW50aXR5YCB3aGlsZSBgcmVxLnVzZXJgIHdhc1xuICAgIC8vIHN0aWxsIHVuZGVmaW5lZCDigJQgYXQgd2hpY2ggcG9pbnQgYGdldElkZW50aXR5YCBmYWxscyBiYWNrIHRvIHRoZSByYXcsXG4gICAgLy8gY2xpZW50LXNldHRhYmxlIGB4LW9yZy1pZGAvYHgtdXNlci1pZGAgaGVhZGVycy4gRXZlcnkgZG93bnN0cmVhbSB0ZW5hbnQtXG4gICAgLy8gYXV0aG9yaXR5IGNvbnN1bWVyIChyZXF1aXJlT3JnSWQsIHdpdGhUZW5hbnRDb250ZXh0J3MgUkxTIHNjb3BlLCBjaGVja1F1b3RhLFxuICAgIC8vIHdpdGhSb3V0ZSwgYW5kIHRoZSBpZGVtcG90ZW5jeSBuYW1lc3BhY2UpIHJlYWRzIGByZXEuY29udGV4dC5pZGVudGl0eWAsIHNvXG4gICAgLy8gdGhhdCBmcm96ZW4gaGVhZGVyLWRlcml2ZWQgdmFsdWUg4oCUIG5vdCB0aGUgSldUIOKAlCB3YXMgZ292ZXJuaW5nIHRlbmFuY3kgb25cbiAgICAvLyBhbnkgbm9uLW5naW54IHBhdGguIFJlY29tcHV0aW5nIGhlcmUsIGF0IHRoZSBzaW5nbGUgcG9zdC12ZXJpZmljYXRpb24gY2hva2VcbiAgICAvLyBwb2ludCwgbWFrZXMgYGdldElkZW50aXR5YCBwcmVmZXIgdGhlIHZlcmlmaWVkIGByZXEudXNlcmAgKHNlZSBpZGVudGl0eS50cylcbiAgICAvLyBzbyB0ZW5hbmN5IGlzIEpXVC1hdXRob3JpdGF0aXZlLiBUaGUgbmdpbnggYHgtb3JnLWlkYCBvdmVyd3JpdGUgc3RheXMgYXNcbiAgICAvLyBkZWZlbmNlLWluLWRlcHRoLiBHdWFyZGVkIG9uIGByZXEuY29udGV4dGAgc28gc2VydmljZXMvcGF0aHMgdGhhdCBuZXZlclxuICAgIC8vIGF0dGFjaCBhIGNvbnRleHQgKG9yIHJ1biByZXF1aXJlQXV0aCBwcmUtY29udGV4dCkgYXJlIHVuYWZmZWN0ZWQuXG4gICAgY29uc3QgcmVxQ3R4ID0gKHJlcSBhcyBSZXF1ZXN0ICYgeyBjb250ZXh0PzogeyBpZGVudGl0eTogUmVxdWVzdElkZW50aXR5IH0gfSkuY29udGV4dDtcbiAgICBpZiAocmVxQ3R4KSB7XG4gICAgICByZXFDdHguaWRlbnRpdHkgPSBnZXRJZGVudGl0eShyZXEgYXMgdW5rbm93biBhcyBIdHRwUmVxdWVzdCk7XG4gICAgfVxuXG4gICAgLy8gU2Vzc2lvbiBpbnZhbGlkYXRpb24gKHRva2VuLXZlcnNpb24gc3RvcmUgKyBpbXBlcnNvbmF0aW9uLXNlc3Npb25cbiAgICAvLyBsaXZlbmVzcykuIE5vIHN0b3JlIHJlZ2lzdGVyZWQg4oeSIG9ubHkgaW1wZXJzb25hdGlvbiBzZXNzaW9ucyBhcmUgY2hlY2tlZC5cbiAgICBpZiAobmVlZHNSZXZvY2F0aW9uQ2hlY2soZGVjb2RlZCkpIHtcbiAgICAgIC8vIGAuY2F0Y2gobmV4dClgIGZvcndhcmRzIGEgRE9XTlNUUkVBTSBzeW5jaHJvbm91cyB0aHJvdyBmcm9tIGBuZXh0KClgIHRvXG4gICAgICAvLyBFeHByZXNzJ3MgZXJyb3IgbWlkZGxld2FyZSDigJQgdGhpcyBgbmV4dCgpYCBydW5zIGluIGEgbWljcm90YXNrLCBvdXRzaWRlXG4gICAgICAvLyB0aGUgc3Vycm91bmRpbmcgdHJ5L2NhdGNoLiBUaGUgY2hlY2sgaXRzZWxmIG5ldmVyIHJlamVjdHMuXG4gICAgICBjaGVja1Jldm9jYXRpb24oZGVjb2RlZCkudGhlbigocmVmdXNhbCkgPT4ge1xuICAgICAgICBpZiAocmVmdXNhbCkgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCByZWZ1c2FsLCBFcnJvckNvZGUuVE9LRU5fUkVWT0tFRCk7XG4gICAgICAgIHJ1bkRlZmVycmVkUXVvdGFDaGVjayhyZXEsIHJlcywgbmV4dCk7XG4gICAgICB9KS5jYXRjaChuZXh0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgYXBpQ2FsbHMgY2hlY2sgYSBtb3VudCBhcm1lZCAoYXBpLXNlcnZlciBgYXBpQ2FsbHNRdW90YWApIHJ1bnMgaGVyZSxcbiAgICAvLyBub3cgdGhhdCB0ZW5hbmN5IGlzIEpXVC1hdXRob3JpdGF0aXZlOyBhIHBsYWluIG5leHQoKSB3aGVyZSBub25lIHdhcyBhcm1lZC5cbiAgICBydW5EZWZlcnJlZFF1b3RhQ2hlY2socmVxLCByZXMsIG5leHQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGp3dC5Ub2tlbkV4cGlyZWRFcnJvcikge1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnVG9rZW4gaGFzIGV4cGlyZWQnLCBFcnJvckNvZGUuVE9LRU5fRVhQSVJFRCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHNpZ25pbmcga2V5cyBjb3VsZG4ndCBiZSBmZXRjaGVkLCBzbyB0aGUgdG9rZW4ncyB2YWxpZGl0eSBpcyBVTktOT1dOLlxuICAgIC8vIEZhaWwgQ0xPU0VEIHdpdGggYSByZXRyeWFibGUgNTAzIOKAlCBuZXZlciBhIHBhc3MsIGFuZCBuZXZlciBhIDQwMSB0aGF0XG4gICAgLy8gd291bGQgc2VuZCBhIGxlZ2l0aW1hdGUgY2xpZW50IG9mZiB0byByZS1hdXRoZW50aWNhdGUgb3ZlciBvdXIgb3V0YWdlLlxuICAgIC8vIFNhbWUgcmVhc29uaW5nIGZvciB0aGUgU0VSVklDRSBjaGFpbjogbm8gcmVhZGFibGUga2V5IGJ1bmRsZSBtZWFucyBubyB3YXlcbiAgICAvLyB0byB0ZWxsIGEgcGVlcidzIHRva2VuIGZyb20gYSBmb3JnZXJ5LCBzbyB0aGUgcmVxdWVzdCBpcyByZWZ1c2VkIHdpdGggYVxuICAgIC8vIHJldHJ5YWJsZSA1MDMgcmF0aGVyIHRoYW4gYWRtaXR0ZWQgb3IgYm91bmNlZCB0byByZS1hdXRoZW50aWNhdGUuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSndrc1VuYXZhaWxhYmxlRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBTZXJ2aWNlS2V5RXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdSZWplY3RpbmcgcmVxdWVzdDogdG9rZW4gc2lnbmluZyBrZXlzIHVuYXZhaWxhYmxlJywgeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IoXG4gICAgICAgIHJlcywgSHR0cFN0YXR1cy5TRVJWSUNFX1VOQVZBSUxBQkxFLFxuICAgICAgICAnVG9rZW4gdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlOyBwbGVhc2UgcmV0cnknLFxuICAgICAgICBFcnJvckNvZGUuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVW5rbm93bktpZEVycm9yIHx8IGVycm9yIGluc3RhbmNlb2Ygand0Lkpzb25XZWJUb2tlbkVycm9yKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdJbnZhbGlkIHRva2VuJywgRXJyb3JDb2RlLlRPS0VOX0lOVkFMSUQpO1xuICAgIH1cblxuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICB9XG59XG5cbiJdfQ==
@@ -0,0 +1,45 @@
1
+ import type { Request, RequestHandler } from 'express';
2
+ /** Sent by pipeline-manager on every platform call: its own version. */
3
+ export declare const CLIENT_VERSION_HEADER = "X-Pb-Client-Version";
4
+ /** Answered on every response to a versioned client while a minimum is set. */
5
+ export declare const MIN_CLIENT_VERSION_HEADER = "X-Pb-Min-Client-Version";
6
+ /** Requests per CLI version — what is still in use before raising the minimum. */
7
+ export declare const CLIENT_REQUESTS_METRIC = "pipeline_manager_requests_total";
8
+ /** 426s answered — raising the minimum shows as a visible spike, not silent failures. */
9
+ export declare const CLIENT_UPGRADE_REQUIRED_METRIC = "pipeline_manager_upgrade_required_total";
10
+ /**
11
+ * A CodeBuild step (pipeline-manager forwards `X-CodeBuild-Build-Id` there) runs
12
+ * the CLI baked into a plugin image: it can't `--upgrade` itself, so refusing
13
+ * it would break every org's pipelines until their images were rebuilt.
14
+ * Counted (`caller="ci"`), never refused. The header is caller-set, so this is
15
+ * no weaker than the gate already is — a compatibility gate, NOT a security
16
+ * control (a CLI can omit or overstate its version; a vulnerable version is
17
+ * shut out by revoking tokens, never by this).
18
+ */
19
+ export declare const CI_CALLER_HEADER = "X-CodeBuild-Build-Id";
20
+ /** Distinct `version` label values one process will emit before folding the rest into `other`. */
21
+ export declare const MAX_VERSION_LABELS = 64;
22
+ /** `x.y.z` of a version (prerelease / build dropped). */
23
+ export declare function versionLabel(v: string): string;
24
+ /**
25
+ * The CLI version a request CLAIMS (`X-Pb-Client-Version`), or undefined when
26
+ * absent / not a semver. Caller-set and unverified: fit for display and
27
+ * compatibility ("which CLI does this key still use"), never for a decision
28
+ * about access.
29
+ */
30
+ export declare function clientVersionOf(req: Pick<Request, 'headers'>): string | undefined;
31
+ /**
32
+ * Refuse a pipeline-manager CLI older than `PIPELINE_MANAGER_MIN_VERSION`
33
+ * with 426 `CLIENT_UPGRADE_REQUIRED`, so an API change surfaces as "run
34
+ * `pipeline-manager --upgrade`" rather than as a confusing 400 or a silently
35
+ * misread response.
36
+ *
37
+ * - Unset / blank minimum: nothing is refused (the default); versions are still counted.
38
+ * - A request WITHOUT the version header passes: browsers, other clients and
39
+ * CLIs released before the header existed are not identified, so they are
40
+ * not gated. Forward-only, by design.
41
+ * - A CI caller (CodeBuild) is counted but never refused — see {@link CI_CALLER_HEADER}.
42
+ * - A malformed header value passes too (nothing to compare), but a malformed
43
+ * MINIMUM throws at startup: a typo must not silently disable the gate.
44
+ */
45
+ export declare function clientVersionGate(minVersion?: string | undefined): RequestHandler;
@@ -0,0 +1,97 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { ErrorCode } from '../types/error-codes.js';
4
+ import { emitCounter } from '../utils/metric-emitter.js';
5
+ import { sendError } from '../utils/response.js';
6
+ import { compareSemver, isSemver } from '../utils/semver.js';
7
+ /** Sent by pipeline-manager on every platform call: its own version. */
8
+ export const CLIENT_VERSION_HEADER = 'X-Pb-Client-Version';
9
+ /** Answered on every response to a versioned client while a minimum is set. */
10
+ export const MIN_CLIENT_VERSION_HEADER = 'X-Pb-Min-Client-Version';
11
+ /** Requests per CLI version — what is still in use before raising the minimum. */
12
+ export const CLIENT_REQUESTS_METRIC = 'pipeline_manager_requests_total';
13
+ /** 426s answered — raising the minimum shows as a visible spike, not silent failures. */
14
+ export const CLIENT_UPGRADE_REQUIRED_METRIC = 'pipeline_manager_upgrade_required_total';
15
+ /**
16
+ * A CodeBuild step (pipeline-manager forwards `X-CodeBuild-Build-Id` there) runs
17
+ * the CLI baked into a plugin image: it can't `--upgrade` itself, so refusing
18
+ * it would break every org's pipelines until their images were rebuilt.
19
+ * Counted (`caller="ci"`), never refused. The header is caller-set, so this is
20
+ * no weaker than the gate already is — a compatibility gate, NOT a security
21
+ * control (a CLI can omit or overstate its version; a vulnerable version is
22
+ * shut out by revoking tokens, never by this).
23
+ */
24
+ export const CI_CALLER_HEADER = 'X-CodeBuild-Build-Id';
25
+ /** Distinct `version` label values one process will emit before folding the rest into `other`. */
26
+ export const MAX_VERSION_LABELS = 64;
27
+ const seenVersions = new Set();
28
+ /** `x.y.z` of a version (prerelease / build dropped). */
29
+ export function versionLabel(v) {
30
+ return v.replace(/^v/, '').split(/[-+]/, 1)[0];
31
+ }
32
+ /**
33
+ * The `version` label for a request. The gate runs BEFORE auth, so the header
34
+ * is attacker-controlled: past {@link MAX_VERSION_LABELS} distinct values a
35
+ * new one counts as `other`, keeping Prometheus cardinality bounded.
36
+ */
37
+ function boundedVersionLabel(v) {
38
+ const label = versionLabel(v);
39
+ if (seenVersions.has(label))
40
+ return label;
41
+ if (seenVersions.size >= MAX_VERSION_LABELS)
42
+ return 'other';
43
+ seenVersions.add(label);
44
+ return label;
45
+ }
46
+ /** @internal Test-only: forget the seen version labels. */
47
+ export function _resetVersionLabelsForTests() {
48
+ seenVersions.clear();
49
+ }
50
+ /**
51
+ * The CLI version a request CLAIMS (`X-Pb-Client-Version`), or undefined when
52
+ * absent / not a semver. Caller-set and unverified: fit for display and
53
+ * compatibility ("which CLI does this key still use"), never for a decision
54
+ * about access.
55
+ */
56
+ export function clientVersionOf(req) {
57
+ const raw = req.headers?.[CLIENT_VERSION_HEADER.toLowerCase()];
58
+ const v = (Array.isArray(raw) ? raw[0] : raw)?.trim();
59
+ return v && isSemver(v) ? v : undefined;
60
+ }
61
+ /**
62
+ * Refuse a pipeline-manager CLI older than `PIPELINE_MANAGER_MIN_VERSION`
63
+ * with 426 `CLIENT_UPGRADE_REQUIRED`, so an API change surfaces as "run
64
+ * `pipeline-manager --upgrade`" rather than as a confusing 400 or a silently
65
+ * misread response.
66
+ *
67
+ * - Unset / blank minimum: nothing is refused (the default); versions are still counted.
68
+ * - A request WITHOUT the version header passes: browsers, other clients and
69
+ * CLIs released before the header existed are not identified, so they are
70
+ * not gated. Forward-only, by design.
71
+ * - A CI caller (CodeBuild) is counted but never refused — see {@link CI_CALLER_HEADER}.
72
+ * - A malformed header value passes too (nothing to compare), but a malformed
73
+ * MINIMUM throws at startup: a typo must not silently disable the gate.
74
+ */
75
+ export function clientVersionGate(minVersion = process.env.PIPELINE_MANAGER_MIN_VERSION) {
76
+ const min = minVersion?.trim() || undefined;
77
+ if (min && !isSemver(min))
78
+ throw new Error(`PIPELINE_MANAGER_MIN_VERSION is not a semver version: ${min}`);
79
+ // Counted whether or not a minimum is set: the version mix is what an
80
+ // operator needs BEFORE choosing one.
81
+ return (req, res, next) => {
82
+ const sent = req.get(CLIENT_VERSION_HEADER)?.trim();
83
+ if (!sent || !isSemver(sent))
84
+ return next();
85
+ const version = boundedVersionLabel(sent);
86
+ const caller = req.get(CI_CALLER_HEADER) ? 'ci' : 'interactive';
87
+ emitCounter(CLIENT_REQUESTS_METRIC, { version, caller });
88
+ if (!min)
89
+ return next();
90
+ res.setHeader(MIN_CLIENT_VERSION_HEADER, min);
91
+ if (compareSemver(sent, min) >= 0 || caller === 'ci')
92
+ return next();
93
+ emitCounter(CLIENT_UPGRADE_REQUIRED_METRIC, { version, min: versionLabel(min) });
94
+ sendError(res, 426, `pipeline-manager ${sent} is no longer supported by this platform (minimum ${min}); run: pipeline-manager --upgrade`, ErrorCode.CLIENT_UPGRADE_REQUIRED, { minVersion: min, clientVersion: sent });
95
+ };
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXZlcnNpb24uanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2NsaWVudC12ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3RCx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDM0QsK0VBQStFO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0FBQ25FLGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUN4RSx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcseUNBQXlDLENBQUM7QUFFeEY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQztBQUV2RCxrR0FBa0c7QUFDbEcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFFdkMseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBUztJQUNwQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLG1C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SixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgTmV4dEZ1bmN0aW9uLCBSZXF1ZXN0LCBSZXF1ZXN0SGFuZGxlciwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgY29tcGFyZVNlbXZlciwgaXNTZW12ZXIgfSBmcm9tICcuLi91dGlscy9zZW12ZXIuanMnO1xuXG4vKiogU2VudCBieSBwaXBlbGluZS1tYW5hZ2VyIG9uIGV2ZXJ5IHBsYXRmb3JtIGNhbGw6IGl0cyBvd24gdmVyc2lvbi4gKi9cbmV4cG9ydCBjb25zdCBDTElFTlRfVkVSU0lPTl9IRUFERVIgPSAnWC1QYi1DbGllbnQtVmVyc2lvbic7XG4vKiogQW5zd2VyZWQgb24gZXZlcnkgcmVzcG9uc2UgdG8gYSB2ZXJzaW9uZWQgY2xpZW50IHdoaWxlIGEgbWluaW11bSBpcyBzZXQuICovXG5leHBvcnQgY29uc3QgTUlOX0NMSUVOVF9WRVJTSU9OX0hFQURFUiA9ICdYLVBiLU1pbi1DbGllbnQtVmVyc2lvbic7XG4vKiogUmVxdWVzdHMgcGVyIENMSSB2ZXJzaW9uIOKAlCB3aGF0IGlzIHN0aWxsIGluIHVzZSBiZWZvcmUgcmFpc2luZyB0aGUgbWluaW11bS4gKi9cbmV4cG9ydCBjb25zdCBDTElFTlRfUkVRVUVTVFNfTUVUUklDID0gJ3BpcGVsaW5lX21hbmFnZXJfcmVxdWVzdHNfdG90YWwnO1xuLyoqIDQyNnMgYW5zd2VyZWQg4oCUIHJhaXNpbmcgdGhlIG1pbmltdW0gc2hvd3MgYXMgYSB2aXNpYmxlIHNwaWtlLCBub3Qgc2lsZW50IGZhaWx1cmVzLiAqL1xuZXhwb3J0IGNvbnN0IENMSUVOVF9VUEdSQURFX1JFUVVJUkVEX01FVFJJQyA9ICdwaXBlbGluZV9tYW5hZ2VyX3VwZ3JhZGVfcmVxdWlyZWRfdG90YWwnO1xuXG4vKipcbiAqIEEgQ29kZUJ1aWxkIHN0ZXAgKHBpcGVsaW5lLW1hbmFnZXIgZm9yd2FyZHMgYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCB0aGVyZSkgcnVuc1xuICogdGhlIENMSSBiYWtlZCBpbnRvIGEgcGx1Z2luIGltYWdlOiBpdCBjYW4ndCBgLS11cGdyYWRlYCBpdHNlbGYsIHNvIHJlZnVzaW5nXG4gKiBpdCB3b3VsZCBicmVhayBldmVyeSBvcmcncyBwaXBlbGluZXMgdW50aWwgdGhlaXIgaW1hZ2VzIHdlcmUgcmVidWlsdC5cbiAqIENvdW50ZWQgKGBjYWxsZXI9XCJjaVwiYCksIG5ldmVyIHJlZnVzZWQuIFRoZSBoZWFkZXIgaXMgY2FsbGVyLXNldCwgc28gdGhpcyBpc1xuICogbm8gd2Vha2VyIHRoYW4gdGhlIGdhdGUgYWxyZWFkeSBpcyDigJQgYSBjb21wYXRpYmlsaXR5IGdhdGUsIE5PVCBhIHNlY3VyaXR5XG4gKiBjb250cm9sIChhIENMSSBjYW4gb21pdCBvciBvdmVyc3RhdGUgaXRzIHZlcnNpb247IGEgdnVsbmVyYWJsZSB2ZXJzaW9uIGlzXG4gKiBzaHV0IG91dCBieSByZXZva2luZyB0b2tlbnMsIG5ldmVyIGJ5IHRoaXMpLlxuICovXG5leHBvcnQgY29uc3QgQ0lfQ0FMTEVSX0hFQURFUiA9ICdYLUNvZGVCdWlsZC1CdWlsZC1JZCc7XG5cbi8qKiBEaXN0aW5jdCBgdmVyc2lvbmAgbGFiZWwgdmFsdWVzIG9uZSBwcm9jZXNzIHdpbGwgZW1pdCBiZWZvcmUgZm9sZGluZyB0aGUgcmVzdCBpbnRvIGBvdGhlcmAuICovXG5leHBvcnQgY29uc3QgTUFYX1ZFUlNJT05fTEFCRUxTID0gNjQ7XG5jb25zdCBzZWVuVmVyc2lvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuLyoqIGB4LnkuemAgb2YgYSB2ZXJzaW9uIChwcmVyZWxlYXNlIC8gYnVpbGQgZHJvcHBlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvbkxhYmVsKHY6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2LnJlcGxhY2UoL152LywgJycpLnNwbGl0KC9bLStdLywgMSlbMF0hO1xufVxuXG4vKipcbiAqIFRoZSBgdmVyc2lvbmAgbGFiZWwgZm9yIGEgcmVxdWVzdC4gVGhlIGdhdGUgcnVucyBCRUZPUkUgYXV0aCwgc28gdGhlIGhlYWRlclxuICogaXMgYXR0YWNrZXItY29udHJvbGxlZDogcGFzdCB7QGxpbmsgTUFYX1ZFUlNJT05fTEFCRUxTfSBkaXN0aW5jdCB2YWx1ZXMgYVxuICogbmV3IG9uZSBjb3VudHMgYXMgYG90aGVyYCwga2VlcGluZyBQcm9tZXRoZXVzIGNhcmRpbmFsaXR5IGJvdW5kZWQuXG4gKi9cbmZ1bmN0aW9uIGJvdW5kZWRWZXJzaW9uTGFiZWwodjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbGFiZWwgPSB2ZXJzaW9uTGFiZWwodik7XG4gIGlmIChzZWVuVmVyc2lvbnMuaGFzKGxhYmVsKSkgcmV0dXJuIGxhYmVsO1xuICBpZiAoc2VlblZlcnNpb25zLnNpemUgPj0gTUFYX1ZFUlNJT05fTEFCRUxTKSByZXR1cm4gJ290aGVyJztcbiAgc2VlblZlcnNpb25zLmFkZChsYWJlbCk7XG4gIHJldHVybiBsYWJlbDtcbn1cblxuLyoqIEBpbnRlcm5hbCBUZXN0LW9ubHk6IGZvcmdldCB0aGUgc2VlbiB2ZXJzaW9uIGxhYmVscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRWZXJzaW9uTGFiZWxzRm9yVGVzdHMoKTogdm9pZCB7XG4gIHNlZW5WZXJzaW9ucy5jbGVhcigpO1xufVxuXG4vKipcbiAqIFRoZSBDTEkgdmVyc2lvbiBhIHJlcXVlc3QgQ0xBSU1TIChgWC1QYi1DbGllbnQtVmVyc2lvbmApLCBvciB1bmRlZmluZWQgd2hlblxuICogYWJzZW50IC8gbm90IGEgc2VtdmVyLiBDYWxsZXItc2V0IGFuZCB1bnZlcmlmaWVkOiBmaXQgZm9yIGRpc3BsYXkgYW5kXG4gKiBjb21wYXRpYmlsaXR5IChcIndoaWNoIENMSSBkb2VzIHRoaXMga2V5IHN0aWxsIHVzZVwiKSwgbmV2ZXIgZm9yIGEgZGVjaXNpb25cbiAqIGFib3V0IGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsaWVudFZlcnNpb25PZihyZXE6IFBpY2s8UmVxdWVzdCwgJ2hlYWRlcnMnPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IHJlcS5oZWFkZXJzPy5bQ0xJRU5UX1ZFUlNJT05fSEVBREVSLnRvTG93ZXJDYXNlKCldO1xuICBjb25zdCB2ID0gKEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdyk/LnRyaW0oKTtcbiAgcmV0dXJuIHYgJiYgaXNTZW12ZXIodikgPyB2IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlZnVzZSBhIHBpcGVsaW5lLW1hbmFnZXIgQ0xJIG9sZGVyIHRoYW4gYFBJUEVMSU5FX01BTkFHRVJfTUlOX1ZFUlNJT05gXG4gKiB3aXRoIDQyNiBgQ0xJRU5UX1VQR1JBREVfUkVRVUlSRURgLCBzbyBhbiBBUEkgY2hhbmdlIHN1cmZhY2VzIGFzIFwicnVuXG4gKiBgcGlwZWxpbmUtbWFuYWdlciAtLXVwZ3JhZGVgXCIgcmF0aGVyIHRoYW4gYXMgYSBjb25mdXNpbmcgNDAwIG9yIGEgc2lsZW50bHlcbiAqIG1pc3JlYWQgcmVzcG9uc2UuXG4gKlxuICogLSBVbnNldCAvIGJsYW5rIG1pbmltdW06IG5vdGhpbmcgaXMgcmVmdXNlZCAodGhlIGRlZmF1bHQpOyB2ZXJzaW9ucyBhcmUgc3RpbGwgY291bnRlZC5cbiAqIC0gQSByZXF1ZXN0IFdJVEhPVVQgdGhlIHZlcnNpb24gaGVhZGVyIHBhc3NlczogYnJvd3NlcnMsIG90aGVyIGNsaWVudHMgYW5kXG4gKiAgIENMSXMgcmVsZWFzZWQgYmVmb3JlIHRoZSBoZWFkZXIgZXhpc3RlZCBhcmUgbm90IGlkZW50aWZpZWQsIHNvIHRoZXkgYXJlXG4gKiAgIG5vdCBnYXRlZC4gRm9yd2FyZC1vbmx5LCBieSBkZXNpZ24uXG4gKiAtIEEgQ0kgY2FsbGVyIChDb2RlQnVpbGQpIGlzIGNvdW50ZWQgYnV0IG5ldmVyIHJlZnVzZWQg4oCUIHNlZSB7QGxpbmsgQ0lfQ0FMTEVSX0hFQURFUn0uXG4gKiAtIEEgbWFsZm9ybWVkIGhlYWRlciB2YWx1ZSBwYXNzZXMgdG9vIChub3RoaW5nIHRvIGNvbXBhcmUpLCBidXQgYSBtYWxmb3JtZWRcbiAqICAgTUlOSU1VTSB0aHJvd3MgYXQgc3RhcnR1cDogYSB0eXBvIG11c3Qgbm90IHNpbGVudGx5IGRpc2FibGUgdGhlIGdhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGllbnRWZXJzaW9uR2F0ZShtaW5WZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9jZXNzLmVudi5QSVBFTElORV9NQU5BR0VSX01JTl9WRVJTSU9OKTogUmVxdWVzdEhhbmRsZXIge1xuICBjb25zdCBtaW4gPSBtaW5WZXJzaW9uPy50cmltKCkgfHwgdW5kZWZpbmVkO1xuICBpZiAobWluICYmICFpc1NlbXZlcihtaW4pKSB0aHJvdyBuZXcgRXJyb3IoYFBJUEVMSU5FX01BTkFHRVJfTUlOX1ZFUlNJT04gaXMgbm90IGEgc2VtdmVyIHZlcnNpb246ICR7bWlufWApO1xuXG4gIC8vIENvdW50ZWQgd2hldGhlciBvciBub3QgYSBtaW5pbXVtIGlzIHNldDogdGhlIHZlcnNpb24gbWl4IGlzIHdoYXQgYW5cbiAgLy8gb3BlcmF0b3IgbmVlZHMgQkVGT1JFIGNob29zaW5nIG9uZS5cbiAgcmV0dXJuIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHNlbnQgPSByZXEuZ2V0KENMSUVOVF9WRVJTSU9OX0hFQURFUik/LnRyaW0oKTtcbiAgICBpZiAoIXNlbnQgfHwgIWlzU2VtdmVyKHNlbnQpKSByZXR1cm4gbmV4dCgpO1xuICAgIGNvbnN0IHZlcnNpb24gPSBib3VuZGVkVmVyc2lvbkxhYmVsKHNlbnQpO1xuICAgIGNvbnN0IGNhbGxlciA9IHJlcS5nZXQoQ0lfQ0FMTEVSX0hFQURFUikgPyAnY2knIDogJ2ludGVyYWN0aXZlJztcbiAgICBlbWl0Q291bnRlcihDTElFTlRfUkVRVUVTVFNfTUVUUklDLCB7IHZlcnNpb24sIGNhbGxlciB9KTtcbiAgICBpZiAoIW1pbikgcmV0dXJuIG5leHQoKTtcbiAgICByZXMuc2V0SGVhZGVyKE1JTl9DTElFTlRfVkVSU0lPTl9IRUFERVIsIG1pbik7XG4gICAgaWYgKGNvbXBhcmVTZW12ZXIoc2VudCwgbWluKSA+PSAwIHx8IGNhbGxlciA9PT0gJ2NpJykgcmV0dXJuIG5leHQoKTtcbiAgICBlbWl0Q291bnRlcihDTElFTlRfVVBHUkFERV9SRVFVSVJFRF9NRVRSSUMsIHsgdmVyc2lvbiwgbWluOiB2ZXJzaW9uTGFiZWwobWluKSB9KTtcbiAgICBzZW5kRXJyb3IoXG4gICAgICByZXMsXG4gICAgICA0MjYsXG4gICAgICBgcGlwZWxpbmUtbWFuYWdlciAke3NlbnR9IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybSAobWluaW11bSAke21pbn0pOyBydW46IHBpcGVsaW5lLW1hbmFnZXIgLS11cGdyYWRlYCxcbiAgICAgIEVycm9yQ29kZS5DTElFTlRfVVBHUkFERV9SRVFVSVJFRCxcbiAgICAgIHsgbWluVmVyc2lvbjogbWluLCBjbGllbnRWZXJzaW9uOiBzZW50IH0sXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
@@ -13,3 +13,4 @@ export { tagRouteGate, getRouteGates, audited, dynamicAuthz, buildRouteTable, is
13
13
  export { armDeferredQuotaCheck, runDeferredQuotaCheck, } from './deferred-quota-check.js';
14
14
  export { ON_BEHALF_HEADER, ON_BEHALF_CALLERS, onBehalfHeaders, onBehalfCaller, type OnBehalfSubject, } from './on-behalf.js';
15
15
  export { QUOTA_EXEMPT_ROUTES, isQuotaExemptRoute, type QuotaExemptRoute, } from './quota-exempt-routes.js';
16
+ export { clientVersionGate, CLIENT_VERSION_HEADER, MIN_CLIENT_VERSION_HEADER, CI_CALLER_HEADER, clientVersionOf, } from './client-version.js';
@@ -15,4 +15,5 @@ export { tagRouteGate, getRouteGates, audited, dynamicAuthz, buildRouteTable, is
15
15
  export { armDeferredQuotaCheck, runDeferredQuotaCheck, } from './deferred-quota-check.js';
16
16
  export { ON_BEHALF_HEADER, ON_BEHALF_CALLERS, onBehalfHeaders, onBehalfCaller, } from './on-behalf.js';
17
17
  export { QUOTA_EXEMPT_ROUTES, isQuotaExemptRoute, } from './quota-exempt-routes.js';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsc0JBQXNCLEdBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLFdBQVcsR0FDWixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLG9CQUFvQixHQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQix3QkFBd0IsR0FFekIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsUUFBUSxFQUNSLGtCQUFrQixFQUNsQixjQUFjLEdBRWYsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEdBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixzQkFBc0IsR0FDdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQ0wsYUFBYSxFQUNiLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsOEJBQThCLEdBQy9CLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLGFBQWEsRUFFYixzQkFBc0IsR0FDdkIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNMLFlBQVksRUFDWixhQUFhLEVBQ2IsT0FBTyxFQUNQLFlBQVksRUFDWixlQUFlLEVBQ2YsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixrQkFBa0IsR0FHbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEdBRWYsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixHQUVuQixNQUFNLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIHZlcmlmeVVzZXJKd3QsXG4gIHZlcmlmeUJlYXJlclRva2VuLFxuICBoYXNWYWxpZElkZW50aXR5Q2xhaW1zLFxufSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuZXhwb3J0IHtcbiAgcmVxdWlyZUF1dGgsXG59IGZyb20gJy4vYXV0aC5qcyc7XG5leHBvcnQge1xuICBzZXRUb2tlblJldm9jYXRpb25TdG9yZSxcbiAgaXNBY2Nlc3NUb2tlblJldm9rZWQsXG59IGZyb20gJy4vcmV2b2NhdGlvbi5qcyc7XG5leHBvcnQge1xuICByZXF1aXJlQXNzdXJhbmNlLFxuICByZWZ1c2VXZWFrU2Vzc2lvbixcbiAgcmVmdXNlRm9yT3JnQWRtaW5Bc3N1cmFuY2UsXG4gIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZSxcbiAgdHlwZSBBc3N1cmFuY2VPcHRpb25zLFxufSBmcm9tICcuL2Fzc3VyYW5jZS5qcyc7XG5leHBvcnQge1xuICB1c2VySGFzUGVybWlzc2lvbixcbiAgc2V0QXV0aHpEZW5pYWxBdWRpdG9yLFxuICByZWNvcmRBdXRoekRlbmlhbCxcbiAgcmVxdWlyZVBlcm1pc3Npb24sXG4gIHJlcXVpcmVBbGxQZXJtaXNzaW9ucyxcbiAgcmVxdWlyZVBlcm1pc3Npb25PclNlcnZpY2UsXG4gIHJlcXVpcmVTZXJ2aWNlUHJpbmNpcGFsLFxuICByZXF1aXJlSW50ZXJuYWxTZXJ2aWNlLFxuICBpc1N5c3RlbUFkbWluLFxuICBoYXNTY29wZSxcbiAgcmVxdWlyZVN5c3RlbUFkbWluLFxuICByZXF1aXJlRmVhdHVyZSxcbiAgdHlwZSBBdXRoekRlbmlhbEluZm8sXG59IGZyb20gJy4vcGVybWlzc2lvbi1nYXRlcy5qcyc7XG5leHBvcnQge1xuICBpc1N5c3RlbU9yZ0lkLFxuICBTWVNURU1fT1JHX0lELFxuICBTWVNURU1fT1JHX1NMVUcsXG59IGZyb20gJy4vc3lzdGVtLW9yZy5qcyc7XG5leHBvcnQge1xuICBzZXJ2aWNlTmFtZU9mLFxuICBpc1NlcnZpY2VUb2tlbkRlbmllZCxcbiAgc2lnblNlcnZpY2VUb2tlbixcbiAgZ2V0U2VydmljZUF1dGhIZWFkZXIsXG4gIGlzU2VydmljZVByaW5jaXBhbCxcbiAgaXNTZXJ2aWNlQWNjb3VudFByaW5jaXBhbCxcbiAgaXNTZXJ2aWNlUHJpbmNpcGFsTmFtZWQsXG4gIHZlcmlmeVNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gJy4vc2VydmljZS10b2tlbnMuanMnO1xuZXhwb3J0IHsgcmVxdWlyZVN5c3RlbU9yZywgcmVxdWlyZVN5c3RlbU9yZ1Blcm1pc3Npb24gfSBmcm9tICcuL2Vjb3N5c3RlbS1ndWFyZC5qcyc7XG5leHBvcnQge1xuICBtb25nb1Nhbml0aXplLFxuICBNQVhfU0FOSVRJWkVfREVQVEgsXG59IGZyb20gJy4vbW9uZ28tc2FuaXRpemUuanMnO1xuZXhwb3J0IHtcbiAgcHJvcG9zYWJsZSxcbiAgQVNLX1BST1ZFTkFOQ0VfUkVGVVNFRF9DT1VOVEVSLFxufSBmcm9tICcuL2Fzay1wcm92ZW5hbmNlLmpzJztcbmV4cG9ydCB7XG4gIHJlcXVpcmVTdGVwVXAsXG4gIHR5cGUgU3RlcFVwTWV0aG9kLFxuICBTVFJPTkdfU1RFUF9VUF9NRVRIT0RTLFxufSBmcm9tICcuL3N0ZXAtdXAuanMnO1xuZXhwb3J0IHtcbiAgdGFnUm91dGVHYXRlLFxuICBnZXRSb3V0ZUdhdGVzLFxuICBhdWRpdGVkLFxuICBkeW5hbWljQXV0aHosXG4gIGJ1aWxkUm91dGVUYWJsZSxcbiAgaXNXcml0ZU1ldGhvZCxcbiAgc3VtbWFyaXplUm91dGVUYWJsZSxcbiAgRFlOQU1JQ19QUklOQ0lQQUxTLFxuICB0eXBlIER5bmFtaWNQcmluY2lwYWwsXG4gIHR5cGUgUm91dGVUYWJsZUVudHJ5LFxufSBmcm9tICcuL3JvdXRlLXRhYmxlLmpzJztcbmV4cG9ydCB7XG4gIGFybURlZmVycmVkUXVvdGFDaGVjayxcbiAgcnVuRGVmZXJyZWRRdW90YUNoZWNrLFxufSBmcm9tICcuL2RlZmVycmVkLXF1b3RhLWNoZWNrLmpzJztcbmV4cG9ydCB7XG4gIE9OX0JFSEFMRl9IRUFERVIsXG4gIE9OX0JFSEFMRl9DQUxMRVJTLFxuICBvbkJlaGFsZkhlYWRlcnMsXG4gIG9uQmVoYWxmQ2FsbGVyLFxuICB0eXBlIE9uQmVoYWxmU3ViamVjdCxcbn0gZnJvbSAnLi9vbi1iZWhhbGYuanMnO1xuZXhwb3J0IHtcbiAgUVVPVEFfRVhFTVBUX1JPVVRFUyxcbiAgaXNRdW90YUV4ZW1wdFJvdXRlLFxuICB0eXBlIFF1b3RhRXhlbXB0Um91dGUsXG59IGZyb20gJy4vcXVvdGEtZXhlbXB0LXJvdXRlcy5qcyc7XG4iXX0=
18
+ export { clientVersionGate, CLIENT_VERSION_HEADER, MIN_CLIENT_VERSION_HEADER, CI_CALLER_HEADER, clientVersionOf, } from './client-version.js';
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsc0JBQXNCLEdBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLFdBQVcsR0FDWixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLG9CQUFvQixHQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQix3QkFBd0IsR0FFekIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsUUFBUSxFQUNSLGtCQUFrQixFQUNsQixjQUFjLEdBRWYsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEdBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixzQkFBc0IsR0FDdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQ0wsYUFBYSxFQUNiLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsOEJBQThCLEdBQy9CLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLGFBQWEsRUFFYixzQkFBc0IsR0FDdkIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNMLFlBQVksRUFDWixhQUFhLEVBQ2IsT0FBTyxFQUNQLFlBQVksRUFDWixlQUFlLEVBQ2YsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixrQkFBa0IsR0FHbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEdBRWYsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixHQUVuQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIHZlcmlmeVVzZXJKd3QsXG4gIHZlcmlmeUJlYXJlclRva2VuLFxuICBoYXNWYWxpZElkZW50aXR5Q2xhaW1zLFxufSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuZXhwb3J0IHtcbiAgcmVxdWlyZUF1dGgsXG59IGZyb20gJy4vYXV0aC5qcyc7XG5leHBvcnQge1xuICBzZXRUb2tlblJldm9jYXRpb25TdG9yZSxcbiAgaXNBY2Nlc3NUb2tlblJldm9rZWQsXG59IGZyb20gJy4vcmV2b2NhdGlvbi5qcyc7XG5leHBvcnQge1xuICByZXF1aXJlQXNzdXJhbmNlLFxuICByZWZ1c2VXZWFrU2Vzc2lvbixcbiAgcmVmdXNlRm9yT3JnQWRtaW5Bc3N1cmFuY2UsXG4gIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZSxcbiAgdHlwZSBBc3N1cmFuY2VPcHRpb25zLFxufSBmcm9tICcuL2Fzc3VyYW5jZS5qcyc7XG5leHBvcnQge1xuICB1c2VySGFzUGVybWlzc2lvbixcbiAgc2V0QXV0aHpEZW5pYWxBdWRpdG9yLFxuICByZWNvcmRBdXRoekRlbmlhbCxcbiAgcmVxdWlyZVBlcm1pc3Npb24sXG4gIHJlcXVpcmVBbGxQZXJtaXNzaW9ucyxcbiAgcmVxdWlyZVBlcm1pc3Npb25PclNlcnZpY2UsXG4gIHJlcXVpcmVTZXJ2aWNlUHJpbmNpcGFsLFxuICByZXF1aXJlSW50ZXJuYWxTZXJ2aWNlLFxuICBpc1N5c3RlbUFkbWluLFxuICBoYXNTY29wZSxcbiAgcmVxdWlyZVN5c3RlbUFkbWluLFxuICByZXF1aXJlRmVhdHVyZSxcbiAgdHlwZSBBdXRoekRlbmlhbEluZm8sXG59IGZyb20gJy4vcGVybWlzc2lvbi1nYXRlcy5qcyc7XG5leHBvcnQge1xuICBpc1N5c3RlbU9yZ0lkLFxuICBTWVNURU1fT1JHX0lELFxuICBTWVNURU1fT1JHX1NMVUcsXG59IGZyb20gJy4vc3lzdGVtLW9yZy5qcyc7XG5leHBvcnQge1xuICBzZXJ2aWNlTmFtZU9mLFxuICBpc1NlcnZpY2VUb2tlbkRlbmllZCxcbiAgc2lnblNlcnZpY2VUb2tlbixcbiAgZ2V0U2VydmljZUF1dGhIZWFkZXIsXG4gIGlzU2VydmljZVByaW5jaXBhbCxcbiAgaXNTZXJ2aWNlQWNjb3VudFByaW5jaXBhbCxcbiAgaXNTZXJ2aWNlUHJpbmNpcGFsTmFtZWQsXG4gIHZlcmlmeVNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gJy4vc2VydmljZS10b2tlbnMuanMnO1xuZXhwb3J0IHsgcmVxdWlyZVN5c3RlbU9yZywgcmVxdWlyZVN5c3RlbU9yZ1Blcm1pc3Npb24gfSBmcm9tICcuL2Vjb3N5c3RlbS1ndWFyZC5qcyc7XG5leHBvcnQge1xuICBtb25nb1Nhbml0aXplLFxuICBNQVhfU0FOSVRJWkVfREVQVEgsXG59IGZyb20gJy4vbW9uZ28tc2FuaXRpemUuanMnO1xuZXhwb3J0IHtcbiAgcHJvcG9zYWJsZSxcbiAgQVNLX1BST1ZFTkFOQ0VfUkVGVVNFRF9DT1VOVEVSLFxufSBmcm9tICcuL2Fzay1wcm92ZW5hbmNlLmpzJztcbmV4cG9ydCB7XG4gIHJlcXVpcmVTdGVwVXAsXG4gIHR5cGUgU3RlcFVwTWV0aG9kLFxuICBTVFJPTkdfU1RFUF9VUF9NRVRIT0RTLFxufSBmcm9tICcuL3N0ZXAtdXAuanMnO1xuZXhwb3J0IHtcbiAgdGFnUm91dGVHYXRlLFxuICBnZXRSb3V0ZUdhdGVzLFxuICBhdWRpdGVkLFxuICBkeW5hbWljQXV0aHosXG4gIGJ1aWxkUm91dGVUYWJsZSxcbiAgaXNXcml0ZU1ldGhvZCxcbiAgc3VtbWFyaXplUm91dGVUYWJsZSxcbiAgRFlOQU1JQ19QUklOQ0lQQUxTLFxuICB0eXBlIER5bmFtaWNQcmluY2lwYWwsXG4gIHR5cGUgUm91dGVUYWJsZUVudHJ5LFxufSBmcm9tICcuL3JvdXRlLXRhYmxlLmpzJztcbmV4cG9ydCB7XG4gIGFybURlZmVycmVkUXVvdGFDaGVjayxcbiAgcnVuRGVmZXJyZWRRdW90YUNoZWNrLFxufSBmcm9tICcuL2RlZmVycmVkLXF1b3RhLWNoZWNrLmpzJztcbmV4cG9ydCB7XG4gIE9OX0JFSEFMRl9IRUFERVIsXG4gIE9OX0JFSEFMRl9DQUxMRVJTLFxuICBvbkJlaGFsZkhlYWRlcnMsXG4gIG9uQmVoYWxmQ2FsbGVyLFxuICB0eXBlIE9uQmVoYWxmU3ViamVjdCxcbn0gZnJvbSAnLi9vbi1iZWhhbGYuanMnO1xuZXhwb3J0IHtcbiAgUVVPVEFfRVhFTVBUX1JPVVRFUyxcbiAgaXNRdW90YUV4ZW1wdFJvdXRlLFxuICB0eXBlIFF1b3RhRXhlbXB0Um91dGUsXG59IGZyb20gJy4vcXVvdGEtZXhlbXB0LXJvdXRlcy5qcyc7XG5leHBvcnQge1xuICBjbGllbnRWZXJzaW9uR2F0ZSxcbiAgQ0xJRU5UX1ZFUlNJT05fSEVBREVSLFxuICBNSU5fQ0xJRU5UX1ZFUlNJT05fSEVBREVSLFxuICBDSV9DQUxMRVJfSEVBREVSLFxuICBjbGllbnRWZXJzaW9uT2YsXG59IGZyb20gJy4vY2xpZW50LXZlcnNpb24uanMnO1xuIl19
@@ -15,9 +15,11 @@ export declare function setApiKeyExchangeServiceName(name: string): void;
15
15
  /**
16
16
  * The JWT for `key`, from cache when possible. Throws {@link ApiKeyRejectedError}
17
17
  * when platform refused the key and {@link ApiKeyExchangeUnavailableError} when
18
- * it could not be asked.
18
+ * it could not be asked. `clientVersion` is the presenting request's
19
+ * `X-Pb-Client-Version` (already validated — see `clientVersionOf`), forwarded
20
+ * so platform can record which CLI the key is used with.
19
21
  */
20
- export declare function exchangeApiKey(key: string): Promise<string>;
22
+ export declare function exchangeApiKey(key: string, clientVersion?: string): Promise<string>;
21
23
  /**
22
24
  * Drop every cached exchange. For tests and for a process that wants to force
23
25
  * re-validation; production relies on the TTLs above.
@@ -31,6 +31,7 @@
31
31
  * pod's exchanges would otherwise share one bucket) and names the caller in
32
32
  * platform's audit trail.
33
33
  */
34
+ import { CLIENT_VERSION_HEADER } from '../middleware/client-version.js';
34
35
  import { getServiceAuthHeader } from '../middleware/service-tokens.js';
35
36
  import { SYSTEM_ORG_ID } from '../middleware/system-org.js';
36
37
  import { InternalHttpClient } from '../services/http-client.js';
@@ -115,7 +116,7 @@ function evictIfFull() {
115
116
  }
116
117
  }
117
118
  /** One real round-trip to platform. Throws the two typed errors above. */
118
- async function performExchange(key, hash) {
119
+ async function performExchange(key, hash, clientVersion) {
119
120
  const client = platformClient();
120
121
  let status;
121
122
  let body;
@@ -123,6 +124,10 @@ async function performExchange(key, hash) {
123
124
  const res = await client.post('/auth/token/exchange', { key }, {
124
125
  headers: {
125
126
  Authorization: getServiceAuthHeader({ serviceName, role: 'member', orgId: SYSTEM_ORG_ID }),
127
+ // The CLI version the key's holder is calling with (validated by the
128
+ // caller), so platform can stamp it on the key ("last CLI version") for
129
+ // org admins. Absent → platform keeps the version it already has.
130
+ ...(clientVersion ? { [CLIENT_VERSION_HEADER]: clientVersion } : {}),
126
131
  },
127
132
  // The exchange is a pure read of the key record plus a token mint — safe to
128
133
  // retry, and a lost retry only costs one extra mint.
@@ -169,20 +174,22 @@ async function performExchange(key, hash) {
169
174
  return entry;
170
175
  }
171
176
  /** Exchange, sharing a single in-flight round-trip per key. */
172
- function exchangeOnce(key, hash) {
177
+ function exchangeOnce(key, hash, clientVersion) {
173
178
  const pending = inFlight.get(hash);
174
179
  if (pending)
175
180
  return pending;
176
- const promise = performExchange(key, hash).finally(() => inFlight.delete(hash));
181
+ const promise = performExchange(key, hash, clientVersion).finally(() => inFlight.delete(hash));
177
182
  inFlight.set(hash, promise);
178
183
  return promise;
179
184
  }
180
185
  /**
181
186
  * The JWT for `key`, from cache when possible. Throws {@link ApiKeyRejectedError}
182
187
  * when platform refused the key and {@link ApiKeyExchangeUnavailableError} when
183
- * it could not be asked.
188
+ * it could not be asked. `clientVersion` is the presenting request's
189
+ * `X-Pb-Client-Version` (already validated — see `clientVersionOf`), forwarded
190
+ * so platform can record which CLI the key is used with.
184
191
  */
185
- export async function exchangeApiKey(key) {
192
+ export async function exchangeApiKey(key, clientVersion) {
186
193
  const hash = hashApiKey(key);
187
194
  const now = Date.now();
188
195
  const rejectedUntil = rejectionCache.get(hash);
@@ -200,7 +207,7 @@ export async function exchangeApiKey(key) {
200
207
  // background refresh is not this request's problem — the cached token is
201
208
  // still valid, and the next request past expiry exchanges inline.
202
209
  emitCounter('api_key_exchange_cache_total', { result: 'refresh' });
203
- void exchangeOnce(key, hash).catch(() => { });
210
+ void exchangeOnce(key, hash, clientVersion).catch(() => { });
204
211
  }
205
212
  else {
206
213
  emitCounter('api_key_exchange_cache_total', { result: 'hit' });
@@ -208,7 +215,7 @@ export async function exchangeApiKey(key) {
208
215
  return cached.token;
209
216
  }
210
217
  emitCounter('api_key_exchange_cache_total', { result: 'miss' });
211
- return (await exchangeOnce(key, hash)).token;
218
+ return (await exchangeOnce(key, hash, clientVersion)).token;
212
219
  }
213
220
  /**
214
221
  * Drop every cached exchange. For tests and for a process that wants to force
@@ -219,4 +226,4 @@ export function resetApiKeyExchangeCache() {
219
226
  rejectionCache.clear();
220
227
  inFlight.clear();
221
228
  }
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS1rZXktZXhjaGFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRWhELHVGQUF1RjtBQUN2RixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFFN0Isd0RBQXdEO0FBQ3hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQixrRkFBa0Y7QUFDbEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFakM7OzJEQUUyRDtBQUMzRCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUVwQyxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFDNUMsWUFBWSxPQUFPLEdBQUcsMkNBQTJDO1FBQy9ELEtBQUssQ0FBQyxPQUFPLENB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QU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuRCwyRUFBMkU7WUFDM0UseUVBQXlFO1lBQ3pFLGtFQUFrRTtZQUNsRSxXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNuRSxLQUFLLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUE2QyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRyYWRlIGFuIG9wYXF1ZSBhY2Nlc3Mga2V5IGZvciBhIHNob3J0LWxpdmVkIEpXVCwgb25jZSwgYW5kIGNhY2hlIGl0LlxuICpcbiAqIE9ubHkgcGxhdGZvcm0sIGJpbGxpbmcgYW5kIHF1b3RhIGhhdmUgTW9uZ29EQiwgc28gdGhlIHN0YXRlbGVzcyBzZXJ2aWNlc1xuICogY2Fubm90IGxvb2sgdXAgYSBrZXkgaGFzaCDigJQgYW5kIGFza2luZyBwbGF0Zm9ybSB0byB2YWxpZGF0ZSBFVkVSWSByZXF1ZXN0XG4gKiB3b3VsZCBwdXQgaXQgb24gdGhlIGhvdCBwYXRoIG9mIHRoZSB3aG9sZSBmbGVldC4gSW5zdGVhZCB0aGlzIG1vZHVsZSBkb2VzIHRoZVxuICogZXhjaGFuZ2Ugb25jZSBwZXIga2V5IChgUE9TVCAvYXV0aC90b2tlbi9leGNoYW5nZWApIGFuZCBjYWNoZXMgdGhlIHJldHVybmVkXG4gKiBKV1QgaW4tcHJvY2VzcyB1bnRpbCBpdCBleHBpcmVzLCBzbyBgcmVxdWlyZUF1dGhgIG9ubHkgZXZlciB2ZXJpZmllcyBhIEpXVC5cbiAqXG4gKiBQcm9wZXJ0aWVzIHRoYXQgbWF0dGVyOlxuICpcbiAqIC0gKipSZXZvY2F0aW9uIGxhdGVuY3kgaXMgYm91bmRlZCBieSB0aGUgdG9rZW4gVFRMKiogKDUgbWludXRlcykuIEEgcmV2b2tlZFxuICogICBrZXkgY2FuIG5vIGxvbmdlciBiZSBleGNoYW5nZWQsIGFuZCB0aGUgY2FjaGVkIHRva2VuIGl0IGFscmVhZHkgcHJvZHVjZWRcbiAqICAgZGllcyBvbiBpdHMgb3duLlxuICogLSAqKkVhcmx5LCBqaXR0ZXJlZCByZWZyZXNoLioqIFRoZSBjYWNoZWQgdG9rZW4gaXMgcmUtZXhjaGFuZ2VkIGluIHRoZVxuICogICBiYWNrZ3JvdW5kIGF0IH43NSUgb2YgaXRzIGxpZmUgKMKxMjAlIGppdHRlcikgc28gbm8gcmVxdWVzdCBldmVyIGJsb2NrcyBvblxuICogICB0aGUgZXhjaGFuZ2UsIGFuZCBhIGZsZWV0IG9mIHBvZHMgaG9sZGluZyB0aGUgc2FtZSBrZXkgZG9lc24ndCBzdGFtcGVkZVxuICogICBwbGF0Zm9ybSBhdCB0aGUgc2FtZSBpbnN0YW50LlxuICogLSAqKk9uZSBpbi1mbGlnaHQgZXhjaGFuZ2UgcGVyIGtleS4qKiBDb25jdXJyZW50IHJlcXVlc3RzIHNoYXJlIGEgcHJvbWlzZS5cbiAqIC0gKipTaG9ydCBuZWdhdGl2ZSBjYWNoZS4qKiBBIGtleSBwbGF0Zm9ybSByZWplY3RlZCBpcyByZW1lbWJlcmVkIGZvciAzMHMsIHNvXG4gKiAgIGEgbWlzY29uZmlndXJlZCBjbGllbnQgKG9yIGEgc2Nhbm5lcikgY2FuJ3QgdHVybiBldmVyeSByZXF1ZXN0IGludG8gYVxuICogICBwbGF0Zm9ybSByb3VuZC10cmlwLlxuICogLSAqKlBsYXRmb3JtIGRvd24gaXMgYSA1MDMsIG5ldmVyIGEgMjAwLioqIFRoZSBjYWxsZXIgbWFwc1xuICogICB7QGxpbmsgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yfSB0byBcInRyeSBhZ2FpblwiLCB3aXRoIGEgbWV0cmljIOKAlCBpdCBpc1xuICogICBkZWxpYmVyYXRlbHkgTk9UIGZhaWwtb3BlbjogYW4gdW52ZXJpZmlhYmxlIGNyZWRlbnRpYWwgaXMgbm90IGFuIGlkZW50aXR5LlxuICpcbiAqIFRoZSBleGNoYW5nZSByZXF1ZXN0IGl0c2VsZiBjYXJyaWVzIHRoaXMgc2VydmljZSdzIG93biBzaWduZWQgc2VydmljZSB0b2tlbixcbiAqIHdoaWNoIGlzIHdoYXQgZXhlbXB0cyBpdCBmcm9tIHBsYXRmb3JtJ3MgSVAta2V5ZWQgYC9hdXRoYCByYXRlIGxpbWl0ZXIgKGV2ZXJ5XG4gKiBwb2QncyBleGNoYW5nZXMgd291bGQgb3RoZXJ3aXNlIHNoYXJlIG9uZSBidWNrZXQpIGFuZCBuYW1lcyB0aGUgY2FsbGVyIGluXG4gKiBwbGF0Zm9ybSdzIGF1ZGl0IHRyYWlsLlxuICovXG5cbmltcG9ydCB7IGdldFNlcnZpY2VBdXRoSGVhZGVyIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgeyBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zeXN0ZW0tb3JnLmpzJztcbmltcG9ydCB7IEludGVybmFsSHR0cENsaWVudCB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAtY2xpZW50LmpzJztcbmltcG9ydCB7IGhhc2hBcGlLZXkgfSBmcm9tICcuLi91dGlscy9hcGkta2V5LmpzJztcbmltcG9ydCB7IGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBzZXJ2aWNlRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdhcGkta2V5LWV4Y2hhbmdlJyk7XG5cbi8qKiBNb3N0IGRpc3RpbmN0IGtleXMgaGVsZCBpbiB0aGUgcHJvY2Vzcy13aWRlIGNhY2hlIGJlZm9yZSB0aGUgb2xkZXN0IGFyZSBkcm9wcGVkLiAqL1xuY29uc3QgTUFYX0NBQ0hFRF9LRVlTID0gMTAwMDtcblxuLyoqIEhvdyBsb25nIGEgcGxhdGZvcm0gUkVKRUNUSU9OIGlzIHJlbWVtYmVyZWQgKG1zKS4gKi9cbmNvbnN0IE5FR0FUSVZFX1RUTF9NUyA9IDMwXzAwMDtcblxuLyoqIEZyYWN0aW9uIG9mIGEgdG9rZW4ncyBsaWZlIGFmdGVyIHdoaWNoIGEgYmFja2dyb3VuZCByZS1leGNoYW5nZSBpcyBzdGFydGVkLiAqL1xuY29uc3QgUkVGUkVTSF9BVF9GUkFDVElPTiA9IDAuNzU7XG5cbi8qKiDCsSBqaXR0ZXIgYXBwbGllZCB0byB0aGUgcmVmcmVzaCBwb2ludCwgYXMgYSBmcmFjdGlvbiBvZiB0aGUgdG9rZW4ncyBsaWZlLlxuICogIFdpZGUgZW5vdWdoIHRvIGRlLXN5bmNocm9uaXplIGEgZmxlZXQsIG5hcnJvdyBlbm91Z2ggdG8gbGVhdmUgYSBjbGVhciB0YWlsIG9mXG4gKiAgc3RpbGwtdmFsaWQgdG9rZW4gYWZ0ZXIgdGhlIGxhdGVzdCBwb3NzaWJsZSByZWZyZXNoLiAqL1xuY29uc3QgUkVGUkVTSF9KSVRURVJfRlJBQ1RJT04gPSAwLjE7XG5cbi8qKiBUaGUga2V5IHdhcyBwcmVzZW50ZWQgdG8gcGxhdGZvcm0gYW5kIHJlZnVzZWQgKHVua25vd24sIHJldm9rZWQsIGV4cGlyZWQpLiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleVJlamVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnQWNjZXNzIGtleSBpcyBpbnZhbGlkLCByZXZva2VkIG9yIGV4cGlyZWQnKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FwaUtleVJlamVjdGVkRXJyb3InO1xuICB9XG59XG5cbi8qKiBQbGF0Zm9ybSBjb3VsZCBub3QgYmUgcmVhY2hlZCAob3IgYW5zd2VyZWQgNXh4KSDigJQgdGhlIGtleSdzIHZhbGlkaXR5IGlzIHVua25vd24uICovXG5leHBvcnQgY2xhc3MgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FjY2Vzcy1rZXkgdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3InO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWNoZUVudHJ5IHtcbiAgLyoqIFRoZSBleGNoYW5nZWQgSldULiAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogRXBvY2ggbXMgYXQgd2hpY2ggdGhlIEpXVCBzdG9wcyBiZWluZyB1c2FibGUuICovXG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICAvKiogRXBvY2ggbXMgYWZ0ZXIgd2hpY2ggYSBiYWNrZ3JvdW5kIHJlLWV4Y2hhbmdlIHNob3VsZCBiZSBzdGFydGVkLiAqL1xuICByZWZyZXNoQXQ6IG51bWJlcjtcbn1cblxuLyoqIENhY2hlIG9mIHN1Y2Nlc3NmdWwgZXhjaGFuZ2VzLCBrZXllZCBieSBgc2hhMjU2KGtleSlgIOKAlCBuZXZlciBieSB0aGUga2V5IGl0c2VsZi4gKi9cbmNvbnN0IHRva2VuQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVFbnRyeT4oKTtcbi8qKiBDYWNoZSBvZiByZWplY3Rpb25zLCBrZXllZCB0aGUgc2FtZSB3YXk7IHZhbHVlIGlzIHRoZSBlcG9jaCBtcyBpdCBleHBpcmVzLiAqL1xuY29uc3QgcmVqZWN0aW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuLyoqIEluLWZsaWdodCBleGNoYW5nZXMsIHNvIGNvbmN1cnJlbnQgcmVxdWVzdHMgZm9yIG9uZSBrZXkgc2hhcmUgYSByb3VuZC10cmlwLiAqL1xuY29uc3QgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxDYWNoZUVudHJ5Pj4oKTtcblxuLyoqIFRoZSBzZXJ2aWNlIG5hbWUgbWludGVkIGludG8gdGhlIGV4Y2hhbmdlIGNhbGwncyBvd24gc2VydmljZSB0b2tlbi4gKi9cbmxldCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAndW5rbm93bic7XG5cbi8qKlxuICogTmFtZSB0aGlzIHByb2Nlc3MgaW4gdGhlIGV4Y2hhbmdlIGNhbGwncyBzZXJ2aWNlIHRva2VuLiBDYWxsZWQgZnJvbVxuICogYHdpcmVTZXJ2aWNlU2VjdXJpdHlgIGF0IGJvb3QgKGFuZCBieSB0aGUgcGx1Z2luIHNlcnZpY2UsIHdoaWNoIHdpcmVzIGl0c1xuICogYm9vdCBzZWN1cml0eSBieSBoYW5kKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEFwaUtleUV4Y2hhbmdlU2VydmljZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIHNlcnZpY2VOYW1lID0gbmFtZTtcbn1cblxuLyoqIFBsYXRmb3JtJ3MgaW4tY2x1c3RlciBhZGRyZXNzIOKAlCB0aGUgc2FtZSBlbnYgcGFpciBldmVyeSBvdGhlciBjYWxsZXIgdXNlcy4gKi9cbmZ1bmN0aW9uIHBsYXRmb3JtQ2xpZW50KCk6IEludGVybmFsSHR0cENsaWVudCB7XG4gIHJldHVybiBuZXcgSW50ZXJuYWxIdHRwQ2xpZW50KHtcbiAgICAuLi5zZXJ2aWNlRW5kcG9pbnQoJ3BsYXRmb3JtJyksXG4gICAgdGltZW91dDogZW52SW50KCdBUElfS0VZX0VYQ0hBTkdFX1RJTUVPVVRfTVMnLCAzMDAwLCB7IG1pbjogMSB9KSxcbiAgfSk7XG59XG5cbi8qKiBUaGUgZXBvY2ggbXMgYXQgd2hpY2ggYSB0b2tlbiB3aXRoIGB0dGxTZWNvbmRzYCBvZiBsaWZlIHNob3VsZCBiZSByZWZyZXNoZWQgZWFybHkuICovXG5mdW5jdGlvbiBqaXR0ZXJlZFJlZnJlc2hBdChpc3N1ZWRBdDogbnVtYmVyLCB0dGxTZWNvbmRzOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBsaWZlTXMgPSB0dGxTZWNvbmRzICogMTAwMDtcbiAgY29uc3Qgaml0dGVyID0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiBSRUZSRVNIX0pJVFRFUl9GUkFDVElPTjtcbiAgLy8gQ2xhbXAgaW50byAoMCwgMSkgc28gdGhlIHJlZnJlc2ggcG9pbnQgaXMgYWx3YXlzIGJlZm9yZSBleHBpcnkgYW5kIG5ldmVyIGluXG4gIC8vIHRoZSBwYXN0LCB3aGF0ZXZlciBUVEwgcGxhdGZvcm0gcmV0dXJucy5cbiAgY29uc3QgZnJhY3Rpb24gPSBNYXRoLm1pbigwLjk1LCBNYXRoLm1heCgwLjEsIFJFRlJFU0hfQVRfRlJBQ1RJT04gKyBqaXR0ZXIpKTtcbiAgcmV0dXJuIGlzc3VlZEF0ICsgbGlmZU1zICogZnJhY3Rpb247XG59XG5cbi8qKiBEcm9wIHRoZSBvbGRlc3QgZW50cmllcyBvbmNlIHRoZSBjYWNoZSBpcyBvdmVyIGl0cyBjYXAgKGtleXMgYXJlIGxvbmctbGl2ZWQsIHRva2VucyBhcmUgbm90KS4gKi9cbmZ1bmN0aW9uIGV2aWN0SWZGdWxsKCk6IHZvaWQge1xuICBpZiAodG9rZW5DYWNoZS5zaXplIDw9IE1BWF9DQUNIRURfS0VZUykgcmV0dXJuO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBmb3IgKGNvbnN0IFtoYXNoLCBlbnRyeV0gb2YgdG9rZW5DYWNoZSkge1xuICAgIGlmIChlbnRyeS5leHBpcmVzQXQgPD0gbm93KSB0b2tlbkNhY2hlLmRlbGV0ZShoYXNoKTtcbiAgfVxuICAvLyBNYXAgcHJlc2VydmVzIGluc2VydGlvbiBvcmRlciDigJQgZHJvcCBmcm9tIHRoZSBmcm9udCB1bnRpbCBiYWNrIHVuZGVyIHRoZSBjYXAuXG4gIHdoaWxlICh0b2tlbkNhY2hlLnNpemUgPiBNQVhfQ0FDSEVEX0tFWVMpIHtcbiAgICBjb25zdCBvbGRlc3QgPSB0b2tlbkNhY2hlLmtleXMoKS5uZXh0KCk7XG4gICAgaWYgKG9sZGVzdC5kb25lKSBicmVhaztcbiAgICB0b2tlbkNhY2hlLmRlbGV0ZShvbGRlc3QudmFsdWUpO1xuICB9XG59XG5cbmludGVyZmFjZSBFeGNoYW5nZVJlc3BvbnNlIHtcbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIGRhdGE/OiB7IGFjY2Vzc1Rva2VuPzogc3RyaW5nOyBleHBpcmVzSW4/OiBudW1iZXIgfTtcbn1cblxuLyoqIE9uZSByZWFsIHJvdW5kLXRyaXAgdG8gcGxhdGZvcm0uIFRocm93cyB0aGUgdHdvIHR5cGVkIGVycm9ycyBhYm92ZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1FeGNoYW5nZShrZXk6IHN0cmluZywgaGFzaDogc3RyaW5nKTogUHJvbWlzZTxDYWNoZUVudHJ5PiB7XG4gIGNvbnN0IGNsaWVudCA9IHBsYXRmb3JtQ2xpZW50KCk7XG4gIGxldCBzdGF0dXM6IG51bWJlcjtcbiAgbGV0IGJvZHk6IEV4Y2hhbmdlUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnBvc3Q8RXhjaGFuZ2VSZXNwb25zZT4oJy9hdXRoL3Rva2VuL2V4Y2hhbmdlJywgeyBrZXkgfSwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBnZXRTZXJ2aWNlQXV0aEhlYWRlcih7IHNlcnZpY2VOYW1lLCByb2xlOiAnbWVtYmVyJywgb3JnSWQ6IFNZU1RFTV9PUkdfSUQgfSksXG4gICAgICB9LFxuICAgICAgLy8gVGhlIGV4Y2hhbmdlIGlzIGEgcHVyZSByZWFkIG9mIHRoZSBrZXkgcmVjb3JkIHBsdXMgYSB0b2tlbiBtaW50IOKAlCBzYWZlIHRvXG4gICAgICAvLyByZXRyeSwgYW5kIGEgbG9zdCByZXRyeSBvbmx5IGNvc3RzIG9uZSBleHRyYSBtaW50LlxuICAgICAgaWRlbXBvdGVudDogdHJ1ZSxcbiAgICB9KTtcbiAgICBzdGF0dXMgPSByZXMuc3RhdHVzQ29kZTtcbiAgICBib2R5ID0gcmVzLmJvZHk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBsb2dnZXIud2FybignQWNjZXNzLWtleSBleGNoYW5nZSBmYWlsZWQgdG8gcmVhY2ggcGxhdGZvcm0nLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcigpO1xuICB9XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDAxIHx8IHN0YXR1cyA9PT0gNDAzIHx8IHN0YXR1cyA9PT0gNDAwIHx8IHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgcmVqZWN0aW9uQ2FjaGUuc2V0KGhhc2gsIERhdGUubm93KCkgKyBORUdBVElWRV9UVExfTVMpO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICdyZWplY3RlZCcgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ3JlamVjdGVkJyB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5UmVqZWN0ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBib2R5Py5kYXRhPy5hY2Nlc3NUb2tlbjtcbiAgaWYgKHN0YXR1cyA+PSA0MDAgfHwgdHlwZW9mIGFjY2Vzc1Rva2VuICE9PSAnc3RyaW5nJyB8fCBhY2Nlc3NUb2tlbi5sZW5ndGggPT09IDApIHtcbiAgICAvLyA0MjkgYW5kIDV4eCBsYW5kIGhlcmU6IHBsYXRmb3JtIGlzIHVwIGJ1dCBjYW4ndCBhbnN3ZXIgcmlnaHQgbm93LCB3aGljaCBpc1xuICAgIC8vIFwidW5rbm93blwiLCBub3QgXCJpbnZhbGlkXCIg4oCUIG5ldmVyIGNhY2hlIGl0IGFzIGEgcmVqZWN0aW9uLlxuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogc3RhdHVzID09PSA0MjkgPyAndGhyb3R0bGVkJyA6ICdzZXJ2ZXJfZXJyb3InIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IHR0bFNlY29uZHMgPSB0eXBlb2YgYm9keT8uZGF0YT8uZXhwaXJlc0luID09PSAnbnVtYmVyJyAmJiBib2R5LmRhdGEuZXhwaXJlc0luID4gMFxuICAgID8gYm9keS5kYXRhLmV4cGlyZXNJblxuICAgIDogNjA7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVudHJ5OiBDYWNoZUVudHJ5ID0ge1xuICAgIHRva2VuOiBhY2Nlc3NUb2tlbixcbiAgICBleHBpcmVzQXQ6IG5vdyArIHR0bFNlY29uZHMgKiAxMDAwLFxuICAgIHJlZnJlc2hBdDogaml0dGVyZWRSZWZyZXNoQXQobm93LCB0dGxTZWNvbmRzKSxcbiAgfTtcbiAgdG9rZW5DYWNoZS5zZXQoaGFzaCwgZW50cnkpO1xuICByZWplY3Rpb25DYWNoZS5kZWxldGUoaGFzaCk7XG4gIGV2aWN0SWZGdWxsKCk7XG4gIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICdzdWNjZXNzJyB9KTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG4vKiogRXhjaGFuZ2UsIHNoYXJpbmcgYSBzaW5nbGUgaW4tZmxpZ2h0IHJvdW5kLXRyaXAgcGVyIGtleS4gKi9cbmZ1bmN0aW9uIGV4Y2hhbmdlT25jZShrZXk6IHN0cmluZywgaGFzaDogc3RyaW5nKTogUHJvbWlzZTxDYWNoZUVudHJ5PiB7XG4gIGNvbnN0IHBlbmRpbmcgPSBpbkZsaWdodC5nZXQoaGFzaCk7XG4gIGlmIChwZW5kaW5nKSByZXR1cm4gcGVuZGluZztcbiAgY29uc3QgcHJvbWlzZSA9IHBlcmZvcm1FeGNoYW5nZShrZXksIGhhc2gpLmZpbmFsbHkoKCkgPT4gaW5GbGlnaHQuZGVsZXRlKGhhc2gpKTtcbiAgaW5GbGlnaHQuc2V0KGhhc2gsIHByb21pc2UpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLyoqXG4gKiBUaGUgSldUIGZvciBga2V5YCwgZnJvbSBjYWNoZSB3aGVuIHBvc3NpYmxlLiBUaHJvd3Mge0BsaW5rIEFwaUtleVJlamVjdGVkRXJyb3J9XG4gKiB3aGVuIHBsYXRmb3JtIHJlZnVzZWQgdGhlIGtleSBhbmQge0BsaW5rIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcn0gd2hlblxuICogaXQgY291bGQgbm90IGJlIGFza2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhjaGFuZ2VBcGlLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoYXNoID0gaGFzaEFwaUtleShrZXkpO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gIGNvbnN0IHJlamVjdGVkVW50aWwgPSByZWplY3Rpb25DYWNoZS5nZXQoaGFzaCk7XG4gIGlmIChyZWplY3RlZFVudGlsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocmVqZWN0ZWRVbnRpbCA+IG5vdykge1xuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ3JlamVjdGVkJyB9KTtcbiAgICAgIHRocm93IG5ldyBBcGlLZXlSZWplY3RlZEVycm9yKCk7XG4gICAgfVxuICAgIHJlamVjdGlvbkNhY2hlLmRlbGV0ZShoYXNoKTtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlZCA9IHRva2VuQ2FjaGUuZ2V0KGhhc2gpO1xuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5leHBpcmVzQXQgPiBub3cpIHtcbiAgICBpZiAoY2FjaGVkLnJlZnJlc2hBdCA8PSBub3cgJiYgIWluRmxpZ2h0LmhhcyhoYXNoKSkge1xuICAgICAgLy8gRWFybHkgcmVmcmVzaDogd2FybSB0aGUgY2FjaGUgV0lUSE9VVCBtYWtpbmcgdGhpcyByZXF1ZXN0IHdhaXQuIEEgZmFpbGVkXG4gICAgICAvLyBiYWNrZ3JvdW5kIHJlZnJlc2ggaXMgbm90IHRoaXMgcmVxdWVzdCdzIHByb2JsZW0g4oCUIHRoZSBjYWNoZWQgdG9rZW4gaXNcbiAgICAgIC8vIHN0aWxsIHZhbGlkLCBhbmQgdGhlIG5leHQgcmVxdWVzdCBwYXN0IGV4cGlyeSBleGNoYW5nZXMgaW5saW5lLlxuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ3JlZnJlc2gnIH0pO1xuICAgICAgdm9pZCBleGNoYW5nZU9uY2Uoa2V5LCBoYXNoKS5jYXRjaCgoKSA9PiB7IC8qIGxvZ2dlZCArIGNvdW50ZWQgaW4gcGVyZm9ybUV4Y2hhbmdlICovIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAnaGl0JyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZC50b2tlbjtcbiAgfVxuXG4gIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdtaXNzJyB9KTtcbiAgcmV0dXJuIChhd2FpdCBleGNoYW5nZU9uY2Uoa2V5LCBoYXNoKSkudG9rZW47XG59XG5cbi8qKlxuICogRHJvcCBldmVyeSBjYWNoZWQgZXhjaGFuZ2UuIEZvciB0ZXN0cyBhbmQgZm9yIGEgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIGZvcmNlXG4gKiByZS12YWxpZGF0aW9uOyBwcm9kdWN0aW9uIHJlbGllcyBvbiB0aGUgVFRMcyBhYm92ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0QXBpS2V5RXhjaGFuZ2VDYWNoZSgpOiB2b2lkIHtcbiAgdG9rZW5DYWNoZS5jbGVhcigpO1xuICByZWplY3Rpb25DYWNoZS5jbGVhcigpO1xuICBpbkZsaWdodC5jbGVhcigpO1xufVxuIl19
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS1rZXktZXhjaGFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRWhELHVGQUF1RjtBQUN2RixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFFN0Isd0RBQXdEO0FBQ3hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQixrRkFBa0Y7QUFDbEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFakM7OzJEQUUyRDtBQUMzRCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUVwQyxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFDNUMs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QUM7SUFDbkIsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVHJhZGUgYW4gb3BhcXVlIGFjY2VzcyBrZXkgZm9yIGEgc2hvcnQtbGl2ZWQgSldULCBvbmNlLCBhbmQgY2FjaGUgaXQuXG4gKlxuICogT25seSBwbGF0Zm9ybSwgYmlsbGluZyBhbmQgcXVvdGEgaGF2ZSBNb25nb0RCLCBzbyB0aGUgc3RhdGVsZXNzIHNlcnZpY2VzXG4gKiBjYW5ub3QgbG9vayB1cCBhIGtleSBoYXNoIOKAlCBhbmQgYXNraW5nIHBsYXRmb3JtIHRvIHZhbGlkYXRlIEVWRVJZIHJlcXVlc3RcbiAqIHdvdWxkIHB1dCBpdCBvbiB0aGUgaG90IHBhdGggb2YgdGhlIHdob2xlIGZsZWV0LiBJbnN0ZWFkIHRoaXMgbW9kdWxlIGRvZXMgdGhlXG4gKiBleGNoYW5nZSBvbmNlIHBlciBrZXkgKGBQT1NUIC9hdXRoL3Rva2VuL2V4Y2hhbmdlYCkgYW5kIGNhY2hlcyB0aGUgcmV0dXJuZWRcbiAqIEpXVCBpbi1wcm9jZXNzIHVudGlsIGl0IGV4cGlyZXMsIHNvIGByZXF1aXJlQXV0aGAgb25seSBldmVyIHZlcmlmaWVzIGEgSldULlxuICpcbiAqIFByb3BlcnRpZXMgdGhhdCBtYXR0ZXI6XG4gKlxuICogLSAqKlJldm9jYXRpb24gbGF0ZW5jeSBpcyBib3VuZGVkIGJ5IHRoZSB0b2tlbiBUVEwqKiAoNSBtaW51dGVzKS4gQSByZXZva2VkXG4gKiAgIGtleSBjYW4gbm8gbG9uZ2VyIGJlIGV4Y2hhbmdlZCwgYW5kIHRoZSBjYWNoZWQgdG9rZW4gaXQgYWxyZWFkeSBwcm9kdWNlZFxuICogICBkaWVzIG9uIGl0cyBvd24uXG4gKiAtICoqRWFybHksIGppdHRlcmVkIHJlZnJlc2guKiogVGhlIGNhY2hlZCB0b2tlbiBpcyByZS1leGNoYW5nZWQgaW4gdGhlXG4gKiAgIGJhY2tncm91bmQgYXQgfjc1JSBvZiBpdHMgbGlmZSAowrEyMCUgaml0dGVyKSBzbyBubyByZXF1ZXN0IGV2ZXIgYmxvY2tzIG9uXG4gKiAgIHRoZSBleGNoYW5nZSwgYW5kIGEgZmxlZXQgb2YgcG9kcyBob2xkaW5nIHRoZSBzYW1lIGtleSBkb2Vzbid0IHN0YW1wZWRlXG4gKiAgIHBsYXRmb3JtIGF0IHRoZSBzYW1lIGluc3RhbnQuXG4gKiAtICoqT25lIGluLWZsaWdodCBleGNoYW5nZSBwZXIga2V5LioqIENvbmN1cnJlbnQgcmVxdWVzdHMgc2hhcmUgYSBwcm9taXNlLlxuICogLSAqKlNob3J0IG5lZ2F0aXZlIGNhY2hlLioqIEEga2V5IHBsYXRmb3JtIHJlamVjdGVkIGlzIHJlbWVtYmVyZWQgZm9yIDMwcywgc29cbiAqICAgYSBtaXNjb25maWd1cmVkIGNsaWVudCAob3IgYSBzY2FubmVyKSBjYW4ndCB0dXJuIGV2ZXJ5IHJlcXVlc3QgaW50byBhXG4gKiAgIHBsYXRmb3JtIHJvdW5kLXRyaXAuXG4gKiAtICoqUGxhdGZvcm0gZG93biBpcyBhIDUwMywgbmV2ZXIgYSAyMDAuKiogVGhlIGNhbGxlciBtYXBzXG4gKiAgIHtAbGluayBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3J9IHRvIFwidHJ5IGFnYWluXCIsIHdpdGggYSBtZXRyaWMg4oCUIGl0IGlzXG4gKiAgIGRlbGliZXJhdGVseSBOT1QgZmFpbC1vcGVuOiBhbiB1bnZlcmlmaWFibGUgY3JlZGVudGlhbCBpcyBub3QgYW4gaWRlbnRpdHkuXG4gKlxuICogVGhlIGV4Y2hhbmdlIHJlcXVlc3QgaXRzZWxmIGNhcnJpZXMgdGhpcyBzZXJ2aWNlJ3Mgb3duIHNpZ25lZCBzZXJ2aWNlIHRva2VuLFxuICogd2hpY2ggaXMgd2hhdCBleGVtcHRzIGl0IGZyb20gcGxhdGZvcm0ncyBJUC1rZXllZCBgL2F1dGhgIHJhdGUgbGltaXRlciAoZXZlcnlcbiAqIHBvZCdzIGV4Y2hhbmdlcyB3b3VsZCBvdGhlcndpc2Ugc2hhcmUgb25lIGJ1Y2tldCkgYW5kIG5hbWVzIHRoZSBjYWxsZXIgaW5cbiAqIHBsYXRmb3JtJ3MgYXVkaXQgdHJhaWwuXG4gKi9cblxuaW1wb3J0IHsgQ0xJRU5UX1ZFUlNJT05fSEVBREVSIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9jbGllbnQtdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEh0dHBDbGllbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBoYXNoQXBpS2V5IH0gZnJvbSAnLi4vdXRpbHMvYXBpLWtleS5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXBpLWtleS1leGNoYW5nZScpO1xuXG4vKiogTW9zdCBkaXN0aW5jdCBrZXlzIGhlbGQgaW4gdGhlIHByb2Nlc3Mtd2lkZSBjYWNoZSBiZWZvcmUgdGhlIG9sZGVzdCBhcmUgZHJvcHBlZC4gKi9cbmNvbnN0IE1BWF9DQUNIRURfS0VZUyA9IDEwMDA7XG5cbi8qKiBIb3cgbG9uZyBhIHBsYXRmb3JtIFJFSkVDVElPTiBpcyByZW1lbWJlcmVkIChtcykuICovXG5jb25zdCBORUdBVElWRV9UVExfTVMgPSAzMF8wMDA7XG5cbi8qKiBGcmFjdGlvbiBvZiBhIHRva2VuJ3MgbGlmZSBhZnRlciB3aGljaCBhIGJhY2tncm91bmQgcmUtZXhjaGFuZ2UgaXMgc3RhcnRlZC4gKi9cbmNvbnN0IFJFRlJFU0hfQVRfRlJBQ1RJT04gPSAwLjc1O1xuXG4vKiogwrEgaml0dGVyIGFwcGxpZWQgdG8gdGhlIHJlZnJlc2ggcG9pbnQsIGFzIGEgZnJhY3Rpb24gb2YgdGhlIHRva2VuJ3MgbGlmZS5cbiAqICBXaWRlIGVub3VnaCB0byBkZS1zeW5jaHJvbml6ZSBhIGZsZWV0LCBuYXJyb3cgZW5vdWdoIHRvIGxlYXZlIGEgY2xlYXIgdGFpbCBvZlxuICogIHN0aWxsLXZhbGlkIHRva2VuIGFmdGVyIHRoZSBsYXRlc3QgcG9zc2libGUgcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfSklUVEVSX0ZSQUNUSU9OID0gMC4xO1xuXG4vKiogVGhlIGtleSB3YXMgcHJlc2VudGVkIHRvIHBsYXRmb3JtIGFuZCByZWZ1c2VkICh1bmtub3duLCByZXZva2VkLCBleHBpcmVkKS4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlSZWplY3RlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FjY2VzcyBrZXkgaXMgaW52YWxpZCwgcmV2b2tlZCBvciBleHBpcmVkJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcGlLZXlSZWplY3RlZEVycm9yJztcbiAgfVxufVxuXG4vKiogUGxhdGZvcm0gY291bGQgbm90IGJlIHJlYWNoZWQgKG9yIGFuc3dlcmVkIDV4eCkg4oCUIHRoZSBrZXkncyB2YWxpZGl0eSBpcyB1bmtub3duLiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBY2Nlc3Mta2V5IHZlcmlmaWNhdGlvbiBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yJztcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIC8qKiBUaGUgZXhjaGFuZ2VkIEpXVC4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIGF0IHdoaWNoIHRoZSBKV1Qgc3RvcHMgYmVpbmcgdXNhYmxlLiAqL1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgLyoqIEVwb2NoIG1zIGFmdGVyIHdoaWNoIGEgYmFja2dyb3VuZCByZS1leGNoYW5nZSBzaG91bGQgYmUgc3RhcnRlZC4gKi9cbiAgcmVmcmVzaEF0OiBudW1iZXI7XG59XG5cbi8qKiBDYWNoZSBvZiBzdWNjZXNzZnVsIGV4Y2hhbmdlcywga2V5ZWQgYnkgYHNoYTI1NihrZXkpYCDigJQgbmV2ZXIgYnkgdGhlIGtleSBpdHNlbGYuICovXG5jb25zdCB0b2tlbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlRW50cnk+KCk7XG4vKiogQ2FjaGUgb2YgcmVqZWN0aW9ucywga2V5ZWQgdGhlIHNhbWUgd2F5OyB2YWx1ZSBpcyB0aGUgZXBvY2ggbXMgaXQgZXhwaXJlcy4gKi9cbmNvbnN0IHJlamVjdGlvbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbi8qKiBJbi1mbGlnaHQgZXhjaGFuZ2VzLCBzbyBjb25jdXJyZW50IHJlcXVlc3RzIGZvciBvbmUga2V5IHNoYXJlIGEgcm91bmQtdHJpcC4gKi9cbmNvbnN0IGluRmxpZ2h0ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8Q2FjaGVFbnRyeT4+KCk7XG5cbi8qKiBUaGUgc2VydmljZSBuYW1lIG1pbnRlZCBpbnRvIHRoZSBleGNoYW5nZSBjYWxsJ3Mgb3duIHNlcnZpY2UgdG9rZW4uICovXG5sZXQgc2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ3Vua25vd24nO1xuXG4vKipcbiAqIE5hbWUgdGhpcyBwcm9jZXNzIGluIHRoZSBleGNoYW5nZSBjYWxsJ3Mgc2VydmljZSB0b2tlbi4gQ2FsbGVkIGZyb21cbiAqIGB3aXJlU2VydmljZVNlY3VyaXR5YCBhdCBib290IChhbmQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlLCB3aGljaCB3aXJlcyBpdHNcbiAqIGJvb3Qgc2VjdXJpdHkgYnkgaGFuZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcGlLZXlFeGNoYW5nZVNlcnZpY2VOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBzZXJ2aWNlTmFtZSA9IG5hbWU7XG59XG5cbi8qKiBQbGF0Zm9ybSdzIGluLWNsdXN0ZXIgYWRkcmVzcyDigJQgdGhlIHNhbWUgZW52IHBhaXIgZXZlcnkgb3RoZXIgY2FsbGVyIHVzZXMuICovXG5mdW5jdGlvbiBwbGF0Zm9ybUNsaWVudCgpOiBJbnRlcm5hbEh0dHBDbGllbnQge1xuICByZXR1cm4gbmV3IEludGVybmFsSHR0cENsaWVudCh7XG4gICAgLi4uc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLFxuICAgIHRpbWVvdXQ6IGVudkludCgnQVBJX0tFWV9FWENIQU5HRV9USU1FT1VUX01TJywgMzAwMCwgeyBtaW46IDEgfSksXG4gIH0pO1xufVxuXG4vKiogVGhlIGVwb2NoIG1zIGF0IHdoaWNoIGEgdG9rZW4gd2l0aCBgdHRsU2Vjb25kc2Agb2YgbGlmZSBzaG91bGQgYmUgcmVmcmVzaGVkIGVhcmx5LiAqL1xuZnVuY3Rpb24gaml0dGVyZWRSZWZyZXNoQXQoaXNzdWVkQXQ6IG51bWJlciwgdHRsU2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbGlmZU1zID0gdHRsU2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IGppdHRlciA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogUkVGUkVTSF9KSVRURVJfRlJBQ1RJT047XG4gIC8vIENsYW1wIGludG8gKDAsIDEpIHNvIHRoZSByZWZyZXNoIHBvaW50IGlzIGFsd2F5cyBiZWZvcmUgZXhwaXJ5IGFuZCBuZXZlciBpblxuICAvLyB0aGUgcGFzdCwgd2hhdGV2ZXIgVFRMIHBsYXRmb3JtIHJldHVybnMuXG4gIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5taW4oMC45NSwgTWF0aC5tYXgoMC4xLCBSRUZSRVNIX0FUX0ZSQUNUSU9OICsgaml0dGVyKSk7XG4gIHJldHVybiBpc3N1ZWRBdCArIGxpZmVNcyAqIGZyYWN0aW9uO1xufVxuXG4vKiogRHJvcCB0aGUgb2xkZXN0IGVudHJpZXMgb25jZSB0aGUgY2FjaGUgaXMgb3ZlciBpdHMgY2FwIChrZXlzIGFyZSBsb25nLWxpdmVkLCB0b2tlbnMgYXJlIG5vdCkuICovXG5mdW5jdGlvbiBldmljdElmRnVsbCgpOiB2b2lkIHtcbiAgaWYgKHRva2VuQ2FjaGUuc2l6ZSA8PSBNQVhfQ0FDSEVEX0tFWVMpIHJldHVybjtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBbaGFzaCwgZW50cnldIG9mIHRva2VuQ2FjaGUpIHtcbiAgICBpZiAoZW50cnkuZXhwaXJlc0F0IDw9IG5vdykgdG9rZW5DYWNoZS5kZWxldGUoaGFzaCk7XG4gIH1cbiAgLy8gTWFwIHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIg4oCUIGRyb3AgZnJvbSB0aGUgZnJvbnQgdW50aWwgYmFjayB1bmRlciB0aGUgY2FwLlxuICB3aGlsZSAodG9rZW5DYWNoZS5zaXplID4gTUFYX0NBQ0hFRF9LRVlTKSB7XG4gICAgY29uc3Qgb2xkZXN0ID0gdG9rZW5DYWNoZS5rZXlzKCkubmV4dCgpO1xuICAgIGlmIChvbGRlc3QuZG9uZSkgYnJlYWs7XG4gICAgdG9rZW5DYWNoZS5kZWxldGUob2xkZXN0LnZhbHVlKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkYXRhPzogeyBhY2Nlc3NUb2tlbj86IHN0cmluZzsgZXhwaXJlc0luPzogbnVtYmVyIH07XG59XG5cbi8qKiBPbmUgcmVhbCByb3VuZC10cmlwIHRvIHBsYXRmb3JtLiBUaHJvd3MgdGhlIHR3byB0eXBlZCBlcnJvcnMgYWJvdmUuICovXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtRXhjaGFuZ2Uoa2V5OiBzdHJpbmcsIGhhc2g6IHN0cmluZywgY2xpZW50VmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeT4ge1xuICBjb25zdCBjbGllbnQgPSBwbGF0Zm9ybUNsaWVudCgpO1xuICBsZXQgc3RhdHVzOiBudW1iZXI7XG4gIGxldCBib2R5OiBFeGNoYW5nZVJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PEV4Y2hhbmdlUmVzcG9uc2U+KCcvYXV0aC90b2tlbi9leGNoYW5nZScsIHsga2V5IH0sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZSwgcm9sZTogJ21lbWJlcicsIG9yZ0lkOiBTWVNURU1fT1JHX0lEIH0pLFxuICAgICAgICAvLyBUaGUgQ0xJIHZlcnNpb24gdGhlIGtleSdzIGhvbGRlciBpcyBjYWxsaW5nIHdpdGggKHZhbGlkYXRlZCBieSB0aGVcbiAgICAgICAgLy8gY2FsbGVyKSwgc28gcGxhdGZvcm0gY2FuIHN0YW1wIGl0IG9uIHRoZSBrZXkgKFwibGFzdCBDTEkgdmVyc2lvblwiKSBmb3JcbiAgICAgICAgLy8gb3JnIGFkbWlucy4gQWJzZW50IOKGkiBwbGF0Zm9ybSBrZWVwcyB0aGUgdmVyc2lvbiBpdCBhbHJlYWR5IGhhcy5cbiAgICAgICAgLi4uKGNsaWVudFZlcnNpb24gPyB7IFtDTElFTlRfVkVSU0lPTl9IRUFERVJdOiBjbGllbnRWZXJzaW9uIH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgLy8gVGhlIGV4Y2hhbmdlIGlzIGEgcHVyZSByZWFkIG9mIHRoZSBrZXkgcmVjb3JkIHBsdXMgYSB0b2tlbiBtaW50IOKAlCBzYWZlIHRvXG4gICAgICAvLyByZXRyeSwgYW5kIGEgbG9zdCByZXRyeSBvbmx5IGNvc3RzIG9uZSBleHRyYSBtaW50LlxuICAgICAgaWRlbXBvdGVudDogdHJ1ZSxcbiAgICB9KTtcbiAgICBzdGF0dXMgPSByZXMuc3RhdHVzQ29kZTtcbiAgICBib2R5ID0gcmVzLmJvZHk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBsb2dnZXIud2FybignQWNjZXNzLWtleSBleGNoYW5nZSBmYWlsZWQgdG8gcmVhY2ggcGxhdGZvcm0nLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcigpO1xuICB9XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDAxIHx8IHN0YXR1cyA9PT0gNDAzIHx8IHN0YXR1cyA9PT0gNDAwIHx8IHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgcmVqZWN0aW9uQ2FjaGUuc2V0KGhhc2gsIERhdGUubm93KCkgKyBORUdBVElWRV9UVExfTVMpO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICdyZWplY3RlZCcgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ3JlamVjdGVkJyB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5UmVqZWN0ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBib2R5Py5kYXRhPy5hY2Nlc3NUb2tlbjtcbiAgaWYgKHN0YXR1cyA+PSA0MDAgfHwgdHlwZW9mIGFjY2Vzc1Rva2VuICE9PSAnc3RyaW5nJyB8fCBhY2Nlc3NUb2tlbi5sZW5ndGggPT09IDApIHtcbiAgICAvLyA0MjkgYW5kIDV4eCBsYW5kIGhlcmU6IHBsYXRmb3JtIGlzIHVwIGJ1dCBjYW4ndCBhbnN3ZXIgcmlnaHQgbm93LCB3aGljaCBpc1xuICAgIC8vIFwidW5rbm93blwiLCBub3QgXCJpbnZhbGlkXCIg4oCUIG5ldmVyIGNhY2hlIGl0IGFzIGEgcmVqZWN0aW9uLlxuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogc3RhdHVzID09PSA0MjkgPyAndGhyb3R0bGVkJyA6ICdzZXJ2ZXJfZXJyb3InIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IHR0bFNlY29uZHMgPSB0eXBlb2YgYm9keT8uZGF0YT8uZXhwaXJlc0luID09PSAnbnVtYmVyJyAmJiBib2R5LmRhdGEuZXhwaXJlc0luID4gMFxuICAgID8gYm9keS5kYXRhLmV4cGlyZXNJblxuICAgIDogNjA7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVudHJ5OiBDYWNoZUVudHJ5ID0ge1xuICAgIHRva2VuOiBhY2Nlc3NUb2tlbixcbiAgICBleHBpcmVzQXQ6IG5vdyArIHR0bFNlY29uZHMgKiAxMDAwLFxuICAgIHJlZnJlc2hBdDogaml0dGVyZWRSZWZyZXNoQXQobm93LCB0dGxTZWNvbmRzKSxcbiAgfTtcbiAgdG9rZW5DYWNoZS5zZXQoaGFzaCwgZW50cnkpO1xuICByZWplY3Rpb25DYWNoZS5kZWxldGUoaGFzaCk7XG4gIGV2aWN0SWZGdWxsKCk7XG4gIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICdzdWNjZXNzJyB9KTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG4vKiogRXhjaGFuZ2UsIHNoYXJpbmcgYSBzaW5nbGUgaW4tZmxpZ2h0IHJvdW5kLXRyaXAgcGVyIGtleS4gKi9cbmZ1bmN0aW9uIGV4Y2hhbmdlT25jZShrZXk6IHN0cmluZywgaGFzaDogc3RyaW5nLCBjbGllbnRWZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxDYWNoZUVudHJ5PiB7XG4gIGNvbnN0IHBlbmRpbmcgPSBpbkZsaWdodC5nZXQoaGFzaCk7XG4gIGlmIChwZW5kaW5nKSByZXR1cm4gcGVuZGluZztcbiAgY29uc3QgcHJvbWlzZSA9IHBlcmZvcm1FeGNoYW5nZShrZXksIGhhc2gsIGNsaWVudFZlcnNpb24pLmZpbmFsbHkoKCkgPT4gaW5GbGlnaHQuZGVsZXRlKGhhc2gpKTtcbiAgaW5GbGlnaHQuc2V0KGhhc2gsIHByb21pc2UpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLyoqXG4gKiBUaGUgSldUIGZvciBga2V5YCwgZnJvbSBjYWNoZSB3aGVuIHBvc3NpYmxlLiBUaHJvd3Mge0BsaW5rIEFwaUtleVJlamVjdGVkRXJyb3J9XG4gKiB3aGVuIHBsYXRmb3JtIHJlZnVzZWQgdGhlIGtleSBhbmQge0BsaW5rIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcn0gd2hlblxuICogaXQgY291bGQgbm90IGJlIGFza2VkLiBgY2xpZW50VmVyc2lvbmAgaXMgdGhlIHByZXNlbnRpbmcgcmVxdWVzdCdzXG4gKiBgWC1QYi1DbGllbnQtVmVyc2lvbmAgKGFscmVhZHkgdmFsaWRhdGVkIOKAlCBzZWUgYGNsaWVudFZlcnNpb25PZmApLCBmb3J3YXJkZWRcbiAqIHNvIHBsYXRmb3JtIGNhbiByZWNvcmQgd2hpY2ggQ0xJIHRoZSBrZXkgaXMgdXNlZCB3aXRoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhjaGFuZ2VBcGlLZXkoa2V5OiBzdHJpbmcsIGNsaWVudFZlcnNpb24/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoYXNoID0gaGFzaEFwaUtleShrZXkpO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gIGNvbnN0IHJlamVjdGVkVW50aWwgPSByZWplY3Rpb25DYWNoZS5nZXQoaGFzaCk7XG4gIGlmIChyZWplY3RlZFVudGlsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocmVqZWN0ZWRVbnRpbCA+IG5vdykge1xuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ3JlamVjdGVkJyB9KTtcbiAgICAgIHRocm93IG5ldyBBcGlLZXlSZWplY3RlZEVycm9yKCk7XG4gICAgfVxuICAgIHJlamVjdGlvbkNhY2hlLmRlbGV0ZShoYXNoKTtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlZCA9IHRva2VuQ2FjaGUuZ2V0KGhhc2gpO1xuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5leHBpcmVzQXQgPiBub3cpIHtcbiAgICBpZiAoY2FjaGVkLnJlZnJlc2hBdCA8PSBub3cgJiYgIWluRmxpZ2h0LmhhcyhoYXNoKSkge1xuICAgICAgLy8gRWFybHkgcmVmcmVzaDogd2FybSB0aGUgY2FjaGUgV0lUSE9VVCBtYWtpbmcgdGhpcyByZXF1ZXN0IHdhaXQuIEEgZmFpbGVkXG4gICAgICAvLyBiYWNrZ3JvdW5kIHJlZnJlc2ggaXMgbm90IHRoaXMgcmVxdWVzdCdzIHByb2JsZW0g4oCUIHRoZSBjYWNoZWQgdG9rZW4gaXNcbiAgICAgIC8vIHN0aWxsIHZhbGlkLCBhbmQgdGhlIG5leHQgcmVxdWVzdCBwYXN0IGV4cGlyeSBleGNoYW5nZXMgaW5saW5lLlxuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ3JlZnJlc2gnIH0pO1xuICAgICAgdm9pZCBleGNoYW5nZU9uY2Uoa2V5LCBoYXNoLCBjbGllbnRWZXJzaW9uKS5jYXRjaCgoKSA9PiB7IC8qIGxvZ2dlZCArIGNvdW50ZWQgaW4gcGVyZm9ybUV4Y2hhbmdlICovIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAnaGl0JyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZC50b2tlbjtcbiAgfVxuXG4gIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdtaXNzJyB9KTtcbiAgcmV0dXJuIChhd2FpdCBleGNoYW5nZU9uY2Uoa2V5LCBoYXNoLCBjbGllbnRWZXJzaW9uKSkudG9rZW47XG59XG5cbi8qKlxuICogRHJvcCBldmVyeSBjYWNoZWQgZXhjaGFuZ2UuIEZvciB0ZXN0cyBhbmQgZm9yIGEgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIGZvcmNlXG4gKiByZS12YWxpZGF0aW9uOyBwcm9kdWN0aW9uIHJlbGllcyBvbiB0aGUgVFRMcyBhYm92ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0QXBpS2V5RXhjaGFuZ2VDYWNoZSgpOiB2b2lkIHtcbiAgdG9rZW5DYWNoZS5jbGVhcigpO1xuICByZWplY3Rpb25DYWNoZS5jbGVhcigpO1xuICBpbkZsaWdodC5jbGVhcigpO1xufVxuIl19
@@ -8,6 +8,8 @@ export interface AuditCorrelation {
8
8
  codebuildBuildId?: string;
9
9
  /** `X-Source-Event-Id` — the upstream event (EventBridge / webhook) being handled. */
10
10
  sourceEventId?: string;
11
+ /** `X-Pb-Client-Version` — the pipeline-manager CLI version that made the call. */
12
+ clientVersion?: string;
11
13
  }
12
14
  /** Background-work identity for events recorded outside any request. */
13
15
  export interface AuditJobContext {
@@ -76,6 +78,7 @@ export declare const AUDIT_CORRELATION_HEADERS: {
76
78
  readonly pipelineExecutionId: 'x-pipeline-execution-id';
77
79
  readonly codebuildBuildId: 'x-codebuild-build-id';
78
80
  readonly sourceEventId: 'x-source-event-id';
81
+ readonly clientVersion: 'x-pb-client-version';
79
82
  };
80
83
  /**
81
84
  * Validate an inbound correlation id (`X-Request-Id`, `X-CodeBuild-Build-Id`, …):
@@ -38,6 +38,7 @@ export const AUDIT_CORRELATION_HEADERS = {
38
38
  pipelineExecutionId: 'x-pipeline-execution-id',
39
39
  codebuildBuildId: 'x-codebuild-build-id',
40
40
  sourceEventId: 'x-source-event-id',
41
+ clientVersion: 'x-pb-client-version',
41
42
  };
42
43
  /** Max length of a stored correlation id / request id. */
43
44
  const MAX_CORRELATION_LEN = 128;
@@ -131,4 +132,4 @@ export function auditAuthBlock(user) {
131
132
  }
132
133
  return Object.keys(block).length > 0 ? block : undefined;
133
134
  }
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtY29udGV4dC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2F1ZGl0LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQXNFNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsRUFBZ0IsQ0FBQztBQUV0RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFJLEdBQWlCLEVBQUUsRUFBVztJQUNuRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsTUFBTSxNQUFNLEdBQWlCLEtBQUs7UUFDaEMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDbEksQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNSLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0s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Q0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2hILENBQUM7SUFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFnQyxFQUFFLENBQUM7UUFDcEUsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEFtYmllbnQgYXVkaXQgY29udGV4dDogdGhlIHJlcXVlc3Qvam9iIGZhY3RzIGV2ZXJ5IGF1ZGl0IGV2ZW50IHNob3VsZCBjYXJyeVxuICogKHJlcXVlc3QgaWQsIHRyYWNlIGlkLCBjbGllbnQgaXAgLyB1c2VyIGFnZW50LCB0aGUgdmVyaWZpZWQgcHJpbmNpcGFsJ3NcbiAqIGNyZWRlbnRpYWwsIGluYm91bmQgY29ycmVsYXRpb24gaWRzKSB3aXRob3V0IGVhY2ggb2YgdGhlIH4xNTAgYHJlY29yZEF1ZGl0YFxuICogY2FsbCBzaXRlcyB0aHJlYWRpbmcgdGhlbSB0aHJvdWdoIGJ5IGhhbmQuXG4gKlxuICogYXBpLXNlcnZlcidzIHJlcXVlc3QgcGlwZWxpbmUgb3BlbnMgYSBzY29wZSBwZXIgaW5ib3VuZCByZXF1ZXN0XG4gKiAoYGF1ZGl0Q29udGV4dEZyb21SZXF1ZXN0YCArIGBydW5XaXRoQXVkaXRDb250ZXh0YCk7IGJhY2tncm91bmQgd29yayBvcGVucyBpdHNcbiAqIG93biB3aXRoIGBydW5XaXRoQXVkaXRDb250ZXh0KHsgam9iOiB7IGpvYklkLCBydW5JZCwgdHJpZ2dlciB9IH0sIGZuKWAuIFRoZVxuICogcmVtb3RlLWF1ZGl0IGNsaWVudCByZWFkcyB0aGUgc2NvcGUgd2hlbiBhbiBldmVudCBpcyBSRUNPUkRFRCBhbmQgc3RhbXBzIHRoZVxuICogcmVzdWx0IG9udG8gdGhlIGV2ZW50IGl0c2VsZiwgc28gYSBzcG9vbGVkIHJlLWRlbGl2ZXJ5IG1pbnV0ZXMgbGF0ZXIgc3RpbGxcbiAqIGNhcnJpZXMgdGhlIGNvbnRleHQgb2YgdGhlIG1vbWVudCBpdCBoYXBwZW5lZC5cbiAqL1xuXG5pbXBvcnQgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJ2FzeW5jX2hvb2tzJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgc2VydmljZU5hbWVPZiB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgaXNTeXN0ZW1PcmdJZCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgdHlwZSB7IEp3dFBheWxvYWQgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuXG4vKiogSW5ib3VuZCBjb3JyZWxhdGlvbiBpZHMgYSBjYWxsZXIgKENMSSwgTGFtYmRhLCBDb2RlQnVpbGQpIG1heSBmb3J3YXJkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdENvcnJlbGF0aW9uIHtcbiAgLyoqIGBYLVBpcGVsaW5lLUV4ZWN1dGlvbi1JZGAg4oCUIHRoZSBDb2RlUGlwZWxpbmUgZXhlY3V0aW9uIHRoYXQgbWFkZSB0aGUgY2FsbC4gKi9cbiAgcGlwZWxpbmVFeGVjdXRpb25JZD86IHN0cmluZztcbiAgLyoqIGBYLUNvZGVCdWlsZC1CdWlsZC1JZGAg4oCUIHRoZSBDb2RlQnVpbGQgYnVpbGQgdGhhdCBtYWRlIHRoZSBjYWxsLiAqL1xuICBjb2RlYnVpbGRCdWlsZElkPzogc3RyaW5nO1xuICAvKiogYFgtU291cmNlLUV2ZW50LUlkYCDigJQgdGhlIHVwc3RyZWFtIGV2ZW50IChFdmVudEJyaWRnZSAvIHdlYmhvb2spIGJlaW5nIGhhbmRsZWQuICovXG4gIHNvdXJjZUV2ZW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBCYWNrZ3JvdW5kLXdvcmsgaWRlbnRpdHkgZm9yIGV2ZW50cyByZWNvcmRlZCBvdXRzaWRlIGFueSByZXF1ZXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdEpvYkNvbnRleHQge1xuICAvKiogU3RhYmxlIGpvYiBuYW1lIChlLmcuIGByZWdpc3RyeS1nY2AsIGB2dWxuLXJlc2NhbmApLiAqL1xuICBqb2JJZD86IHN0cmluZztcbiAgLyoqIFRoaXMgcnVuJ3MgaWQgKGEgQnVsbE1RIGpvYiBpZCwgYSBzd2VlcCdzIHV1aWQpLiAqL1xuICBydW5JZD86IHN0cmluZztcbiAgLyoqIFdoYXQgc3RhcnRlZCBpdDogYHNjaGVkdWxlYCwgYHF1ZXVlYCwgYHN0YXJ0dXBgLCBgbWFudWFsYCwg4oCmICovXG4gIHRyaWdnZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRDb250ZXh0IHtcbiAgcmVxdWVzdElkPzogc3RyaW5nO1xuICB0cmFjZUlkPzogc3RyaW5nO1xuICBpcD86IHN0cmluZztcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xuICBjb3JyZWxhdGlvbj86IEF1ZGl0Q29ycmVsYXRpb247XG4gIGpvYj86IEF1ZGl0Sm9iQ29udGV4dDtcbiAgLyoqXG4gICAqIFRoZSBWRVJJRklFRCBwcmluY2lwYWwgb2YgdGhlIGluYm91bmQgcmVxdWVzdC4gQSBnZXR0ZXIsIG5vdCBhIHZhbHVlOiB0aGVcbiAgICogc2NvcGUgb3BlbnMgYmVmb3JlIGByZXF1aXJlQXV0aGAgcnVucywgc28gYHJlcS51c2VyYCBpcyByZWFkIGF0IHRoZSBtb21lbnRcbiAgICogYW4gZXZlbnQgaXMgcmVjb3JkZWQuXG4gICAqL1xuICBwcmluY2lwYWw/OiAoKSA9PiBKd3RQYXlsb2FkIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBjcmVkZW50aWFsIGJlaGluZCBhbiBhdWRpdGVkIGFjdGlvbiDigJQgcmVzZXJ2ZWQgYGRldGFpbHMuX2F1dGhgLCBzbyBpdCBpc1xuICogY292ZXJlZCBieSB0aGUgYXVkaXQgaGFzaCBjaGFpbiAod2hpY2ggaGFzaGVzIGBkZXRhaWxzYCkuIEJ1aWx0IG9ubHkgZnJvbSBhXG4gKiB2ZXJpZmllZCB0b2tlbiwgbmV2ZXIgZnJvbSBjYWxsZXIgaW5wdXQ7IHRoZSByZW1vdGUtYXVkaXQgY2xpZW50IG92ZXJ3cml0ZXNcbiAqIGFueSBgX2F1dGhgIGEgY2FsbCBzaXRlIHB1dCBpbiBgZGV0YWlsc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRBdXRoQmxvY2sge1xuICBwcmluY2lwYWxUeXBlPzogc3RyaW5nO1xuICAvKiogVGhlIGludGVybmFsIHNlcnZpY2UsIHdoZW4gdGhlIHByaW5jaXBhbCBpcyBhIHNlcnZpY2UgdG9rZW4uICovXG4gIHNlcnZpY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmV2b2NhYmxlIGNyZWRlbnRpYWw6IHRoZSBhY2Nlc3Mga2V5IChQQVQgLyBzZXJ2aWNlLWFjY291bnQga2V5KSB0aGVcbiAgICogdG9rZW4gZGVyaXZlcyBmcm9tIChgcGFyZW50S2V5SWRgKSwgZWxzZSB0aGUgdG9rZW4ncyBvd24gYGp0aWAgKGFuIGV4Y2hhbmdlZFxuICAgKiBrZXkgdG9rZW4ncyBrZXkgaWQsIGFuIGltcGVyc29uYXRpb24gc2Vzc2lvbiBpZCwgYSBzZXJ2aWNlIG1pbnQgaWQpLlxuICAgKi9cbiAga2V5SWQ/OiBzdHJpbmc7XG4gIC8qKiBSZWZyZXNoLXNlc3Npb24gc2xvdCB0aGUgdG9rZW4gd2FzIG1pbnRlZCBvbi4gKi9cbiAgc2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5Vc2U/OiBzdHJpbmc7XG4gIC8qKiBUaGUgdG9rZW4ncyBwZXJtaXNzaW9ucyB3ZXJlIG5hcnJvd2VkIHRvIGEgc3Vic2V0IGF0IGNyZWRlbnRpYWwgY3JlYXRpb24uICovXG4gIHBlcm1pc3Npb25zUmVzdHJpY3RlZD86IHRydWU7XG4gIC8qKiBUaGUgcHJpbmNpcGFsIGlzIGEgcGxhdGZvcm0gc3VwZXJhZG1pbi4gKi9cbiAgc3VwZXJBZG1pbj86IHRydWU7XG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsJ3MgYWN0aXZlIG9yZyBpcyB0aGUgc3lzdGVtIG9yZyAodmVuZG9yIHN0YWZmIGFjdGluZyB0aHJvdWdoIGFcbiAgICogc3lzdGVtLW9yZyBqb2IgUm9sZSkuIFdpdGggYHN1cGVyQWRtaW5gLCB0aGlzIGlzIHdoYXQgbGV0cyB0aGUgcmVtb3RlLWF1ZGl0XG4gICAqIGNsaWVudCBjbGFpbSBhIGNyb3NzLW9yZyBgYWZmZWN0ZWRPcmdJZGAgKHNlZSBgYXVkaXRDcm9zc09yZ2ApLlxuICAgKi9cbiAgc3lzdGVtT3JnPzogdHJ1ZTtcbn1cblxuY29uc3Qgc3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxBdWRpdENvbnRleHQ+KCk7XG5cbi8qKlxuICogUnVuIGBmbmAgaW5zaWRlIGFuIGF1ZGl0LWNvbnRleHQgc2NvcGUuIE5lc3RlZCBzY29wZXMgTUVSR0Ugb250byB0aGUgb3V0ZXJcbiAqIG9uZSAoYSBqb2Igc3RhcnRlZCBpbnNpZGUgYSByZXF1ZXN0IGtlZXBzIHRoZSByZXF1ZXN0J3MgaWQpLCB3aXRoIHRoZSBpbm5lclxuICogZmllbGRzIHdpbm5pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5XaXRoQXVkaXRDb250ZXh0PFQ+KGN0eDogQXVkaXRDb250ZXh0LCBmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBvdXRlciA9IHN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgY29uc3QgbWVyZ2VkOiBBdWRpdENvbnRleHQgPSBvdXRlclxuICAgID8geyAuLi5vdXRlciwgLi4uY3R4LCBjb3JyZWxhdGlvbjogY3R4LmNvcnJlbGF0aW9uID8/IG91dGVyLmNvcnJlbGF0aW9uLCBqb2I6IGN0eC5qb2IgPyB7IC4uLm91dGVyLmpvYiwgLi4uY3R4LmpvYiB9IDogb3V0ZXIuam9iIH1cbiAgICA6IGN0eDtcbiAgcmV0dXJuIHN0b3JhZ2UucnVuKG1lcmdlZCwgZm4pO1xufVxuXG4vKiogVGhlIGFjdGl2ZSBhdWRpdCBjb250ZXh0LCBvciB1bmRlZmluZWQgb3V0c2lkZSBhbnkgc2NvcGUuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudEF1ZGl0Q29udGV4dCgpOiBBdWRpdENvbnRleHQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3RvcmFnZS5nZXRTdG9yZSgpO1xufVxuXG4vKiogSW5ib3VuZCBjb3JyZWxhdGlvbiBoZWFkZXJzIHJlY29yZGVkIGludG8gdGhlIGF1ZGl0IGNvbnRleHQuICovXG5leHBvcnQgY29uc3QgQVVESVRfQ09SUkVMQVRJT05fSEVBREVSUyA9IHtcbiAgcGlwZWxpbmVFeGVjdXRpb25JZDogJ3gtcGlwZWxpbmUtZXhlY3V0aW9uLWlkJyxcbiAgY29kZWJ1aWxkQnVpbGRJZDogJ3gtY29kZWJ1aWxkLWJ1aWxkLWlkJyxcbiAgc291cmNlRXZlbnRJZDogJ3gtc291cmNlLWV2ZW50LWlkJyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBNYXggbGVuZ3RoIG9mIGEgc3RvcmVkIGNvcnJlbGF0aW9uIGlkIC8gcmVxdWVzdCBpZC4gKi9cbmNvbnN0IE1BWF9DT1JSRUxBVElPTl9MRU4gPSAxMjg7XG4vKiogSWRzIGFyZSBvcGFxdWUgdG9rZW5zOiB1dWlkcywgYHByb2plY3Q6dXVpZGAgYnVpbGQgaWRzLCBVTElEcy4gTm90aGluZyBlbHNlIGlzIHN0b3JlZC4gKi9cbmNvbnN0IENPUlJFTEFUSU9OX0lEID0gL15bQS1aYS16MC05Ll86L0ArPS1dKyQvO1xuLyoqIEEgYmFyZSBBV1MgYWNjb3VudCBpZC4gKi9cbmNvbnN0IEJBUkVfQUNDT1VOVF9JRCA9IC9eXFxkezEyfSQvO1xuXG4vKiogTWF4IHN0b3JlZCBVc2VyLUFnZW50IGxlbmd0aCDigJQgYSBob3N0aWxlIGhlYWRlciBtdXN0IG5vdCBibG9hdCBhdWRpdCByb3dzLiAqL1xuY29uc3QgTUFYX1VTRVJfQUdFTlRfTEVOID0gNTEyO1xuLyoqIEMwICsgREVMICsgQzEgY29udHJvbCBjaGFyYWN0ZXJzLCByZXBsYWNlZCBzbyBhIFVBIGNhbid0IGluamVjdCBpbnRvIHRoZSBVSS9DU1YgZXhwb3J0LiAqL1xuY29uc3QgQ09OVFJPTF9DSEFSUyA9IG5ldyBSZWdFeHAoJ1tcXFxcdTAwMDAtXFxcXHUwMDFmXFxcXHUwMDdmLVxcXFx1MDA5Zl0nLCAnZycpO1xuXG5mdW5jdGlvbiBmaXJzdEhlYWRlcihyYXc6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBpbmJvdW5kIGNvcnJlbGF0aW9uIGlkIChgWC1SZXF1ZXN0LUlkYCwgYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCwg4oCmKTpcbiAqIGEgYm91bmRlZCBvcGFxdWUgdG9rZW4sIGVsc2UgYHVuZGVmaW5lZGAg4oCUIGFuIGludmFsaWQgdmFsdWUgaXMgZHJvcHBlZCwgbmV2ZXJcbiAqIHRydW5jYXRlZCBpbnRvIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBkaWZmZXJlbnQgaWQuXG4gKlxuICogTm8gQVdTIGFjY291bnQgaWQgaXMgZXZlciBzdG9yZWQ6IGFuIEFSTiAoYSBDb2RlQnVpbGQgYnVpbGQgQVJOLCBzYXkpIGhhcyBpdHNcbiAqIGFjY291bnQgc2VnbWVudCBlbXB0aWVkLCBhbmQgYSBiYXJlIDEyLWRpZ2l0IHZhbHVlIGlzIHJlZnVzZWQuIFRoZSBnZW5lcmljXG4gKiAxMi1kaWdpdC1ydW4gc2NydWIgaXMgTk9UIHVzZWQgaGVyZSDigJQgaXQgd291bGQgcmVkYWN0IHRoZSBhbGwtZGlnaXQgZmluYWxcbiAqIGdyb3VwIG9mIHJvdWdobHkgb25lIHV1aWQgaW4gdGhyZWUgaHVuZHJlZCwgY29ycnVwdGluZyB0aGUgaWQgaXQgZXhpc3RzIHRvXG4gKiBjb3JyZWxhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQocmF3OiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiByYXcgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IHJhdy50cmltKCk7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUubGVuZ3RoID4gTUFYX0NPUlJFTEFUSU9OX0xFTiB8fCAhQ09SUkVMQVRJT05fSUQudGVzdCh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChCQVJFX0FDQ09VTlRfSUQudGVzdCh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICgvXmFybjovaS50ZXN0KHZhbHVlKSkge1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gNCkgcGFydHNbNF0gPSAnJztcbiAgICByZXR1cm4gcGFydHMuam9pbignOicpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIFN0cmlwIGNvbnRyb2wgY2hhcmFjdGVycyBmcm9tIGEgVXNlci1BZ2VudCBhbmQgY2FwIGl0cyBsZW5ndGg7IHVuZGVmaW5lZCB3aGVuIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplVXNlckFnZW50KHJhdzogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJyB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjbGVhbmVkID0gcmF3LnJlcGxhY2UoQ09OVFJPTF9DSEFSUywgJyAnKS50cmltKCk7XG4gIHJldHVybiBjbGVhbmVkLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGNsZWFuZWQuc2xpY2UoMCwgTUFYX1VTRVJfQUdFTlRfTEVOKTtcbn1cblxuLyoqXG4gKiBUaGUgYXVkaXQgY29udGV4dCBmb3IgYW4gaW5ib3VuZCByZXF1ZXN0LiBgcmVxdWVzdElkYCBpcyB0aGUgaWQgdGhlXG4gKiByZXF1ZXN0LWlkIG1pZGRsZXdhcmUgcmVzb2x2ZWQgKHZhbGlkYXRlZCBpbmJvdW5kIGBYLVJlcXVlc3QtSWRgLCBlbHNlIGEgZnJlc2hcbiAqIHV1aWQpOyB0aGUgcHJpbmNpcGFsIGlzIHJlYWQgbGF6aWx5IGZyb20gYHJlcS51c2VyYCAoYXV0aCBydW5zIGxhdGVyIGluIHRoZVxuICogY2hhaW4pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRDb250ZXh0RnJvbVJlcXVlc3QocmVxOiBSZXF1ZXN0LCBpZHM6IHsgcmVxdWVzdElkPzogc3RyaW5nOyB0cmFjZUlkPzogc3RyaW5nIH0gPSB7fSk6IEF1ZGl0Q29udGV4dCB7XG4gIGNvbnN0IGNvcnJlbGF0aW9uOiBBdWRpdENvcnJlbGF0aW9uID0ge307XG4gIGZvciAoY29uc3QgW2ZpZWxkLCBoZWFkZXJdIG9mIE9iamVjdC5lbnRyaWVzKEFVRElUX0NPUlJFTEFUSU9OX0hFQURFUlMpIGFzIEFycmF5PFtrZXlvZiBBdWRpdENvcnJlbGF0aW9uLCBzdHJpbmddPikge1xuICAgIGNvbnN0IHZhbHVlID0gc2FuaXRpemVDb3JyZWxhdGlvbklkKGZpcnN0SGVhZGVyKHJlcS5oZWFkZXJzW2hlYWRlcl0pKTtcbiAgICBpZiAodmFsdWUpIGNvcnJlbGF0aW9uW2ZpZWxkXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdElkOiBpZHMucmVxdWVzdElkLFxuICAgIHRyYWNlSWQ6IGlkcy50cmFjZUlkLFxuICAgIGlwOiByZXEuaXAsXG4gICAgdXNlckFnZW50OiBzYW5pdGl6ZVVzZXJBZ2VudChmaXJzdEhlYWRlcihyZXEuaGVhZGVyc1sndXNlci1hZ2VudCddKSksXG4gICAgY29ycmVsYXRpb246IE9iamVjdC5rZXlzKGNvcnJlbGF0aW9uKS5sZW5ndGggPiAwID8gY29ycmVsYXRpb24gOiB1bmRlZmluZWQsXG4gICAgcHJpbmNpcGFsOiAoKSA9PiByZXEudXNlcixcbiAgfTtcbn1cblxuLyoqIFRoZSBgX2F1dGhgIGJsb2NrIGZvciBhIHZlcmlmaWVkIHByaW5jaXBhbCAodW5kZWZpbmVkIHdoZW4gdGhlcmUgaXMgbm9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRBdXRoQmxvY2sodXNlcjogSnd0UGF5bG9hZCB8IHVuZGVmaW5lZCk6IEF1ZGl0QXV0aEJsb2NrIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF1c2VyKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBibG9jazogQXVkaXRBdXRoQmxvY2sgPSB7XG4gICAgcHJpbmNpcGFsVHlwZTogdXNlci5wcmluY2lwYWxUeXBlLFxuICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lT2YodXNlciksXG4gICAga2V5SWQ6IHVzZXIucGFyZW50S2V5SWQgPz8gdXNlci5qdGksXG4gICAgc2lkOiB1c2VyLnNpZCxcbiAgICBzY29wZTogdXNlci5zY29wZSxcbiAgICB0b2tlblVzZTogdXNlci50b2tlbl91c2UsXG4gICAgLi4uKHVzZXIucGVybWlzc2lvbnNSZXN0cmljdGVkID09PSB0cnVlID8geyBwZXJtaXNzaW9uc1Jlc3RyaWN0ZWQ6IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgICAuLi4odXNlci5pc1N1cGVyQWRtaW4gPT09IHRydWUgPyB7IHN1cGVyQWRtaW46IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgICAvLyBBIFNFUlZJQ0UgdG9rZW4gaW4gdGhlIHN5c3RlbSBvcmcgaXMgdGhlIHBsYXRmb3JtJ3Mgb3duIHBsdW1iaW5nLCBub3Qgc3RhZmZcbiAgICAvLyBhY3Rpbmcgb24gYSB0ZW5hbnQ7IG9ubHkgaHVtYW4gLyBzZXJ2aWNlLWFjY291bnQgcHJpbmNpcGFscyBjb3VudC5cbiAgICAuLi4odXNlci5wcmluY2lwYWxUeXBlICE9PSAnc2VydmljZScgJiYgaXNTeXN0ZW1PcmdJZCh1c2VyLm9yZ2FuaXphdGlvbklkKSA/IHsgc3lzdGVtT3JnOiB0cnVlIGFzIGNvbnN0IH0gOiB7fSksXG4gIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJsb2NrKSBhcyBBcnJheTxrZXlvZiBBdWRpdEF1dGhCbG9jaz4pIHtcbiAgICBpZiAoYmxvY2tba2V5XSA9PT0gdW5kZWZpbmVkKSBkZWxldGUgYmxvY2tba2V5XTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoYmxvY2spLmxlbmd0aCA+IDAgPyBibG9jayA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtY29udGV4dC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2F1ZGl0LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQXdFNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsRUFBZ0IsQ0FBQztBQUV0RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFJLEdBQWlCLEVBQUUsRUFBVztJQUNuRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsTUFBTSxNQUFNLEdBQWlCLEtBQUs7UUFDaEMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDbEksQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNSLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0s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QUM5RSxxRUFBcUU7UUFDckUsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDaEgsQ0FBQztJQUNGLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQWdDLEVBQUUsQ0FBQztRQUNwRSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQW1iaWVudCBhdWRpdCBjb250ZXh0OiB0aGUgcmVxdWVzdC9qb2IgZmFjdHMgZXZlcnkgYXVkaXQgZXZlbnQgc2hvdWxkIGNhcnJ5XG4gKiAocmVxdWVzdCBpZCwgdHJhY2UgaWQsIGNsaWVudCBpcCAvIHVzZXIgYWdlbnQsIHRoZSB2ZXJpZmllZCBwcmluY2lwYWwnc1xuICogY3JlZGVudGlhbCwgaW5ib3VuZCBjb3JyZWxhdGlvbiBpZHMpIHdpdGhvdXQgZWFjaCBvZiB0aGUgfjE1MCBgcmVjb3JkQXVkaXRgXG4gKiBjYWxsIHNpdGVzIHRocmVhZGluZyB0aGVtIHRocm91Z2ggYnkgaGFuZC5cbiAqXG4gKiBhcGktc2VydmVyJ3MgcmVxdWVzdCBwaXBlbGluZSBvcGVucyBhIHNjb3BlIHBlciBpbmJvdW5kIHJlcXVlc3RcbiAqIChgYXVkaXRDb250ZXh0RnJvbVJlcXVlc3RgICsgYHJ1bldpdGhBdWRpdENvbnRleHRgKTsgYmFja2dyb3VuZCB3b3JrIG9wZW5zIGl0c1xuICogb3duIHdpdGggYHJ1bldpdGhBdWRpdENvbnRleHQoeyBqb2I6IHsgam9iSWQsIHJ1bklkLCB0cmlnZ2VyIH0gfSwgZm4pYC4gVGhlXG4gKiByZW1vdGUtYXVkaXQgY2xpZW50IHJlYWRzIHRoZSBzY29wZSB3aGVuIGFuIGV2ZW50IGlzIFJFQ09SREVEIGFuZCBzdGFtcHMgdGhlXG4gKiByZXN1bHQgb250byB0aGUgZXZlbnQgaXRzZWxmLCBzbyBhIHNwb29sZWQgcmUtZGVsaXZlcnkgbWludXRlcyBsYXRlciBzdGlsbFxuICogY2FycmllcyB0aGUgY29udGV4dCBvZiB0aGUgbW9tZW50IGl0IGhhcHBlbmVkLlxuICovXG5cbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSAnYXN5bmNfaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBzZXJ2aWNlTmFtZU9mIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgeyBpc1N5c3RlbU9yZ0lkIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zeXN0ZW0tb3JnLmpzJztcbmltcG9ydCB0eXBlIHsgSnd0UGF5bG9hZCB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5cbi8qKiBJbmJvdW5kIGNvcnJlbGF0aW9uIGlkcyBhIGNhbGxlciAoQ0xJLCBMYW1iZGEsIENvZGVCdWlsZCkgbWF5IGZvcndhcmQuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29ycmVsYXRpb24ge1xuICAvKiogYFgtUGlwZWxpbmUtRXhlY3V0aW9uLUlkYCDigJQgdGhlIENvZGVQaXBlbGluZSBleGVjdXRpb24gdGhhdCBtYWRlIHRoZSBjYWxsLiAqL1xuICBwaXBlbGluZUV4ZWN1dGlvbklkPzogc3RyaW5nO1xuICAvKiogYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCDigJQgdGhlIENvZGVCdWlsZCBidWlsZCB0aGF0IG1hZGUgdGhlIGNhbGwuICovXG4gIGNvZGVidWlsZEJ1aWxkSWQ/OiBzdHJpbmc7XG4gIC8qKiBgWC1Tb3VyY2UtRXZlbnQtSWRgIOKAlCB0aGUgdXBzdHJlYW0gZXZlbnQgKEV2ZW50QnJpZGdlIC8gd2ViaG9vaykgYmVpbmcgaGFuZGxlZC4gKi9cbiAgc291cmNlRXZlbnRJZD86IHN0cmluZztcbiAgLyoqIGBYLVBiLUNsaWVudC1WZXJzaW9uYCDigJQgdGhlIHBpcGVsaW5lLW1hbmFnZXIgQ0xJIHZlcnNpb24gdGhhdCBtYWRlIHRoZSBjYWxsLiAqL1xuICBjbGllbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogQmFja2dyb3VuZC13b3JrIGlkZW50aXR5IGZvciBldmVudHMgcmVjb3JkZWQgb3V0c2lkZSBhbnkgcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRKb2JDb250ZXh0IHtcbiAgLyoqIFN0YWJsZSBqb2IgbmFtZSAoZS5nLiBgcmVnaXN0cnktZ2NgLCBgdnVsbi1yZXNjYW5gKS4gKi9cbiAgam9iSWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIHJ1bidzIGlkIChhIEJ1bGxNUSBqb2IgaWQsIGEgc3dlZXAncyB1dWlkKS4gKi9cbiAgcnVuSWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGF0IHN0YXJ0ZWQgaXQ6IGBzY2hlZHVsZWAsIGBxdWV1ZWAsIGBzdGFydHVwYCwgYG1hbnVhbGAsIOKApiAqL1xuICB0cmlnZ2VyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29udGV4dCB7XG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgdHJhY2VJZD86IHN0cmluZztcbiAgaXA/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgY29ycmVsYXRpb24/OiBBdWRpdENvcnJlbGF0aW9uO1xuICBqb2I/OiBBdWRpdEpvYkNvbnRleHQ7XG4gIC8qKlxuICAgKiBUaGUgVkVSSUZJRUQgcHJpbmNpcGFsIG9mIHRoZSBpbmJvdW5kIHJlcXVlc3QuIEEgZ2V0dGVyLCBub3QgYSB2YWx1ZTogdGhlXG4gICAqIHNjb3BlIG9wZW5zIGJlZm9yZSBgcmVxdWlyZUF1dGhgIHJ1bnMsIHNvIGByZXEudXNlcmAgaXMgcmVhZCBhdCB0aGUgbW9tZW50XG4gICAqIGFuIGV2ZW50IGlzIHJlY29yZGVkLlxuICAgKi9cbiAgcHJpbmNpcGFsPzogKCkgPT4gSnd0UGF5bG9hZCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgY3JlZGVudGlhbCBiZWhpbmQgYW4gYXVkaXRlZCBhY3Rpb24g4oCUIHJlc2VydmVkIGBkZXRhaWxzLl9hdXRoYCwgc28gaXQgaXNcbiAqIGNvdmVyZWQgYnkgdGhlIGF1ZGl0IGhhc2ggY2hhaW4gKHdoaWNoIGhhc2hlcyBgZGV0YWlsc2ApLiBCdWlsdCBvbmx5IGZyb20gYVxuICogdmVyaWZpZWQgdG9rZW4sIG5ldmVyIGZyb20gY2FsbGVyIGlucHV0OyB0aGUgcmVtb3RlLWF1ZGl0IGNsaWVudCBvdmVyd3JpdGVzXG4gKiBhbnkgYF9hdXRoYCBhIGNhbGwgc2l0ZSBwdXQgaW4gYGRldGFpbHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0QXV0aEJsb2NrIHtcbiAgcHJpbmNpcGFsVHlwZT86IHN0cmluZztcbiAgLyoqIFRoZSBpbnRlcm5hbCBzZXJ2aWNlLCB3aGVuIHRoZSBwcmluY2lwYWwgaXMgYSBzZXJ2aWNlIHRva2VuLiAqL1xuICBzZXJ2aWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJldm9jYWJsZSBjcmVkZW50aWFsOiB0aGUgYWNjZXNzIGtleSAoUEFUIC8gc2VydmljZS1hY2NvdW50IGtleSkgdGhlXG4gICAqIHRva2VuIGRlcml2ZXMgZnJvbSAoYHBhcmVudEtleUlkYCksIGVsc2UgdGhlIHRva2VuJ3Mgb3duIGBqdGlgIChhbiBleGNoYW5nZWRcbiAgICoga2V5IHRva2VuJ3Mga2V5IGlkLCBhbiBpbXBlcnNvbmF0aW9uIHNlc3Npb24gaWQsIGEgc2VydmljZSBtaW50IGlkKS5cbiAgICovXG4gIGtleUlkPzogc3RyaW5nO1xuICAvKiogUmVmcmVzaC1zZXNzaW9uIHNsb3QgdGhlIHRva2VuIHdhcyBtaW50ZWQgb24uICovXG4gIHNpZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuVXNlPzogc3RyaW5nO1xuICAvKiogVGhlIHRva2VuJ3MgcGVybWlzc2lvbnMgd2VyZSBuYXJyb3dlZCB0byBhIHN1YnNldCBhdCBjcmVkZW50aWFsIGNyZWF0aW9uLiAqL1xuICBwZXJtaXNzaW9uc1Jlc3RyaWN0ZWQ/OiB0cnVlO1xuICAvKiogVGhlIHByaW5jaXBhbCBpcyBhIHBsYXRmb3JtIHN1cGVyYWRtaW4uICovXG4gIHN1cGVyQWRtaW4/OiB0cnVlO1xuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCdzIGFjdGl2ZSBvcmcgaXMgdGhlIHN5c3RlbSBvcmcgKHZlbmRvciBzdGFmZiBhY3RpbmcgdGhyb3VnaCBhXG4gICAqIHN5c3RlbS1vcmcgam9iIFJvbGUpLiBXaXRoIGBzdXBlckFkbWluYCwgdGhpcyBpcyB3aGF0IGxldHMgdGhlIHJlbW90ZS1hdWRpdFxuICAgKiBjbGllbnQgY2xhaW0gYSBjcm9zcy1vcmcgYGFmZmVjdGVkT3JnSWRgIChzZWUgYGF1ZGl0Q3Jvc3NPcmdgKS5cbiAgICovXG4gIHN5c3RlbU9yZz86IHRydWU7XG59XG5cbmNvbnN0IHN0b3JhZ2UgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2U8QXVkaXRDb250ZXh0PigpO1xuXG4vKipcbiAqIFJ1biBgZm5gIGluc2lkZSBhbiBhdWRpdC1jb250ZXh0IHNjb3BlLiBOZXN0ZWQgc2NvcGVzIE1FUkdFIG9udG8gdGhlIG91dGVyXG4gKiBvbmUgKGEgam9iIHN0YXJ0ZWQgaW5zaWRlIGEgcmVxdWVzdCBrZWVwcyB0aGUgcmVxdWVzdCdzIGlkKSwgd2l0aCB0aGUgaW5uZXJcbiAqIGZpZWxkcyB3aW5uaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuV2l0aEF1ZGl0Q29udGV4dDxUPihjdHg6IEF1ZGl0Q29udGV4dCwgZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3Qgb3V0ZXIgPSBzdG9yYWdlLmdldFN0b3JlKCk7XG4gIGNvbnN0IG1lcmdlZDogQXVkaXRDb250ZXh0ID0gb3V0ZXJcbiAgICA/IHsgLi4ub3V0ZXIsIC4uLmN0eCwgY29ycmVsYXRpb246IGN0eC5jb3JyZWxhdGlvbiA/PyBvdXRlci5jb3JyZWxhdGlvbiwgam9iOiBjdHguam9iID8geyAuLi5vdXRlci5qb2IsIC4uLmN0eC5qb2IgfSA6IG91dGVyLmpvYiB9XG4gICAgOiBjdHg7XG4gIHJldHVybiBzdG9yYWdlLnJ1bihtZXJnZWQsIGZuKTtcbn1cblxuLyoqIFRoZSBhY3RpdmUgYXVkaXQgY29udGV4dCwgb3IgdW5kZWZpbmVkIG91dHNpZGUgYW55IHNjb3BlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRBdWRpdENvbnRleHQoKTogQXVkaXRDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0b3JhZ2UuZ2V0U3RvcmUoKTtcbn1cblxuLyoqIEluYm91bmQgY29ycmVsYXRpb24gaGVhZGVycyByZWNvcmRlZCBpbnRvIHRoZSBhdWRpdCBjb250ZXh0LiAqL1xuZXhwb3J0IGNvbnN0IEFVRElUX0NPUlJFTEFUSU9OX0hFQURFUlMgPSB7XG4gIHBpcGVsaW5lRXhlY3V0aW9uSWQ6ICd4LXBpcGVsaW5lLWV4ZWN1dGlvbi1pZCcsXG4gIGNvZGVidWlsZEJ1aWxkSWQ6ICd4LWNvZGVidWlsZC1idWlsZC1pZCcsXG4gIHNvdXJjZUV2ZW50SWQ6ICd4LXNvdXJjZS1ldmVudC1pZCcsXG4gIGNsaWVudFZlcnNpb246ICd4LXBiLWNsaWVudC12ZXJzaW9uJyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBNYXggbGVuZ3RoIG9mIGEgc3RvcmVkIGNvcnJlbGF0aW9uIGlkIC8gcmVxdWVzdCBpZC4gKi9cbmNvbnN0IE1BWF9DT1JSRUxBVElPTl9MRU4gPSAxMjg7XG4vKiogSWRzIGFyZSBvcGFxdWUgdG9rZW5zOiB1dWlkcywgYHByb2plY3Q6dXVpZGAgYnVpbGQgaWRzLCBVTElEcy4gTm90aGluZyBlbHNlIGlzIHN0b3JlZC4gKi9cbmNvbnN0IENPUlJFTEFUSU9OX0lEID0gL15bQS1aYS16MC05Ll86L0ArPS1dKyQvO1xuLyoqIEEgYmFyZSBBV1MgYWNjb3VudCBpZC4gKi9cbmNvbnN0IEJBUkVfQUNDT1VOVF9JRCA9IC9eXFxkezEyfSQvO1xuXG4vKiogTWF4IHN0b3JlZCBVc2VyLUFnZW50IGxlbmd0aCDigJQgYSBob3N0aWxlIGhlYWRlciBtdXN0IG5vdCBibG9hdCBhdWRpdCByb3dzLiAqL1xuY29uc3QgTUFYX1VTRVJfQUdFTlRfTEVOID0gNTEyO1xuLyoqIEMwICsgREVMICsgQzEgY29udHJvbCBjaGFyYWN0ZXJzLCByZXBsYWNlZCBzbyBhIFVBIGNhbid0IGluamVjdCBpbnRvIHRoZSBVSS9DU1YgZXhwb3J0LiAqL1xuY29uc3QgQ09OVFJPTF9DSEFSUyA9IG5ldyBSZWdFeHAoJ1tcXFxcdTAwMDAtXFxcXHUwMDFmXFxcXHUwMDdmLVxcXFx1MDA5Zl0nLCAnZycpO1xuXG5mdW5jdGlvbiBmaXJzdEhlYWRlcihyYXc6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBpbmJvdW5kIGNvcnJlbGF0aW9uIGlkIChgWC1SZXF1ZXN0LUlkYCwgYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCwg4oCmKTpcbiAqIGEgYm91bmRlZCBvcGFxdWUgdG9rZW4sIGVsc2UgYHVuZGVmaW5lZGAg4oCUIGFuIGludmFsaWQgdmFsdWUgaXMgZHJvcHBlZCwgbmV2ZXJcbiAqIHRydW5jYXRlZCBpbnRvIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBkaWZmZXJlbnQgaWQuXG4gKlxuICogTm8gQVdTIGFjY291bnQgaWQgaXMgZXZlciBzdG9yZWQ6IGFuIEFSTiAoYSBDb2RlQnVpbGQgYnVpbGQgQVJOLCBzYXkpIGhhcyBpdHNcbiAqIGFjY291bnQgc2VnbWVudCBlbXB0aWVkLCBhbmQgYSBiYXJlIDEyLWRpZ2l0IHZhbHVlIGlzIHJlZnVzZWQuIFRoZSBnZW5lcmljXG4gKiAxMi1kaWdpdC1ydW4gc2NydWIgaXMgTk9UIHVzZWQgaGVyZSDigJQgaXQgd291bGQgcmVkYWN0IHRoZSBhbGwtZGlnaXQgZmluYWxcbiAqIGdyb3VwIG9mIHJvdWdobHkgb25lIHV1aWQgaW4gdGhyZWUgaHVuZHJlZCwgY29ycnVwdGluZyB0aGUgaWQgaXQgZXhpc3RzIHRvXG4gKiBjb3JyZWxhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQocmF3OiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiByYXcgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IHJhdy50cmltKCk7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUubGVuZ3RoID4gTUFYX0NPUlJFTEFUSU9OX0xFTiB8fCAhQ09SUkVMQVRJT05fSUQudGVzdCh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChCQVJFX0FDQ09VTlRfSUQudGVzdCh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICgvXmFybjovaS50ZXN0KHZhbHVlKSkge1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gNCkgcGFydHNbNF0gPSAnJztcbiAgICByZXR1cm4gcGFydHMuam9pbignOicpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIFN0cmlwIGNvbnRyb2wgY2hhcmFjdGVycyBmcm9tIGEgVXNlci1BZ2VudCBhbmQgY2FwIGl0cyBsZW5ndGg7IHVuZGVmaW5lZCB3aGVuIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplVXNlckFnZW50KHJhdzogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJyB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjbGVhbmVkID0gcmF3LnJlcGxhY2UoQ09OVFJPTF9DSEFSUywgJyAnKS50cmltKCk7XG4gIHJldHVybiBjbGVhbmVkLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGNsZWFuZWQuc2xpY2UoMCwgTUFYX1VTRVJfQUdFTlRfTEVOKTtcbn1cblxuLyoqXG4gKiBUaGUgYXVkaXQgY29udGV4dCBmb3IgYW4gaW5ib3VuZCByZXF1ZXN0LiBgcmVxdWVzdElkYCBpcyB0aGUgaWQgdGhlXG4gKiByZXF1ZXN0LWlkIG1pZGRsZXdhcmUgcmVzb2x2ZWQgKHZhbGlkYXRlZCBpbmJvdW5kIGBYLVJlcXVlc3QtSWRgLCBlbHNlIGEgZnJlc2hcbiAqIHV1aWQpOyB0aGUgcHJpbmNpcGFsIGlzIHJlYWQgbGF6aWx5IGZyb20gYHJlcS51c2VyYCAoYXV0aCBydW5zIGxhdGVyIGluIHRoZVxuICogY2hhaW4pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRDb250ZXh0RnJvbVJlcXVlc3QocmVxOiBSZXF1ZXN0LCBpZHM6IHsgcmVxdWVzdElkPzogc3RyaW5nOyB0cmFjZUlkPzogc3RyaW5nIH0gPSB7fSk6IEF1ZGl0Q29udGV4dCB7XG4gIGNvbnN0IGNvcnJlbGF0aW9uOiBBdWRpdENvcnJlbGF0aW9uID0ge307XG4gIGZvciAoY29uc3QgW2ZpZWxkLCBoZWFkZXJdIG9mIE9iamVjdC5lbnRyaWVzKEFVRElUX0NPUlJFTEFUSU9OX0hFQURFUlMpIGFzIEFycmF5PFtrZXlvZiBBdWRpdENvcnJlbGF0aW9uLCBzdHJpbmddPikge1xuICAgIGNvbnN0IHZhbHVlID0gc2FuaXRpemVDb3JyZWxhdGlvbklkKGZpcnN0SGVhZGVyKHJlcS5oZWFkZXJzW2hlYWRlcl0pKTtcbiAgICBpZiAodmFsdWUpIGNvcnJlbGF0aW9uW2ZpZWxkXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdElkOiBpZHMucmVxdWVzdElkLFxuICAgIHRyYWNlSWQ6IGlkcy50cmFjZUlkLFxuICAgIGlwOiByZXEuaXAsXG4gICAgdXNlckFnZW50OiBzYW5pdGl6ZVVzZXJBZ2VudChmaXJzdEhlYWRlcihyZXEuaGVhZGVyc1sndXNlci1hZ2VudCddKSksXG4gICAgY29ycmVsYXRpb246IE9iamVjdC5rZXlzKGNvcnJlbGF0aW9uKS5sZW5ndGggPiAwID8gY29ycmVsYXRpb24gOiB1bmRlZmluZWQsXG4gICAgcHJpbmNpcGFsOiAoKSA9PiByZXEudXNlcixcbiAgfTtcbn1cblxuLyoqIFRoZSBgX2F1dGhgIGJsb2NrIGZvciBhIHZlcmlmaWVkIHByaW5jaXBhbCAodW5kZWZpbmVkIHdoZW4gdGhlcmUgaXMgbm9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRBdXRoQmxvY2sodXNlcjogSnd0UGF5bG9hZCB8IHVuZGVmaW5lZCk6IEF1ZGl0QXV0aEJsb2NrIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF1c2VyKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBibG9jazogQXVkaXRBdXRoQmxvY2sgPSB7XG4gICAgcHJpbmNpcGFsVHlwZTogdXNlci5wcmluY2lwYWxUeXBlLFxuICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lT2YodXNlciksXG4gICAga2V5SWQ6IHVzZXIucGFyZW50S2V5SWQgPz8gdXNlci5qdGksXG4gICAgc2lkOiB1c2VyLnNpZCxcbiAgICBzY29wZTogdXNlci5zY29wZSxcbiAgICB0b2tlblVzZTogdXNlci50b2tlbl91c2UsXG4gICAgLi4uKHVzZXIucGVybWlzc2lvbnNSZXN0cmljdGVkID09PSB0cnVlID8geyBwZXJtaXNzaW9uc1Jlc3RyaWN0ZWQ6IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgICAuLi4odXNlci5pc1N1cGVyQWRtaW4gPT09IHRydWUgPyB7IHN1cGVyQWRtaW46IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgICAvLyBBIFNFUlZJQ0UgdG9rZW4gaW4gdGhlIHN5c3RlbSBvcmcgaXMgdGhlIHBsYXRmb3JtJ3Mgb3duIHBsdW1iaW5nLCBub3Qgc3RhZmZcbiAgICAvLyBhY3Rpbmcgb24gYSB0ZW5hbnQ7IG9ubHkgaHVtYW4gLyBzZXJ2aWNlLWFjY291bnQgcHJpbmNpcGFscyBjb3VudC5cbiAgICAuLi4odXNlci5wcmluY2lwYWxUeXBlICE9PSAnc2VydmljZScgJiYgaXNTeXN0ZW1PcmdJZCh1c2VyLm9yZ2FuaXphdGlvbklkKSA/IHsgc3lzdGVtT3JnOiB0cnVlIGFzIGNvbnN0IH0gOiB7fSksXG4gIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJsb2NrKSBhcyBBcnJheTxrZXlvZiBBdWRpdEF1dGhCbG9jaz4pIHtcbiAgICBpZiAoYmxvY2tba2V5XSA9PT0gdW5kZWZpbmVkKSBkZWxldGUgYmxvY2tba2V5XTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoYmxvY2spLmxlbmd0aCA+IDAgPyBibG9jayA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -82,6 +82,9 @@ export declare enum ErrorCode {
82
82
  TEMPLATE_CONTRACT_VIOLATION = "TEMPLATE_CONTRACT_VIOLATION",
83
83
  TEMPLATE_SIZE_EXCEEDED = "TEMPLATE_SIZE_EXCEEDED",
84
84
  TEMPLATE_VALIDATION_FAILED = "TEMPLATE_VALIDATION_FAILED",
85
+ /** The pipeline-manager CLI is older than the platform's
86
+ * `PIPELINE_MANAGER_MIN_VERSION`; the fix is `pipeline-manager --upgrade`. */
87
+ CLIENT_UPGRADE_REQUIRED = "CLIENT_UPGRADE_REQUIRED",
85
88
  QUOTA_EXCEEDED = "QUOTA_EXCEEDED",
86
89
  /** The caller's per-member share of the org's `aiCalls` (org setting
87
90
  * `aiCallsPerMemberPct`) is spent for this period — the org itself may have headroom. */
@@ -89,6 +89,10 @@ export var ErrorCode;
89
89
  ErrorCode["TEMPLATE_CONTRACT_VIOLATION"] = "TEMPLATE_CONTRACT_VIOLATION";
90
90
  ErrorCode["TEMPLATE_SIZE_EXCEEDED"] = "TEMPLATE_SIZE_EXCEEDED";
91
91
  ErrorCode["TEMPLATE_VALIDATION_FAILED"] = "TEMPLATE_VALIDATION_FAILED";
92
+ // Client too old (426)
93
+ /** The pipeline-manager CLI is older than the platform's
94
+ * `PIPELINE_MANAGER_MIN_VERSION`; the fix is `pipeline-manager --upgrade`. */
95
+ ErrorCode["CLIENT_UPGRADE_REQUIRED"] = "CLIENT_UPGRADE_REQUIRED";
92
96
  // Quota/Rate limit errors (429)
93
97
  ErrorCode["QUOTA_EXCEEDED"] = "QUOTA_EXCEEDED";
94
98
  /** The caller's per-member share of the org's `aiCalls` (org setting
@@ -226,6 +230,7 @@ export const ErrorCodeStatus = {
226
230
  [ErrorCode.TEMPLATE_CONTRACT_VIOLATION]: 400,
227
231
  [ErrorCode.TEMPLATE_SIZE_EXCEEDED]: 400,
228
232
  [ErrorCode.TEMPLATE_VALIDATION_FAILED]: 400,
233
+ [ErrorCode.CLIENT_UPGRADE_REQUIRED]: 426,
229
234
  [ErrorCode.QUOTA_EXCEEDED]: 429,
230
235
  [ErrorCode.AI_MEMBER_SHARE_EXCEEDED]: 429,
231
236
  [ErrorCode.AI_TOKEN_BUDGET_EXCEEDED]: 429,
@@ -272,4 +277,4 @@ export const ErrorCodeStatus = {
272
277
  export function getStatusForErrorCode(code) {
273
278
  return ErrorCodeStatus[code] ?? 500;
274
279
  }
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lcnJvci1jb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQU4sSUFBWSxTQTBMWDtBQTFMRCxXQUFZLFNBQVM7SUFDbkIsOEJBQThCO0lBQzlCLDBDQUE2QixDQUFBO0lBQzdCLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9COzs7dURBR21EO0lBQ25ELDBDQUE2QixDQUFBO0lBQzdCOzhFQUMwRTtJQUMxRSxnREFBbUMsQ0FBQTtJQUVuQyw2QkFBNkI7SUFDN0Isa0VBQXFELENBQUE7SUFDckQ7d0VBQ29FO0lBQ3BFLDhEQUFpRCxDQUFBO0lBQ2pEO29FQUNnRTtJQUNoRSxnRUFBbUQsQ0FBQTtJQUNuRDtrRUFDOEQ7SUFDOUQsZ0VBQW1ELENBQUE7SUFDbkQ7O29GQUVnRjtJQUNoRix3REFBMkMsQ0FBQTtJQUMzQzt3RUFDb0U7SUFDcEUsa0VBQXFELENBQUE7SUFDckQ7MkJBQ3VCO0lBQ3ZCLHdFQUEyRCxDQUFBO0lBQzNELG9EQUFvRDtJQUNwRCx3REFBMkMsQ0FBQTtJQUMzQztnRkFDNEU7SUFDNUUsd0NBQTJCLENBQUE7SUFDM0Isd0ZBQXdGO0lBQ3hGLHNFQUF5RCxDQUFBO0lBQ3pEO3lEQUNxRDtJQUNyRCxnRUFBbUQsQ0FBQTtJQUNuRDsyREFDdUQ7SUFDdkQsNERBQStDLENBQUE7SUFDL0M7OzJDQUV1QztJQUN2QywwREFBNkMsQ0FBQTtJQUM3QywwQ0FBNkIsQ0FBQTtJQUM3QiwwREFBNkMsQ0FBQTtJQUU3Qyx5QkFBeUI7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7SUFDL0I7OzJEQUV1RDtJQUN2RCx3REFBMkMsQ0FBQTtJQUMzQzs7K0RBRTJEO0lBQzNELDBEQUE2QyxDQUFBO0lBRTdDLDBCQUEwQjtJQUMxQixrREFBcUMsQ0FBQTtJQUNyQyw4REFBaUQsQ0FBQTtJQUNqRDt1REFDbUQ7SUFDbkQsNERBQStDLENBQUE7SUFDL0MsNERBQStDLENBQUE7SUFDL0MsOENBQWlDLENBQUE7SUFDakMsMERBQTZDLENBQUE7SUFDN0MsOERBQWlELENBQUE7SUFDakQsb0VBQXVELENBQUE7SUFDdkQsd0VBQTJELENBQUE7SUFDM0QsOERBQWlELENBQUE7SUFDakQsc0VBQXlELENBQUE7SUFFekQsZ0NBQWdDO0lBQ2hDLDhDQUFpQyxDQUFBO0lBQ2pDOzhGQUMwRjtJQUMxRixrRUFBcUQsQ0FBQTtJQUNyRCxtRkFBbUY7SUFDbkYsa0VBQXFELENBQUE7SUFDckQsd0RBQTJDLENBQUE7SUFDM0M7MENBQ3NDO0lBQ3RDLGtEQUFxQyxDQUFBO0lBRXJDLHVCQUF1QjtJQUN2QixvREFBdUMsQ0FBQTtJQUV2Qyx3QkFBd0I7SUFDeEIsa0NBQXFCLENBQUE7SUFDckIsZ0RBQW1DLENBQUE7SUFDbkMsNENBQStCLENBQUE7SUFDL0I7O3dFQUVvRTtJQUNwRSxvRUFBdUQsQ0FBQTtJQUN2RDs7dUVBRW1FO0lBQ25FLDREQUErQyxDQUFBO0lBQy9DO21GQUMrRTtJQUMvRSw0REFBK0MsQ0FBQTtJQUMvQzs0RUFDd0U7SUFDeEUsOERBQWlELENBQUE7SUFDakQ7aUVBQzZEO0lBQzdELHNEQUF5QyxDQUFBO0lBQ3pDO3dFQUNvRTtJQUNwRSxvRUFBdUQsQ0FBQTtJQUN2RDtzRkFDa0Y7SUFDbEYsd0RBQTJDLENBQUE7SUFDM0M7cUZBQ2lGO0lBQ2pGLDhEQUFpRCxDQUFBO0lBQ2pELGdGQUFnRjtJQUNoRixrRUFBcUQsQ0FBQTtJQUNyRDtpREFDNkM7SUFDN0Msd0VBQTJELENBQUE7SUFDM0Q7O3dEQUVvRDtJQUNwRCwwREFBNkMsQ0FBQTtJQUM3Qzt3RkFDb0Y7SUFDcEYsa0VBQXFELENBQUE7SUFDckQ7dUNBQ21DO0lBQ25DLHNEQUF5QyxDQUFBO0lBQ3pDO3dDQUNvQztJQUNwQyxzREFBeUMsQ0FBQTtJQUN6Qzs7MkRBRXVEO0lBQ3ZELHNDQUF5QixDQUFBO0lBQ3pCOzt5RkFFcUY7SUFDckYsOENBQWlDLENBQUE7SUFFakMsK0VBQStFO0lBQy9FLHlFQUF5RTtJQUN6RTs2REFDeUQ7SUFDekQsOERBQWlELENBQUE7SUFDakQ7cUZBQ2lGO0lBQ2pGLGtEQUFxQyxDQUFBO0lBQ3JDO3lFQUNxRTtJQUNyRSx3REFBMkMsQ0FBQTtJQUUzQyxpQkFBaUI7SUFDakIsZ0VBQW1ELENBQUE7SUFDbkQsb0VBQXVELENBQUE7SUFDdkQsc0RBQXlDLENBQUE7SUFDekMsb0RBQXVDLENBQUE7SUFDdkMsNENBQStCLENBQUE7SUFDL0IsOENBQWlDLENBQUE7SUFFakMsc0JBQXNCO0lBQ3RCLDhDQUFpQyxDQUFBO0lBQ2pDLDhDQUFpQyxDQUFBO0lBRWpDLHlFQUF5RTtJQUN6RSxnREFBbUMsQ0FBQTtJQUVuQyw0QkFBNEI7SUFDNUIsd0RBQTJDLENBQUE7SUFDM0MsOEVBQWlFLENBQUE7QUFDbkUsQ0FBQyxFQTFMVyxTQUFTLEtBQVQsU0FBUyxRQTBMcEI7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBOEI7SUFDeEQsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRztJQUM3QixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHO0lBQzlCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHO0lBQzlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFDN0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEdBQUc7SUFDekMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHO0lBQ3BDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEdBQUc7SUFDNUMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHO0lBQ3BDLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsR0FBRztJQUMzQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHO0lBQzVCLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsR0FBRztJQUN4QyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUc7SUFDdEMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsR0FBRztJQUN2QyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUc7SUFDeEMsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFDN0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUc7SUFDMUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRztJQUNqQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxHQUFHO0lBQ3RDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsR0FBRztJQUN0QyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRztJQUNyQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsR0FBRztJQUM1QyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsRUFBRSxHQUFHO0lBQzNDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsRUFBRSxHQUFHO0lBQ3pDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHO0lBQ2pDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRztJQUNsQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHO0lBQ3pCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUc7SUFDaEMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEdBQUc7SUFDMUMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxHQUFHO0lBQ3RDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsR0FBRztJQUN0QyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHO0lBQ25DLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsR0FBRztJQUMxQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxHQUFHO0lBQ3ZDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEdBQUc7SUFDNUMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUc7SUFDbkMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHO0lBQ25DLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUc7SUFDM0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHO0lBQ2pDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUc7SUFDeEMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRztJQUNuQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUc7SUFDbEMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLEdBQUc7Q0FDaEQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWU7SUFDbkQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgZXJyb3IgY29kZXMgdXNlZCBhY3Jvc3MgYWxsIEFQSSBtaWNyb3NlcnZpY2VzLlxuICogVXNlIHRoZXNlIGNvZGVzIGluIGVycm9yIHJlc3BvbnNlcyBmb3IgY29uc2lzdGVudCBjbGllbnQgaGFuZGxpbmcuXG4gKlxuICogRWFjaCBIVFRQIHN0YXR1cyBjYXRlZ29yeSBoYXMgb25lIHByaW1hcnkgY29kZS4gVXNlIHRoZSBgZGV0YWlsc2BcbiAqIGZpZWxkIGluIGVycm9yIHJlc3BvbnNlcyBmb3Igc3ViLXR5cGUgaW5mb3JtYXRpb24gKGUuZy4gd2hpY2ggcXVvdGFcbiAqIHdhcyBleGNlZWRlZCwgd2hpY2ggZmllbGQgZmFpbGVkIHZhbGlkYXRpb24pLlxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICAvLyBBdXRoZW50aWNhdGlvbiBlcnJvcnMgKDQwMSlcbiAgVU5BVVRIT1JJWkVEID0gJ1VOQVVUSE9SSVpFRCcsXG4gIFRPS0VOX0VYUElSRUQgPSAnVE9LRU5fRVhQSVJFRCcsXG4gIFRPS0VOX0lOVkFMSUQgPSAnVE9LRU5fSU5WQUxJRCcsXG4gIFRPS0VOX01JU1NJTkcgPSAnVE9LRU5fTUlTU0lORycsXG4gIFRPS0VOX1JFVk9LRUQgPSAnVE9LRU5fUkVWT0tFRCcsXG4gIC8qKiBUaGUgc2Vzc2lvbiBpcyBub3QgTUZBLWdyYWRlIChgYWFsYCBiZWxvdyB0aGUgcm91dGUncyBgbWluQXNzdXJhbmNlYCkuXG4gICAqICBUaGUgY2xpZW50IHNlbmRzIHRoZSBwZXJzb24gdG8gZW5yb2wgLyBzaWduIGluIGFnYWluIHdpdGggYSBzZWNvbmRcbiAgICogIGZhY3RvciDigJQgaXQgbXVzdCBOT1Qgc2lnbiB0aGVtIG91dCBvciByZXRyeSBhIHRva2VuIHJlZnJlc2gsIHNpbmNlIGFcbiAgICogIHJlZnJlc2ggY2FuIG5ldmVyIHJhaXNlIHRoZSBhc3N1cmFuY2UgbGV2ZWwuICovXG4gIE1GQV9SRVFVSVJFRCA9ICdNRkFfUkVRVUlSRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgTUZBLWdyYWRlIGJ1dCBpdHMgYGF1dGhfdGltZWAgaXMgb2xkZXIgdGhhbiB0aGUgcm91dGUnc1xuICAgKiAgYG1heEFnZWAg4oCUIHRoZSBwZXJzb24gbXVzdCBhdXRoZW50aWNhdGUgYWdhaW4gKG5vdCBtZXJlbHkgcmVmcmVzaCkuICovXG4gIFJFQVVUSF9SRVFVSVJFRCA9ICdSRUFVVEhfUkVRVUlSRUQnLFxuXG4gIC8vIEF1dGhvcml6YXRpb24gZXJyb3JzICg0MDMpXG4gIElOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyA9ICdJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMnLFxuICAvKiogQSBtYWNoaW5lIGNyZWRlbnRpYWwgKHNlcnZpY2UgcHJpbmNpcGFsLCBvcmcgc2VydmljZSBhY2NvdW50LCBvciBhblxuICAgKiAgZXhjaGFuZ2VkIGFjY2VzcyBrZXkpIHJlYWNoZWQgYSByb3V0ZSB0aGF0IHJlcXVpcmVzIGEgcGVyc29uLiAqL1xuICBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEID0gJ0hVTUFOX1NFU1NJT05fUkVRVUlSRUQnLFxuICAvKiogQSBib290c3RyYXAtYWRtaW4gZW5yb2xtZW50IHNlc3Npb24gKGBtZmFFbnJvbGxtZW50UGVuZGluZ2ApIHJlYWNoZWQgYVxuICAgKiAgcm91dGUgb3V0c2lkZSB0aGUgZW5yb2xtZW50IC8gc2lnbi1vdXQgLyBzZXR1cCBhbGxvd2xpc3QuICovXG4gIE1GQV9FTlJPTExNRU5UX1JFUVVJUkVEID0gJ01GQV9FTlJPTExNRU5UX1JFUVVJUkVEJyxcbiAgLyoqIEEgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gdG9rZW4gKGBpbXBlcnNvbmF0aW9uUmVhZE9ubHlgKSBhdHRlbXB0ZWQgYVxuICAgKiAgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCAoYW55dGhpbmcgYnV0IEdFVC9IRUFEL09QVElPTlMpLiAqL1xuICBJTVBFUlNPTkFUSU9OX1JFQURfT05MWSA9ICdJTVBFUlNPTkFUSU9OX1JFQURfT05MWScsXG4gIC8qKiBBIHBsdWdpbi1lY29zeXN0ZW0gZ292ZXJuYW5jZSByb3V0ZSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZClcbiAgICogIHdhcyBjYWxsZWQgZnJvbSBhbiBhY3RpdmUgb3JnIG90aGVyIHRoYW4gdGhlIHN5c3RlbSBvcmcg4oCUIGEgdG9rZW4gbWludGVkIGluXG4gICAqICBhIHRlbmFudCBvcmcgaXMgcmVmdXNlZCBldmVuIGZvciB0aGUgc2FtZSB1c2VyLiBTd2l0Y2ggdG8gdGhlIHN5c3RlbSBvcmcuICovXG4gIFNZU1RFTV9PUkdfUkVRVUlSRUQgPSAnU1lTVEVNX09SR19SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcHVibGlzaGVyIGhhc24ndCBhY2NlcHRlZCB0aGUgQ1VSUkVOVCBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiwgc28gaXRcbiAgICogIGNhbid0IHN1Ym1pdCBuZXcgcmVxdWVzdHMgKGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkKS4gKi9cbiAgUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9URVJNU19SRVFVSVJFRCcsXG4gIC8qKiBQdWJsaXNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgUk9PVCBvcmc7IGEgdGVhbSBvcmcgY2FuJ3Qgb3duIGEgcHVibGlzaGVyIG9yXG4gICAqICBzdWJtaXQgcmVxdWVzdHMuICovXG4gIFBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBpcyBzdXNwZW5kZWQgYnkgdGhlIHN5c3RlbSBvcmcuICovXG4gIFBVQkxJU0hFUl9TVVNQRU5ERUQgPSAnUFVCTElTSEVSX1NVU1BFTkRFRCcsXG4gIC8qKiBUaGUgb3JnYW5pemF0aW9uJ3MgYWRtaW5pc3RyYXRvcnMgc3dpdGNoZWQgQUkgZmVhdHVyZXMgb2ZmIChgYWlFbmFibGVkOiBmYWxzZWBcbiAgICogIG9uIHRoZSBvcmcncyBBSSBjb25maWd1cmF0aW9uKS4gRXZlcnkgQUkgZW50cnkgcG9pbnQgcmVmdXNlcyB3aXRoIGl0LiAqL1xuICBBSV9ESVNBQkxFRCA9ICdBSV9ESVNBQkxFRCcsXG4gIC8qKiBUZW5hbnQgcHVibGlzaGluZyBpcyBzd2l0Y2hlZCBvZmYgb24gdGhpcyBpbnN0YW5jZSAoYFBMVUdJTl9QVUJMSVNISU5HX0VOQUJMRURgKS4gKi9cbiAgUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQgPSAnUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQnLFxuICAvKiogUmV2aWV3IHdyaXRlcyBhcmUgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCk6XG4gICAqICByZXZpZXdzIHN0YXkgcmVhZGFibGUsIG5vdGhpbmcgbmV3IGlzIHdyaXR0ZW4uICovXG4gIFBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEID0gJ1BMVUdJTl9SRVZJRVdTX0RJU0FCTEVEJyxcbiAgLyoqIEEgbWVtYmVyIG9mIHRoZSBwdWJsaXNoZXIncyBvd24gb3JnYW5pemF0aW9uIHRyaWVkIHRvIHJldmlldyAob3Igdm90ZSBvbiBhXG4gICAqICByZXZpZXcgb2YpIG9uZSBvZiBpdHMgbGlzdGluZ3MgKHNlbGYtcHJvbW90aW9uKS4gKi9cbiAgUkVWSUVXX1NFTEZfUFJPTU9USU9OID0gJ1JFVklFV19TRUxGX1BST01PVElPTicsXG4gIC8qKiBTZXBhcmF0aW9uIG9mIGR1dGllczogdGhlIGNhbGxlciBtYXkgbm90IGRlY2lkZSB0aGlzIHJlcXVlc3Qg4oCUXG4gICAqICBpdCBjYW1lIGZyb20gYW4gb3JnIHRoZXkgYmVsb25nIHRvLCB0aGV5IHVwbG9hZGVkIHRoZSB2ZXJzaW9uLCBvciB0aGV5XG4gICAqICBnYXZlIHRoZSBmaXJzdCBvZiB0d28gYXBwcm92YWxzLiAqL1xuICBTRVBBUkFUSU9OX09GX0RVVElFUyA9ICdTRVBBUkFUSU9OX09GX0RVVElFUycsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcbiAgLyoqIFRoZSBlbWFpbCBnaXZlbiB0byBcImFkZCBtZW1iZXJcIiBoYXMgbm8gYWNjb3VudC4gRGlzdGluY3QgZnJvbSBOT1RfRk9VTkRcbiAgICogIGJlY2F1c2UgaXQgaXMgQUNUSU9OQUJMRTogdGhlIGNhbGxlcidzIGludGVudCBpcyBzYXRpc2ZpYWJsZSBieSBzZW5kaW5nIGFuXG4gICAqICBpbnZpdGF0aW9uLCBhbmQgYSBiYXJlIDQwNCBuYW1lZCBubyB3YXkgZm9yd2FyZC4gKi9cbiAgVVNFUl9OT1RfUkVHSVNURVJFRCA9ICdVU0VSX05PVF9SRUdJU1RFUkVEJyxcbiAgLyoqIFRoZSBhbm9ueW1vdXMgcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIG9mZiBvbiB0aGlzIGluc3RhbmNlXG4gICAqICAoYEFOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEYCwgb3Igb3V0Ym91bmQgZW1haWwgaXNuJ3QgY29uZmlndXJlZCkg4oCUXG4gICAqICBhbnN3ZXJlZCBhcyBhIHBsYWluIDQwNCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFNVQk1JU1NJT05TX0RJU0FCTEVEID0gJ1NVQk1JU1NJT05TX0RJU0FCTEVEJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICAvKiogQSBwcm9vZi1vZi13b3JrIGFuc3dlciBpcyBtaXNzaW5nLCBtYWxmb3JtZWQsIGV4cGlyZWQsIHRvbyBlYXN5LCB3cm9uZyxcbiAgICogIG9yIHdhcyBhbHJlYWR5IHVzZWQgKGFub255bW91cyBzdWJtaXNzaW9ucykuICovXG4gIFBST09GX09GX1dPUktfSU5WQUxJRCA9ICdQUk9PRl9PRl9XT1JLX0lOVkFMSUQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICAvKiogVGhlIGNhbGxlcidzIHBlci1tZW1iZXIgc2hhcmUgb2YgdGhlIG9yZydzIGBhaUNhbGxzYCAob3JnIHNldHRpbmdcbiAgICogIGBhaUNhbGxzUGVyTWVtYmVyUGN0YCkgaXMgc3BlbnQgZm9yIHRoaXMgcGVyaW9kIOKAlCB0aGUgb3JnIGl0c2VsZiBtYXkgaGF2ZSBoZWFkcm9vbS4gKi9cbiAgQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVEID0gJ0FJX01FTUJFUl9TSEFSRV9FWENFRURFRCcsXG4gIC8qKiBUaGUgb3JnJ3MgcGVyLXBlcmlvZCBBSSB0b2tlbiBidWRnZXQgKG9yZyBzZXR0aW5nIGBhaVRva2VuQnVkZ2V0YCkgaXMgc3BlbnQuICovXG4gIEFJX1RPS0VOX0JVREdFVF9FWENFRURFRCA9ICdBSV9UT0tFTl9CVURHRVRfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pdHRlciAocGVyIHZlcmlmaWVkIGVtYWlsLCBvciBwZXIgY2xpZW50IElQKSBpcyBhdCB0aGVcbiAgICogIHJvbGxpbmcgMjQtaG91ciBzdWJtaXNzaW9uIGNhcC4gKi9cbiAgU1VCTUlTU0lPTl9MSU1JVCA9ICdTVUJNSVNTSU9OX0xJTUlUJyxcblxuICAvLyBQYXlsb2FkIGVycm9ycyAoNDEzKVxuICBQQVlMT0FEX1RPT19MQVJHRSA9ICdQQVlMT0FEX1RPT19MQVJHRScsXG5cbiAgLy8gQ29uZmxpY3QgZXJyb3JzICg0MDkpXG4gIENPTkZMSUNUID0gJ0NPTkZMSUNUJyxcbiAgRFVQTElDQVRFX0VOVFJZID0gJ0RVUExJQ0FURV9FTlRSWScsXG4gIFNDQU5fQ09ORkxJQ1QgPSAnU0NBTl9DT05GTElDVCcsXG4gIC8qKiBBIHBsdWdpbiBpbWFnZSdzIGNvc2lnbiBzaWduYXR1cmUgKG9yIGl0cyBzaWduZWQgU0JPTSBhdHRlc3RhdGlvbikgZGlkXG4gICAqICBub3QgdmVyaWZ5IGFnYWluc3QgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5IOKAlCB0aGUgcmVnaXN0cnlcbiAgICogIGNvbnRlbnQgbm8gbG9uZ2VyIG1hdGNoZXMgd2hhdCB0aGUgcGxhdGZvcm0gYnVpbHQgYW5kIHNpZ25lZC4gKi9cbiAgSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCA9ICdJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEJyxcbiAgLyoqIFRoZSBwbHVnaW4gdmVyc2lvbiBpcyBpbW11dGFibGUg4oCUIGEgcHVibGlzaCByZXF1ZXN0IHJlZmVyZW5jZXMgaXRcbiAgICogIChgZnJvemVuX2F0YCBzZXQpIG9yIGl0IGlzIHB1Ymxpc2hlZCB0byBhIGxpc3Rpbmcg4oCUIHNvIGl0IGNhbiBiZSBuZWl0aGVyXG4gICAqICByZS11cGxvYWRlZCwgZWRpdGVkIG5vciBkZWxldGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgUExVR0lOX1ZFUlNJT05fRlJPWkVOID0gJ1BMVUdJTl9WRVJTSU9OX0ZST1pFTicsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgcmVmZXJlbmNlZCBieSBvbmUgb2YgdGhlIG9yZydzIHBpcGVsaW5lcywgb3IgcHVibGlzaGVkXG4gICAqICB0byBhbiBlY29zeXN0ZW0gbGlzdGluZzsgZGVsZXRpbmcgaXQgbmVlZHMgYD9mb3JjZT10cnVlYCBwbHVzIGEgc3RlcC11cC4gKi9cbiAgUExVR0lOX1ZFUlNJT05fSU5fVVNFID0gJ1BMVUdJTl9WRVJTSU9OX0lOX1VTRScsXG4gIC8qKiBBIGZyZWV6ZSBuYW1lZCBhbiBpbWFnZSBkaWdlc3QgdGhhdCBpcyBub3QgdGhlIHZlcnNpb24ncyBzdG9yZWQgZGlnZXN0XG4gICAqICAoZmFpbCBjbG9zZWQ6IHdoYXQgd2FzIHJlcXVlc3RlZCBpcyBub3Qgd2hhdCB3b3VsZCBiZSBwdWJsaXNoZWQpLiAqL1xuICBQTFVHSU5fRElHRVNUX01JU01BVENIID0gJ1BMVUdJTl9ESUdFU1RfTUlTTUFUQ0gnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgbmVlZHMgdGhlIG9yZydzIHB1Ymxpc2hlciBwcm9maWxlLCB3aGljaCBkb2Vzbid0IGV4aXN0XG4gICAqICB5ZXQgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBDbGFpbSBhIGhhbmRsZSBmaXJzdC4gKi9cbiAgUFVCTElTSEVSX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcmVxdWVzdGVkIHB1Ymxpc2hlciBoYW5kbGUgaXMgcmVzZXJ2ZWQgKE9mZmljaWFsL1ZlcmlmaWVkXG4gICAqICByZXNlcnZhdGlvbnMsIGNvbmZ1c2FibGVzKS4gU3VibWl0IGEgYGNsYWltYCByZXF1ZXN0IGluc3RlYWQuICovXG4gIFBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQgPSAnUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRCcsXG4gIC8qKiBBIHB1Ymxpc2ggcmVxdWVzdCBmYWlsZWQgYSBzdWJtaXQgZ2F0ZSAocHVibGljIHZpc2liaWxpdHksIFNQRFggbGljZW5zZSxcbiAgICogIFJFQURNRSwgc2lnbmF0dXJlLCBzY2FuLCB2dWxuZXJhYmlsaXR5IGdhdGUg4oCmKTsgYGRldGFpbHMuZ2F0ZXNgIGxpc3RzIHRoZW0uICovXG4gIFBVQkxJU0hfR0FURV9GQUlMRUQgPSAnUFVCTElTSF9HQVRFX0ZBSUxFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiAob3IgaXRzIGRlY2lzaW9uKSBmcm9tIGFuIG9yZyB3aG9zZSBwbGFuXG4gICAqICBsYWNrcyB0aGUgYHZlcmlmaWVkX3B1Ymxpc2hlcmAgZmVhdHVyZSAoVGVhbSssIGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiAqL1xuICBWRVJJRklFRF9QTEFOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX1BMQU5fUkVRVUlSRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gZnJvbSBhbiBvcmcgd2l0aCBubyBETlMtdmVyaWZpZWQgZG9tYWluLiAqL1xuICBWRVJJRklFRF9ET01BSU5fUkVRVUlSRUQgPSAnVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdob3NlIG93bmVyIGhhcyBubyBzZWNvbmRcbiAgICogIGZhY3RvciAocGFzc2tleSBvciBhdXRoZW50aWNhdG9yIGFwcCkuICovXG4gIFZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRCA9ICdWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQnLFxuICAvKiogQSBwbHVnaW4gcmVmZXJlbmNlIG5hbWVzIGFuIGVjb3N5c3RlbSBsaXN0aW5nIHRoZSBvcmcgaGFzbid0IGluc3RhbGxlZCAob3JcbiAgICogIHdob3NlIGluc3RhbGwgaXMgcGVuZGluZywgZGVuaWVkLCBvciBkb2Vzbid0IGNvdmVyIHRoZSB2ZXJzaW9uIGFza2VkIGZvcjtcbiAgICogIGBkZXRhaWxzLnJlYXNvbmApIOKAlCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kICovXG4gIFBMVUdJTl9OT1RfSU5TVEFMTEVEID0gJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJyxcbiAgLyoqIFRoZSBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgcmVmdXNlcyB0aGUgbGlzdGluZzogaXRzIHRpZXIgaXNuJ3QgYWxsb3dlZCxcbiAgICogIHRoZSBsaXN0aW5nIGlzIGJsb2NrZWQsIG9yIGFuIGFkdmlzb3J5IGJsb2NrcyB0aGUgdmVyc2lvbiAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9CTE9DS0VEX0JZX1BPTElDWSA9ICdQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1knLFxuICAvKiogVGhlIGxpc3Rpbmcgb3IgdmVyc2lvbiBjYW4ndCBiZSB1c2VkOiB5YW5rZWQsIHN1c3BlbmRlZCwgb3IgcGF1c2VkIGZvciBuZXdcbiAgICogIGluc3RhbGxzIChgZGV0YWlscy5yZWFzb25gKS4gKi9cbiAgUExVR0lOX1VOQVZBSUxBQkxFID0gJ1BMVUdJTl9VTkFWQUlMQUJMRScsXG4gIC8qKiBBbiBhdXRvLWNyZWF0ZWQgcGxhY2Vob2xkZXIgcGx1Z2luIGNhbid0IHRha2UgdGhlIG5hbWUgb2YgYSBsaXN0ZWQgcGx1Z2luXG4gICAqIOKAlCBpbnN0YWxsIHRoZSBsaXN0aW5nIGluc3RlYWQuICovXG4gIFBMVUdJTl9OQU1FX0xJU1RFRCA9ICdQTFVHSU5fTkFNRV9MSVNURUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pc3Npb24gbmFtZXMgYSBjb21tdW5pdHkgbGlzdGluZyBhbm90aGVyIHN1Ym1pdHRlciBvd25zLFxuICAgKiAgYSByZXNlcnZlZCBuYW1lLCBhbiBPZmZpY2lhbC9WZXJpZmllZCBsaXN0aW5nJ3MgbmFtZSwgb3Igb25lIGNvbmZ1c2FibGVcbiAgICogIHdpdGggYSB0b3AgbGlzdGluZzsgYGRldGFpbHMucmVhc29uYCBzYXlzIHdoaWNoLiAqL1xuICBOQU1FX1RBS0VOID0gJ05BTUVfVEFLRU4nLFxuICAvKiogQW4gVU5RVUFMSUZJRUQgcmVmZXJlbmNlIG5hbWVzIGEgcGx1Z2luIHRoZSBvcmcgREVMRVRFRDogcmVmdXNlZCByYXRoZXJcbiAgICogIHRoYW4gc2lsZW50bHkgZmFsbGluZyB0aHJvdWdoIHRvIGEgc2FtZS1uYW1lZCBsaXN0aW5nLCB3aGljaCB3b3VsZCBzd2FwIHRoZVxuICAgKiAgaW1hZ2UgYSBwaXBlbGluZSBydW5zIHdpdGhvdXQgYW55b25lIGNob29zaW5nIGl0IChgZGV0YWlscy5zdGF0ZTogJ2RlbGV0ZWQnYCkuICovXG4gIFBMVUdJTl9ERUxFVEVEID0gJ1BMVUdJTl9ERUxFVEVEJyxcblxuICAvLyBQbHVnaW4gYnVpbGQgb3V0Y29tZXMgKDQyMikg4oCUIHRlcm1pbmFsIGJ1aWxkIGZhaWx1cmVzLCByZXBvcnRlZCBvbiB0aGUgYnVpbGRcbiAgLy8gc3RyZWFtIGFuZCBpbiB0aGUgYnVpbGQncyBmYWlsdXJlIHJlY29yZCwgbmV2ZXIgYW5zd2VyZWQgb24gYSByZXF1ZXN0LlxuICAvKiogVGhlIGJ1aWx0IGltYWdlIGNvdWxkIG5vdCBiZSB2dWxuZXJhYmlsaXR5LXNjYW5uZWQgYWZ0ZXIgZXZlcnkgcmV0cnksIHNvXG4gICAqICBub3RoaW5nIHdhcyBwZXJzaXN0ZWQgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiAqL1xuICBJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFID0gJ0lNQUdFX1NDQU5fVU5BVkFJTEFCTEUnLFxuICAvKiogVGhlIGJ1aWx0IGltYWdlIGhhcyBtb3JlIGZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3MgdGhhbiB0aGUgcGxhdGZvcm1cbiAgICogIGZsb29yIGBQTFVHSU5fVlVMTl9NQVhfRklORElOR1NgOyB0aGUgbWVzc2FnZSBsaXN0cyB0aGVtIHdpdGggdGhlaXIgZml4ZXMuICovXG4gIFBMVUdJTl9WVUxOX0dBVEUgPSAnUExVR0lOX1ZVTE5fR0FURScsXG4gIC8qKiBBbiB1cGxvYWQgd2hvc2UgTkFNRSB3b3VsZCBvdmVycmlkZSBhIGxpc3Rpbmcgb3IgdGhlIHBhcmVudCBvcmcncyBwbHVnaW4sXG4gICAqICByZWZ1c2VkIGJlY2F1c2UgdGhlIGNvbnN1bXB0aW9uIHBvbGljeSBzYXlzIGBzaGFkb3dpbmc6IGRlbnlgLiAqL1xuICBQTFVHSU5fTkFNRV9TSEFET1dTID0gJ1BMVUdJTl9OQU1FX1NIQURPV1MnLFxuXG4gIC8vIEJpbGxpbmcgZXJyb3JzXG4gIFBBWU1FTlRfTUVUSE9EX1JFUVVJUkVEID0gJ1BBWU1FTlRfTUVUSE9EX1JFUVVJUkVEJywgLy8gNDAyXG4gIERJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQgPSAnRElTQ09VTlRfQ0VJTElOR19FWENFRURFRCcsIC8vIDQwMFxuICBESVNDT1VOVF9OT1RfRk9VTkQgPSAnRElTQ09VTlRfTk9UX0ZPVU5EJywgLy8gNDA0XG4gIERJU0NPVU5UX0lOQUNUSVZFID0gJ0RJU0NPVU5UX0lOQUNUSVZFJywgLy8gNDA5XG4gIFBMQU5fT1ZFUl9DQVAgPSAnUExBTl9PVkVSX0NBUCcsIC8vIDQwOVxuICBBRERPTl9PVkVSX0NBUCA9ICdBRERPTl9PVkVSX0NBUCcsIC8vIDQwOVxuXG4gIC8vIFNlcnZlciBlcnJvcnMgKDUwMClcbiAgSU5URVJOQUxfRVJST1IgPSAnSU5URVJOQUxfRVJST1InLFxuICBEQVRBQkFTRV9FUlJPUiA9ICdEQVRBQkFTRV9FUlJPUicsXG5cbiAgLy8gTm90IGltcGxlbWVudGVkICg1MDEpIOKAlCB0aGUgY29uZmlndXJlZCBwcm92aWRlciBoYXMgbm8gc3VjaCBjYXBhYmlsaXR5XG4gIE5PVF9JTVBMRU1FTlRFRCA9ICdOT1RfSU1QTEVNRU5URUQnLFxuXG4gIC8vIFNlcnZpY2UgdW5hdmFpbGFibGUgKDUwMylcbiAgU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdTRVJWSUNFX1VOQVZBSUxBQkxFJyxcbiAgQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFID0gJ0NPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRScsXG59XG5cbi8qKlxuICogTWFwcyBlcnJvciBjb2RlcyB0byB0aGVpciBkZWZhdWx0IEhUVFAgc3RhdHVzIGNvZGVzLlxuICovXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlU3RhdHVzOiBSZWNvcmQ8RXJyb3JDb2RlLCBudW1iZXI+ID0ge1xuICBbRXJyb3JDb2RlLlVOQVVUSE9SSVpFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9FWFBJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX0lOVkFMSURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fTUlTU0lOR106IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9SRVZPS0VEXTogNDAxLFxuICBbRXJyb3JDb2RlLk1GQV9SRVFVSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5SRUFVVEhfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TXTogNDAzLFxuICBbRXJyb3JDb2RlLlNZU1RFTV9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfU1VTUEVOREVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9QVUJMSVNISU5HX0RJU0FCTEVEXTogNDAzLFxuICBbRXJyb3JDb2RlLkFJX0RJU0FCTEVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlJFVklFV19TRUxGX1BST01PVElPTl06IDQwMyxcbiAgW0Vycm9yQ29kZS5TRVBBUkFUSU9OX09GX0RVVElFU106IDQwMyxcbiAgW0Vycm9yQ29kZS5IVU1BTl9TRVNTSU9OX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLk1GQV9FTlJPTExNRU5UX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLklNUEVSU09OQVRJT05fUkVBRF9PTkxZXTogNDAzLFxuICBbRXJyb3JDb2RlLk9SR19NSVNNQVRDSF06IDQwMyxcbiAgW0Vycm9yQ29kZS5DT01QTElBTkNFX1ZJT0xBVElPTl06IDQwMyxcbiAgW0Vycm9yQ29kZS5OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuT1JHX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5VU0VSX05PVF9SRUdJU1RFUkVEXTogNDA0LFxuICBbRXJyb3JDb2RlLlNVQk1JU1NJT05TX0RJU0FCTEVEXTogNDA0LFxuICBbRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1JdOiA0MDAsXG4gIFtFcnJvckNvZGUuTUlTU0lOR19SRVFVSVJFRF9GSUVMRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5QUk9PRl9PRl9XT1JLX0lOVkFMSURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVU5LTk9XTl9QQVRIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX0NZQ0xFXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1BBUlNFX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1RZUEVfTUlTTUFUQ0hdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT05dOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfU0laRV9FWENFRURFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5RVU9UQV9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5BSV9NRU1CRVJfU0hBUkVfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuU1VCTUlTU0lPTl9MSU1JVF06IDQyOSxcbiAgW0Vycm9yQ29kZS5QQVlMT0FEX1RPT19MQVJHRV06IDQxMyxcbiAgW0Vycm9yQ29kZS5DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5EVVBMSUNBVEVfRU5UUlldOiA0MDksXG4gIFtFcnJvckNvZGUuU0NBTl9DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX0ZST1pFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9JTl9VU0VdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX0RJR0VTVF9NSVNNQVRDSF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIX0dBVEVfRkFJTEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX1BMQU5fUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTk9UX0lOU1RBTExFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1ldOiA0MDMsXG4gIFtFcnJvckNvZGUuUExVR0lOX1VOQVZBSUxBQkxFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9OQU1FX0xJU1RFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5OQU1FX1RBS0VOXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9ERUxFVEVEXTogNDEwLFxuICBbRXJyb3JDb2RlLklNQUdFX1NDQU5fVU5BVkFJTEFCTEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZVTE5fR0FURV06IDQyMixcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTkFNRV9TSEFET1dTXTogNDA5LFxuICBbRXJyb3JDb2RlLlBBWU1FTlRfTUVUSE9EX1JFUVVJUkVEXTogNDAyLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX0NFSUxJTkdfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuRElTQ09VTlRfTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX0lOQUNUSVZFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMQU5fT1ZFUl9DQVBdOiA0MDksXG4gIFtFcnJvckNvZGUuQURET05fT1ZFUl9DQVBdOiA0MDksXG4gIFtFcnJvckNvZGUuSU5URVJOQUxfRVJST1JdOiA1MDAsXG4gIFtFcnJvckNvZGUuREFUQUJBU0VfRVJST1JdOiA1MDAsXG4gIFtFcnJvckNvZGUuTk9UX0lNUExFTUVOVEVEXTogNTAxLFxuICBbRXJyb3JDb2RlLlNFUlZJQ0VfVU5BVkFJTEFCTEVdOiA1MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIGFuIGVycm9yIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNGb3JFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIEVycm9yQ29kZVN0YXR1c1tjb2RlXSA/PyA1MDA7XG59XG4iXX0=
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lcnJvci1jb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQU4sSUFBWSxTQStMWDtBQS9MRCxXQUFZLFNBQVM7SUFDbkIsOEJBQThCO0lBQzlCLDBDQUE2QixDQUFBO0lBQzdCLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9COzs7dURBR21EO0lBQ25ELDBDQUE2QixDQUFBO0lBQzdCOzhFQUMwRTtJQUMxRSxnREFBbUMsQ0FBQTtJQUVuQyw2QkFBNkI7SUFDN0Isa0VBQXFELENBQUE7SUFDckQ7d0VBQ29FO0lBQ3BFLDhEQUFpRCxDQUFBO0lBQ2pEO29FQUNnRTtJQUNoRSxnRUFBbUQsQ0FBQTtJQUNuRDtrRUFDOEQ7SUFDOUQsZ0VBQW1ELENBQUE7SUFDbkQ7O29GQUVnRjtJQUNoRix3REFBMkMsQ0FBQTtJQUMzQzt3RUFDb0U7SUFDcEUsa0VBQXFELENBQUE7SUFDckQ7MkJBQ3VCO0lBQ3ZCLHdFQUEyRCxDQUFBO0lBQzNELG9EQUFvRDtJQUNwRCx3REFBMkMsQ0FBQTtJQUMzQztnRkFDNEU7SUFDNUUsd0NBQTJCLENBQUE7SUFDM0Isd0ZBQXdGO0lBQ3hGLHNFQUF5RCxDQUFBO0lBQ3pEO3lEQUNxRDtJQUNyRCxnRUFBbUQsQ0FBQTtJQUNuRDsyREFDdUQ7SUFDdkQsNERBQStDLENBQUE7SUFDL0M7OzJDQUV1QztJQUN2QywwREFBNkMsQ0FBQTtJQUM3QywwQ0FBNkIsQ0FBQTtJQUM3QiwwREFBNkMsQ0FBQTtJQUU3Qyx5QkFBeUI7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7SUFDL0I7OzJEQUV1RDtJQUN2RCx3REFBMkMsQ0FBQTtJQUMzQzs7K0RBRTJEO0lBQzNELDBEQUE2QyxDQUFBO0lBRTdDLDBCQUEwQjtJQUMxQixrREFBcUMsQ0FBQTtJQUNyQyw4REFBaUQsQ0FBQTtJQUNqRDt1REFDbUQ7SUFDbkQsNERBQStDLENBQUE7SUFDL0MsNERBQStDLENBQUE7SUFDL0MsOENBQWlDLENBQUE7SUFDakMsMERBQTZDLENBQUE7SUFDN0MsOERBQWlELENBQUE7SUFDakQsb0VBQXVELENBQUE7SUFDdkQsd0VBQTJELENBQUE7SUFDM0QsOERBQWlELENBQUE7SUFDakQsc0VBQXlELENBQUE7SUFFekQsdUJBQXVCO0lBQ3ZCO21GQUMrRTtJQUMvRSxnRUFBbUQsQ0FBQTtJQUVuRCxnQ0FBZ0M7SUFDaEMsOENBQWlDLENBQUE7SUFDakM7OEZBQzBGO0lBQzFGLGtFQUFxRCxDQUFBO0lBQ3JELG1GQUFtRjtJQUNuRixrRUFBcUQsQ0FBQTtJQUNyRCx3REFBMkMsQ0FBQTtJQUMzQzswQ0FDc0M7SUFDdEMsa0RBQXFDLENBQUE7SUFFckMsdUJBQXVCO0lBQ3ZCLG9EQUF1QyxDQUFBO0lBRXZDLHdCQUF3QjtJQUN4QixrQ0FBcUIsQ0FBQTtJQUNyQixnREFBbUMsQ0FBQTtJQUNuQyw0Q0FBK0IsQ0FBQTtJQUMvQjs7d0VBRW9FO0lBQ3BFLG9FQUF1RCxDQUFBO0lBQ3ZEOzt1RUFFbUU7SUFDbkUsNERBQStDLENBQUE7SUFDL0M7bUZBQytFO0lBQy9FLDREQUErQyxDQUFBO0lBQy9DOzRFQUN3RTtJQUN4RSw4REFBaUQsQ0FBQTtJQUNqRDtpRUFDNkQ7SUFDN0Qsc0RBQXlDLENBQUE7SUFDekM7d0VBQ29FO0lBQ3BFLG9FQUF1RCxDQUFBO0lBQ3ZEO3NGQUNrRjtJQUNsRix3REFBMkMsQ0FBQTtJQUMzQztxRkFDaUY7SUFDakYsOERBQWlELENBQUE7SUFDakQsZ0ZBQWdGO0lBQ2hGLGtFQUFxRCxDQUFBO0lBQ3JEO2lEQUM2QztJQUM3Qyx3RUFBMkQsQ0FBQTtJQUMzRDs7d0RBRW9EO0lBQ3BELDBEQUE2QyxDQUFBO0lBQzdDO3dGQUNvRjtJQUNwRixrRUFBcUQsQ0FBQTtJQUNyRDt1Q0FDbUM7SUFDbkMsc0RBQXlDLENBQUE7SUFDekM7d0NBQ29DO0lBQ3BDLHNEQUF5QyxDQUFBO0lBQ3pDOzsyREFFdUQ7SUFDdkQsc0NBQXlCLENBQUE7SUFDekI7O3lGQUVxRjtJQUNyRiw4Q0FBaUMsQ0FBQTtJQUVqQywrRUFBK0U7SUFDL0UseUVBQXlFO0lBQ3pFOzZEQUN5RDtJQUN6RCw4REFBaUQsQ0FBQTtJQUNqRDtxRkFDaUY7SUFDakYsa0RBQXFDLENBQUE7SUFDckM7eUVBQ3FFO0lBQ3JFLHdEQUEyQyxDQUFBO0lBRTNDLGlCQUFpQjtJQUNqQixnRUFBbUQsQ0FBQTtJQUNuRCxvRUFBdUQsQ0FBQTtJQUN2RCxzREFBeUMsQ0FBQTtJQUN6QyxvREFBdUMsQ0FBQTtJQUN2Qyw0Q0FBK0IsQ0FBQTtJQUMvQiw4Q0FBaUMsQ0FBQTtJQUVqQyxzQkFBc0I7SUFDdEIsOENBQWlDLENBQUE7SUFDakMsOENBQWlDLENBQUE7SUFFakMseUVBQXlFO0lBQ3pFLGdEQUFtQyxDQUFBO0lBRW5DLDRCQUE0QjtJQUM1Qix3REFBMkMsQ0FBQTtJQUMzQyw4RUFBaUUsQ0FBQTtBQUNuRSxDQUFDLEVBL0xXLFNBQVMsS0FBVCxTQUFTLFFBK0xwQjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUE4QjtJQUN4RCxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHO0lBQzdCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHO0lBQzlCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRztJQUM3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsRUFBRSxHQUFHO0lBQ3pDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsR0FBRztJQUM1QyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsRUFBRSxHQUFHO0lBQzNDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUc7SUFDNUIsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsR0FBRztJQUN0QyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUc7SUFDckMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxHQUFHO0lBQ3ZDLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsR0FBRztJQUN4QyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUc7SUFDeEMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRztJQUM3QixDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUc7SUFDckMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRztJQUMxQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHO0lBQzlCLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUc7SUFDckMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHO0lBQ2pDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsR0FBRztJQUN2QyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUc7SUFDdEMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxHQUFHO0lBQ3RDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsR0FBRztJQUN2QyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEdBQUc7SUFDMUMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsRUFBRSxHQUFHO0lBQzVDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsR0FBRztJQUN2QyxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEdBQUc7SUFDM0MsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsRUFBRSxHQUFHO0lBQ3pDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHO0lBQ2pDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRztJQUNsQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHO0lBQ3pCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUc7SUFDaEMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEdBQUc7SUFDMUMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxHQUFHO0lBQ3RDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsR0FBRztJQUN0QyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHO0lBQ25DLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsR0FBRztJQUMxQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxHQUFHO0lBQ3ZDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEdBQUc7SUFDNUMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUc7SUFDbkMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHO0lBQ25DLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUc7SUFDM0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHO0lBQ2pDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUc7SUFDeEMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRztJQUNuQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUc7SUFDbEMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLEdBQUc7Q0FDaEQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWU7SUFDbkQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgZXJyb3IgY29kZXMgdXNlZCBhY3Jvc3MgYWxsIEFQSSBtaWNyb3NlcnZpY2VzLlxuICogVXNlIHRoZXNlIGNvZGVzIGluIGVycm9yIHJlc3BvbnNlcyBmb3IgY29uc2lzdGVudCBjbGllbnQgaGFuZGxpbmcuXG4gKlxuICogRWFjaCBIVFRQIHN0YXR1cyBjYXRlZ29yeSBoYXMgb25lIHByaW1hcnkgY29kZS4gVXNlIHRoZSBgZGV0YWlsc2BcbiAqIGZpZWxkIGluIGVycm9yIHJlc3BvbnNlcyBmb3Igc3ViLXR5cGUgaW5mb3JtYXRpb24gKGUuZy4gd2hpY2ggcXVvdGFcbiAqIHdhcyBleGNlZWRlZCwgd2hpY2ggZmllbGQgZmFpbGVkIHZhbGlkYXRpb24pLlxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICAvLyBBdXRoZW50aWNhdGlvbiBlcnJvcnMgKDQwMSlcbiAgVU5BVVRIT1JJWkVEID0gJ1VOQVVUSE9SSVpFRCcsXG4gIFRPS0VOX0VYUElSRUQgPSAnVE9LRU5fRVhQSVJFRCcsXG4gIFRPS0VOX0lOVkFMSUQgPSAnVE9LRU5fSU5WQUxJRCcsXG4gIFRPS0VOX01JU1NJTkcgPSAnVE9LRU5fTUlTU0lORycsXG4gIFRPS0VOX1JFVk9LRUQgPSAnVE9LRU5fUkVWT0tFRCcsXG4gIC8qKiBUaGUgc2Vzc2lvbiBpcyBub3QgTUZBLWdyYWRlIChgYWFsYCBiZWxvdyB0aGUgcm91dGUncyBgbWluQXNzdXJhbmNlYCkuXG4gICAqICBUaGUgY2xpZW50IHNlbmRzIHRoZSBwZXJzb24gdG8gZW5yb2wgLyBzaWduIGluIGFnYWluIHdpdGggYSBzZWNvbmRcbiAgICogIGZhY3RvciDigJQgaXQgbXVzdCBOT1Qgc2lnbiB0aGVtIG91dCBvciByZXRyeSBhIHRva2VuIHJlZnJlc2gsIHNpbmNlIGFcbiAgICogIHJlZnJlc2ggY2FuIG5ldmVyIHJhaXNlIHRoZSBhc3N1cmFuY2UgbGV2ZWwuICovXG4gIE1GQV9SRVFVSVJFRCA9ICdNRkFfUkVRVUlSRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgTUZBLWdyYWRlIGJ1dCBpdHMgYGF1dGhfdGltZWAgaXMgb2xkZXIgdGhhbiB0aGUgcm91dGUnc1xuICAgKiAgYG1heEFnZWAg4oCUIHRoZSBwZXJzb24gbXVzdCBhdXRoZW50aWNhdGUgYWdhaW4gKG5vdCBtZXJlbHkgcmVmcmVzaCkuICovXG4gIFJFQVVUSF9SRVFVSVJFRCA9ICdSRUFVVEhfUkVRVUlSRUQnLFxuXG4gIC8vIEF1dGhvcml6YXRpb24gZXJyb3JzICg0MDMpXG4gIElOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyA9ICdJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMnLFxuICAvKiogQSBtYWNoaW5lIGNyZWRlbnRpYWwgKHNlcnZpY2UgcHJpbmNpcGFsLCBvcmcgc2VydmljZSBhY2NvdW50LCBvciBhblxuICAgKiAgZXhjaGFuZ2VkIGFjY2VzcyBrZXkpIHJlYWNoZWQgYSByb3V0ZSB0aGF0IHJlcXVpcmVzIGEgcGVyc29uLiAqL1xuICBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEID0gJ0hVTUFOX1NFU1NJT05fUkVRVUlSRUQnLFxuICAvKiogQSBib290c3RyYXAtYWRtaW4gZW5yb2xtZW50IHNlc3Npb24gKGBtZmFFbnJvbGxtZW50UGVuZGluZ2ApIHJlYWNoZWQgYVxuICAgKiAgcm91dGUgb3V0c2lkZSB0aGUgZW5yb2xtZW50IC8gc2lnbi1vdXQgLyBzZXR1cCBhbGxvd2xpc3QuICovXG4gIE1GQV9FTlJPTExNRU5UX1JFUVVJUkVEID0gJ01GQV9FTlJPTExNRU5UX1JFUVVJUkVEJyxcbiAgLyoqIEEgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gdG9rZW4gKGBpbXBlcnNvbmF0aW9uUmVhZE9ubHlgKSBhdHRlbXB0ZWQgYVxuICAgKiAgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCAoYW55dGhpbmcgYnV0IEdFVC9IRUFEL09QVElPTlMpLiAqL1xuICBJTVBFUlNPTkFUSU9OX1JFQURfT05MWSA9ICdJTVBFUlNPTkFUSU9OX1JFQURfT05MWScsXG4gIC8qKiBBIHBsdWdpbi1lY29zeXN0ZW0gZ292ZXJuYW5jZSByb3V0ZSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZClcbiAgICogIHdhcyBjYWxsZWQgZnJvbSBhbiBhY3RpdmUgb3JnIG90aGVyIHRoYW4gdGhlIHN5c3RlbSBvcmcg4oCUIGEgdG9rZW4gbWludGVkIGluXG4gICAqICBhIHRlbmFudCBvcmcgaXMgcmVmdXNlZCBldmVuIGZvciB0aGUgc2FtZSB1c2VyLiBTd2l0Y2ggdG8gdGhlIHN5c3RlbSBvcmcuICovXG4gIFNZU1RFTV9PUkdfUkVRVUlSRUQgPSAnU1lTVEVNX09SR19SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcHVibGlzaGVyIGhhc24ndCBhY2NlcHRlZCB0aGUgQ1VSUkVOVCBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiwgc28gaXRcbiAgICogIGNhbid0IHN1Ym1pdCBuZXcgcmVxdWVzdHMgKGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkKS4gKi9cbiAgUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9URVJNU19SRVFVSVJFRCcsXG4gIC8qKiBQdWJsaXNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgUk9PVCBvcmc7IGEgdGVhbSBvcmcgY2FuJ3Qgb3duIGEgcHVibGlzaGVyIG9yXG4gICAqICBzdWJtaXQgcmVxdWVzdHMuICovXG4gIFBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBpcyBzdXNwZW5kZWQgYnkgdGhlIHN5c3RlbSBvcmcuICovXG4gIFBVQkxJU0hFUl9TVVNQRU5ERUQgPSAnUFVCTElTSEVSX1NVU1BFTkRFRCcsXG4gIC8qKiBUaGUgb3JnYW5pemF0aW9uJ3MgYWRtaW5pc3RyYXRvcnMgc3dpdGNoZWQgQUkgZmVhdHVyZXMgb2ZmIChgYWlFbmFibGVkOiBmYWxzZWBcbiAgICogIG9uIHRoZSBvcmcncyBBSSBjb25maWd1cmF0aW9uKS4gRXZlcnkgQUkgZW50cnkgcG9pbnQgcmVmdXNlcyB3aXRoIGl0LiAqL1xuICBBSV9ESVNBQkxFRCA9ICdBSV9ESVNBQkxFRCcsXG4gIC8qKiBUZW5hbnQgcHVibGlzaGluZyBpcyBzd2l0Y2hlZCBvZmYgb24gdGhpcyBpbnN0YW5jZSAoYFBMVUdJTl9QVUJMSVNISU5HX0VOQUJMRURgKS4gKi9cbiAgUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQgPSAnUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQnLFxuICAvKiogUmV2aWV3IHdyaXRlcyBhcmUgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCk6XG4gICAqICByZXZpZXdzIHN0YXkgcmVhZGFibGUsIG5vdGhpbmcgbmV3IGlzIHdyaXR0ZW4uICovXG4gIFBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEID0gJ1BMVUdJTl9SRVZJRVdTX0RJU0FCTEVEJyxcbiAgLyoqIEEgbWVtYmVyIG9mIHRoZSBwdWJsaXNoZXIncyBvd24gb3JnYW5pemF0aW9uIHRyaWVkIHRvIHJldmlldyAob3Igdm90ZSBvbiBhXG4gICAqICByZXZpZXcgb2YpIG9uZSBvZiBpdHMgbGlzdGluZ3MgKHNlbGYtcHJvbW90aW9uKS4gKi9cbiAgUkVWSUVXX1NFTEZfUFJPTU9USU9OID0gJ1JFVklFV19TRUxGX1BST01PVElPTicsXG4gIC8qKiBTZXBhcmF0aW9uIG9mIGR1dGllczogdGhlIGNhbGxlciBtYXkgbm90IGRlY2lkZSB0aGlzIHJlcXVlc3Qg4oCUXG4gICAqICBpdCBjYW1lIGZyb20gYW4gb3JnIHRoZXkgYmVsb25nIHRvLCB0aGV5IHVwbG9hZGVkIHRoZSB2ZXJzaW9uLCBvciB0aGV5XG4gICAqICBnYXZlIHRoZSBmaXJzdCBvZiB0d28gYXBwcm92YWxzLiAqL1xuICBTRVBBUkFUSU9OX09GX0RVVElFUyA9ICdTRVBBUkFUSU9OX09GX0RVVElFUycsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcbiAgLyoqIFRoZSBlbWFpbCBnaXZlbiB0byBcImFkZCBtZW1iZXJcIiBoYXMgbm8gYWNjb3VudC4gRGlzdGluY3QgZnJvbSBOT1RfRk9VTkRcbiAgICogIGJlY2F1c2UgaXQgaXMgQUNUSU9OQUJMRTogdGhlIGNhbGxlcidzIGludGVudCBpcyBzYXRpc2ZpYWJsZSBieSBzZW5kaW5nIGFuXG4gICAqICBpbnZpdGF0aW9uLCBhbmQgYSBiYXJlIDQwNCBuYW1lZCBubyB3YXkgZm9yd2FyZC4gKi9cbiAgVVNFUl9OT1RfUkVHSVNURVJFRCA9ICdVU0VSX05PVF9SRUdJU1RFUkVEJyxcbiAgLyoqIFRoZSBhbm9ueW1vdXMgcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIG9mZiBvbiB0aGlzIGluc3RhbmNlXG4gICAqICAoYEFOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEYCwgb3Igb3V0Ym91bmQgZW1haWwgaXNuJ3QgY29uZmlndXJlZCkg4oCUXG4gICAqICBhbnN3ZXJlZCBhcyBhIHBsYWluIDQwNCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFNVQk1JU1NJT05TX0RJU0FCTEVEID0gJ1NVQk1JU1NJT05TX0RJU0FCTEVEJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICAvKiogQSBwcm9vZi1vZi13b3JrIGFuc3dlciBpcyBtaXNzaW5nLCBtYWxmb3JtZWQsIGV4cGlyZWQsIHRvbyBlYXN5LCB3cm9uZyxcbiAgICogIG9yIHdhcyBhbHJlYWR5IHVzZWQgKGFub255bW91cyBzdWJtaXNzaW9ucykuICovXG4gIFBST09GX09GX1dPUktfSU5WQUxJRCA9ICdQUk9PRl9PRl9XT1JLX0lOVkFMSUQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gQ2xpZW50IHRvbyBvbGQgKDQyNilcbiAgLyoqIFRoZSBwaXBlbGluZS1tYW5hZ2VyIENMSSBpcyBvbGRlciB0aGFuIHRoZSBwbGF0Zm9ybSdzXG4gICAqICBgUElQRUxJTkVfTUFOQUdFUl9NSU5fVkVSU0lPTmA7IHRoZSBmaXggaXMgYHBpcGVsaW5lLW1hbmFnZXIgLS11cGdyYWRlYC4gKi9cbiAgQ0xJRU5UX1VQR1JBREVfUkVRVUlSRUQgPSAnQ0xJRU5UX1VQR1JBREVfUkVRVUlSRUQnLFxuXG4gIC8vIFF1b3RhL1JhdGUgbGltaXQgZXJyb3JzICg0MjkpXG4gIFFVT1RBX0VYQ0VFREVEID0gJ1FVT1RBX0VYQ0VFREVEJyxcbiAgLyoqIFRoZSBjYWxsZXIncyBwZXItbWVtYmVyIHNoYXJlIG9mIHRoZSBvcmcncyBgYWlDYWxsc2AgKG9yZyBzZXR0aW5nXG4gICAqICBgYWlDYWxsc1Blck1lbWJlclBjdGApIGlzIHNwZW50IGZvciB0aGlzIHBlcmlvZCDigJQgdGhlIG9yZyBpdHNlbGYgbWF5IGhhdmUgaGVhZHJvb20uICovXG4gIEFJX01FTUJFUl9TSEFSRV9FWENFRURFRCA9ICdBSV9NRU1CRVJfU0hBUkVfRVhDRUVERUQnLFxuICAvKiogVGhlIG9yZydzIHBlci1wZXJpb2QgQUkgdG9rZW4gYnVkZ2V0IChvcmcgc2V0dGluZyBgYWlUb2tlbkJ1ZGdldGApIGlzIHNwZW50LiAqL1xuICBBSV9UT0tFTl9CVURHRVRfRVhDRUVERUQgPSAnQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEJyxcbiAgUkFURV9MSU1JVF9FWENFRURFRCA9ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXR0ZXIgKHBlciB2ZXJpZmllZCBlbWFpbCwgb3IgcGVyIGNsaWVudCBJUCkgaXMgYXQgdGhlXG4gICAqICByb2xsaW5nIDI0LWhvdXIgc3VibWlzc2lvbiBjYXAuICovXG4gIFNVQk1JU1NJT05fTElNSVQgPSAnU1VCTUlTU0lPTl9MSU1JVCcsXG5cbiAgLy8gUGF5bG9hZCBlcnJvcnMgKDQxMylcbiAgUEFZTE9BRF9UT09fTEFSR0UgPSAnUEFZTE9BRF9UT09fTEFSR0UnLFxuXG4gIC8vIENvbmZsaWN0IGVycm9ycyAoNDA5KVxuICBDT05GTElDVCA9ICdDT05GTElDVCcsXG4gIERVUExJQ0FURV9FTlRSWSA9ICdEVVBMSUNBVEVfRU5UUlknLFxuICBTQ0FOX0NPTkZMSUNUID0gJ1NDQU5fQ09ORkxJQ1QnLFxuICAvKiogQSBwbHVnaW4gaW1hZ2UncyBjb3NpZ24gc2lnbmF0dXJlIChvciBpdHMgc2lnbmVkIFNCT00gYXR0ZXN0YXRpb24pIGRpZFxuICAgKiAgbm90IHZlcmlmeSBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleSDigJQgdGhlIHJlZ2lzdHJ5XG4gICAqICBjb250ZW50IG5vIGxvbmdlciBtYXRjaGVzIHdoYXQgdGhlIHBsYXRmb3JtIGJ1aWx0IGFuZCBzaWduZWQuICovXG4gIElNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQgPSAnSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCcsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgaW1tdXRhYmxlIOKAlCBhIHB1Ymxpc2ggcmVxdWVzdCByZWZlcmVuY2VzIGl0XG4gICAqICAoYGZyb3plbl9hdGAgc2V0KSBvciBpdCBpcyBwdWJsaXNoZWQgdG8gYSBsaXN0aW5nIOKAlCBzbyBpdCBjYW4gYmUgbmVpdGhlclxuICAgKiAgcmUtdXBsb2FkZWQsIGVkaXRlZCBub3IgZGVsZXRlZCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFBMVUdJTl9WRVJTSU9OX0ZST1pFTiA9ICdQTFVHSU5fVkVSU0lPTl9GUk9aRU4nLFxuICAvKiogVGhlIHBsdWdpbiB2ZXJzaW9uIGlzIHJlZmVyZW5jZWQgYnkgb25lIG9mIHRoZSBvcmcncyBwaXBlbGluZXMsIG9yIHB1Ymxpc2hlZFxuICAgKiAgdG8gYW4gZWNvc3lzdGVtIGxpc3Rpbmc7IGRlbGV0aW5nIGl0IG5lZWRzIGA/Zm9yY2U9dHJ1ZWAgcGx1cyBhIHN0ZXAtdXAuICovXG4gIFBMVUdJTl9WRVJTSU9OX0lOX1VTRSA9ICdQTFVHSU5fVkVSU0lPTl9JTl9VU0UnLFxuICAvKiogQSBmcmVlemUgbmFtZWQgYW4gaW1hZ2UgZGlnZXN0IHRoYXQgaXMgbm90IHRoZSB2ZXJzaW9uJ3Mgc3RvcmVkIGRpZ2VzdFxuICAgKiAgKGZhaWwgY2xvc2VkOiB3aGF0IHdhcyByZXF1ZXN0ZWQgaXMgbm90IHdoYXQgd291bGQgYmUgcHVibGlzaGVkKS4gKi9cbiAgUExVR0lOX0RJR0VTVF9NSVNNQVRDSCA9ICdQTFVHSU5fRElHRVNUX01JU01BVENIJyxcbiAgLyoqIEEgcHVibGlzaCByZXF1ZXN0IG5lZWRzIHRoZSBvcmcncyBwdWJsaXNoZXIgcHJvZmlsZSwgd2hpY2ggZG9lc24ndCBleGlzdFxuICAgKiAgeWV0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gQ2xhaW0gYSBoYW5kbGUgZmlyc3QuICovXG4gIFBVQkxJU0hFUl9SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUkVRVUlSRUQnLFxuICAvKiogVGhlIHJlcXVlc3RlZCBwdWJsaXNoZXIgaGFuZGxlIGlzIHJlc2VydmVkIChPZmZpY2lhbC9WZXJpZmllZFxuICAgKiAgcmVzZXJ2YXRpb25zLCBjb25mdXNhYmxlcykuIFN1Ym1pdCBhIGBjbGFpbWAgcmVxdWVzdCBpbnN0ZWFkLiAqL1xuICBQVUJMSVNIRVJfSEFORExFX1JFU0VSVkVEID0gJ1BVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgZmFpbGVkIGEgc3VibWl0IGdhdGUgKHB1YmxpYyB2aXNpYmlsaXR5LCBTUERYIGxpY2Vuc2UsXG4gICAqICBSRUFETUUsIHNpZ25hdHVyZSwgc2NhbiwgdnVsbmVyYWJpbGl0eSBnYXRlIOKApik7IGBkZXRhaWxzLmdhdGVzYCBsaXN0cyB0aGVtLiAqL1xuICBQVUJMSVNIX0dBVEVfRkFJTEVEID0gJ1BVQkxJU0hfR0FURV9GQUlMRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gKG9yIGl0cyBkZWNpc2lvbikgZnJvbSBhbiBvcmcgd2hvc2UgcGxhblxuICAgKiAgbGFja3MgdGhlIGB2ZXJpZmllZF9wdWJsaXNoZXJgIGZlYXR1cmUgKFRlYW0rLCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgVkVSSUZJRURfUExBTl9SRVFVSVJFRCA9ICdWRVJJRklFRF9QTEFOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdpdGggbm8gRE5TLXZlcmlmaWVkIGRvbWFpbi4gKi9cbiAgVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBmcm9tIGFuIG9yZyB3aG9zZSBvd25lciBoYXMgbm8gc2Vjb25kXG4gICAqICBmYWN0b3IgKHBhc3NrZXkgb3IgYXV0aGVudGljYXRvciBhcHApLiAqL1xuICBWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQgPSAnVkVSSUZJRURfT1dORVJfTUZBX1JFUVVJUkVEJyxcbiAgLyoqIEEgcGx1Z2luIHJlZmVyZW5jZSBuYW1lcyBhbiBlY29zeXN0ZW0gbGlzdGluZyB0aGUgb3JnIGhhc24ndCBpbnN0YWxsZWQgKG9yXG4gICAqICB3aG9zZSBpbnN0YWxsIGlzIHBlbmRpbmcsIGRlbmllZCwgb3IgZG9lc24ndCBjb3ZlciB0aGUgdmVyc2lvbiBhc2tlZCBmb3I7XG4gICAqICBgZGV0YWlscy5yZWFzb25gKSDigJQgZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCAqL1xuICBQTFVHSU5fTk9UX0lOU1RBTExFRCA9ICdQTFVHSU5fTk9UX0lOU1RBTExFRCcsXG4gIC8qKiBUaGUgb3JnJ3MgY29uc3VtcHRpb24gcG9saWN5IHJlZnVzZXMgdGhlIGxpc3Rpbmc6IGl0cyB0aWVyIGlzbid0IGFsbG93ZWQsXG4gICAqICB0aGUgbGlzdGluZyBpcyBibG9ja2VkLCBvciBhbiBhZHZpc29yeSBibG9ja3MgdGhlIHZlcnNpb24gKGBkZXRhaWxzLnJlYXNvbmApLiAqL1xuICBQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1kgPSAnUExVR0lOX0JMT0NLRURfQllfUE9MSUNZJyxcbiAgLyoqIFRoZSBsaXN0aW5nIG9yIHZlcnNpb24gY2FuJ3QgYmUgdXNlZDogeWFua2VkLCBzdXNwZW5kZWQsIG9yIHBhdXNlZCBmb3IgbmV3XG4gICAqICBpbnN0YWxscyAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9VTkFWQUlMQUJMRSA9ICdQTFVHSU5fVU5BVkFJTEFCTEUnLFxuICAvKiogQW4gYXV0by1jcmVhdGVkIHBsYWNlaG9sZGVyIHBsdWdpbiBjYW4ndCB0YWtlIHRoZSBuYW1lIG9mIGEgbGlzdGVkIHBsdWdpblxuICAgKiDigJQgaW5zdGFsbCB0aGUgbGlzdGluZyBpbnN0ZWFkLiAqL1xuICBQTFVHSU5fTkFNRV9MSVNURUQgPSAnUExVR0lOX05BTUVfTElTVEVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXNzaW9uIG5hbWVzIGEgY29tbXVuaXR5IGxpc3RpbmcgYW5vdGhlciBzdWJtaXR0ZXIgb3ducyxcbiAgICogIGEgcmVzZXJ2ZWQgbmFtZSwgYW4gT2ZmaWNpYWwvVmVyaWZpZWQgbGlzdGluZydzIG5hbWUsIG9yIG9uZSBjb25mdXNhYmxlXG4gICAqICB3aXRoIGEgdG9wIGxpc3Rpbmc7IGBkZXRhaWxzLnJlYXNvbmAgc2F5cyB3aGljaC4gKi9cbiAgTkFNRV9UQUtFTiA9ICdOQU1FX1RBS0VOJyxcbiAgLyoqIEFuIFVOUVVBTElGSUVEIHJlZmVyZW5jZSBuYW1lcyBhIHBsdWdpbiB0aGUgb3JnIERFTEVURUQ6IHJlZnVzZWQgcmF0aGVyXG4gICAqICB0aGFuIHNpbGVudGx5IGZhbGxpbmcgdGhyb3VnaCB0byBhIHNhbWUtbmFtZWQgbGlzdGluZywgd2hpY2ggd291bGQgc3dhcCB0aGVcbiAgICogIGltYWdlIGEgcGlwZWxpbmUgcnVucyB3aXRob3V0IGFueW9uZSBjaG9vc2luZyBpdCAoYGRldGFpbHMuc3RhdGU6ICdkZWxldGVkJ2ApLiAqL1xuICBQTFVHSU5fREVMRVRFRCA9ICdQTFVHSU5fREVMRVRFRCcsXG5cbiAgLy8gUGx1Z2luIGJ1aWxkIG91dGNvbWVzICg0MjIpIOKAlCB0ZXJtaW5hbCBidWlsZCBmYWlsdXJlcywgcmVwb3J0ZWQgb24gdGhlIGJ1aWxkXG4gIC8vIHN0cmVhbSBhbmQgaW4gdGhlIGJ1aWxkJ3MgZmFpbHVyZSByZWNvcmQsIG5ldmVyIGFuc3dlcmVkIG9uIGEgcmVxdWVzdC5cbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBjb3VsZCBub3QgYmUgdnVsbmVyYWJpbGl0eS1zY2FubmVkIGFmdGVyIGV2ZXJ5IHJldHJ5LCBzb1xuICAgKiAgbm90aGluZyB3YXMgcGVyc2lzdGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRSA9ICdJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFJyxcbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBoYXMgbW9yZSBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHRoYW4gdGhlIHBsYXRmb3JtXG4gICAqICBmbG9vciBgUExVR0lOX1ZVTE5fTUFYX0ZJTkRJTkdTYDsgdGhlIG1lc3NhZ2UgbGlzdHMgdGhlbSB3aXRoIHRoZWlyIGZpeGVzLiAqL1xuICBQTFVHSU5fVlVMTl9HQVRFID0gJ1BMVUdJTl9WVUxOX0dBVEUnLFxuICAvKiogQW4gdXBsb2FkIHdob3NlIE5BTUUgd291bGQgb3ZlcnJpZGUgYSBsaXN0aW5nIG9yIHRoZSBwYXJlbnQgb3JnJ3MgcGx1Z2luLFxuICAgKiAgcmVmdXNlZCBiZWNhdXNlIHRoZSBjb25zdW1wdGlvbiBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gKi9cbiAgUExVR0lOX05BTUVfU0hBRE9XUyA9ICdQTFVHSU5fTkFNRV9TSEFET1dTJyxcblxuICAvLyBCaWxsaW5nIGVycm9yc1xuICBQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCA9ICdQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCcsIC8vIDQwMlxuICBESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEID0gJ0RJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQnLCAvLyA0MDBcbiAgRElTQ09VTlRfTk9UX0ZPVU5EID0gJ0RJU0NPVU5UX05PVF9GT1VORCcsIC8vIDQwNFxuICBESVNDT1VOVF9JTkFDVElWRSA9ICdESVNDT1VOVF9JTkFDVElWRScsIC8vIDQwOVxuICBQTEFOX09WRVJfQ0FQID0gJ1BMQU5fT1ZFUl9DQVAnLCAvLyA0MDlcbiAgQURET05fT1ZFUl9DQVAgPSAnQURET05fT1ZFUl9DQVAnLCAvLyA0MDlcblxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1MDApXG4gIElOVEVSTkFMX0VSUk9SID0gJ0lOVEVSTkFMX0VSUk9SJyxcbiAgREFUQUJBU0VfRVJST1IgPSAnREFUQUJBU0VfRVJST1InLFxuXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCAoNTAxKSDigJQgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaGFzIG5vIHN1Y2ggY2FwYWJpbGl0eVxuICBOT1RfSU1QTEVNRU5URUQgPSAnTk9UX0lNUExFTUVOVEVEJyxcblxuICAvLyBTZXJ2aWNlIHVuYXZhaWxhYmxlICg1MDMpXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU0VSVklDRV9VTkFWQUlMQUJMRScsXG4gIENPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxufVxuXG4vKipcbiAqIE1hcHMgZXJyb3IgY29kZXMgdG8gdGhlaXIgZGVmYXVsdCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZVN0YXR1czogUmVjb3JkPEVycm9yQ29kZSwgbnVtYmVyPiA9IHtcbiAgW0Vycm9yQ29kZS5VTkFVVEhPUklaRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fRVhQSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9JTlZBTElEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX01JU1NJTkddOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fUkVWT0tFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5NRkFfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OU106IDQwMyxcbiAgW0Vycm9yQ29kZS5TWVNURU1fT1JHX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9URVJNU19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1NVU1BFTkRFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5BSV9ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUkVWSUVXU19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5SRVZJRVdfU0VMRl9QUk9NT1RJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuU0VQQVJBVElPTl9PRl9EVVRJRVNdOiA0MDMsXG4gIFtFcnJvckNvZGUuSFVNQU5fU0VTU0lPTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5PUkdfTUlTTUFUQ0hdOiA0MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9WSU9MQVRJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLk9SR19OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuVVNFUl9OT1RfUkVHSVNURVJFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OU19ESVNBQkxFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLk1JU1NJTkdfUkVRVUlSRURfRklFTERdOiA0MDAsXG4gIFtFcnJvckNvZGUuUFJPT0ZfT0ZfV09SS19JTlZBTElEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1VOS05PV05fUEFUSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DWUNMRV06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9QQVJTRV9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NJWkVfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuQ0xJRU5UX1VQR1JBREVfUkVRVUlSRURdOiA0MjYsXG4gIFtFcnJvckNvZGUuUVVPVEFfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLkFJX1RPS0VOX0JVREdFVF9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5SQVRFX0xJTUlUX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlNVQk1JU1NJT05fTElNSVRdOiA0MjksXG4gIFtFcnJvckNvZGUuUEFZTE9BRF9UT09fTEFSR0VdOiA0MTMsXG4gIFtFcnJvckNvZGUuQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuRFVQTElDQVRFX0VOVFJZXTogNDA5LFxuICBbRXJyb3JDb2RlLlNDQU5fQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9GUk9aRU5dOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZFUlNJT05fSU5fVVNFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9ESUdFU1RfTUlTTUFUQ0hdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSF9HQVRFX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9QTEFOX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX05PVF9JTlNUQUxMRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUExVR0lOX0JMT0NLRURfQllfUE9MSUNZXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9VTkFWQUlMQUJMRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTkFNRV9MSVNURURdOiA0MDksXG4gIFtFcnJvckNvZGUuTkFNRV9UQUtFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fREVMRVRFRF06IDQxMCxcbiAgW0Vycm9yQ29kZS5JTUFHRV9TQ0FOX1VOQVZBSUxBQkxFXTogNDIyLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WVUxOX0dBVEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUExVR0lOX05BTUVfU0hBRE9XU106IDQwOSxcbiAgW0Vycm9yQ29kZS5QQVlNRU5UX01FVEhPRF9SRVFVSVJFRF06IDQwMixcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9JTkFDVElWRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTEFOX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLkFERE9OX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLk5PVF9JTVBMRU1FTlRFRF06IDUwMSxcbiAgW0Vycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciBhbiBlcnJvciBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBFcnJvckNvZGVTdGF0dXNbY29kZV0gPz8gNTAwO1xufVxuIl19
@@ -27,3 +27,4 @@ export * from './service-registry.js';
27
27
  export * from './retention.js';
28
28
  export * from './compliance-attributes.js';
29
29
  export { leadingZeroBits, proofOfWorkHash, challengeKey, clampDifficulty, createProofOfWorkChallenge, parseProofOfWorkChallenge, verifyProofOfWork, solveProofOfWork, POW_DEFAULT_DIFFICULTY, POW_MAX_DIFFICULTY, POW_CHALLENGE_TTL_MS, type ProofOfWorkChallenge, type ProofOfWorkSolution, } from './proof-of-work.js';
30
+ export { compareSemver, isSemver, satisfiesRange } from './semver.js';
@@ -33,4 +33,5 @@ export * from './service-registry.js';
33
33
  export * from './retention.js';
34
34
  export * from './compliance-attributes.js';
35
35
  export { leadingZeroBits, proofOfWorkHash, challengeKey, clampDifficulty, createProofOfWorkChallenge, parseProofOfWorkChallenge, verifyProofOfWork, solveProofOfWork, POW_DEFAULT_DIFFICULTY, POW_MAX_DIFFICULTY, POW_CHALLENGE_TTL_MS, } from './proof-of-work.js';
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsZUFBZSxFQUNmLFlBQVksRUFFWixNQUFNLEVBQ04sT0FBTyxHQUNSLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsT0FBTyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUVwQixtQkFBbUIsRUFDbkIsY0FBYyxFQUVkLGNBQWMsRUFDZCxZQUFZLEVBQ1osY0FBYyxFQUNkLGlCQUFpQixFQUNqQixxQkFBcUIsR0FHdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFFBQVEsRUFDUixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGNBQWMsRUFJZCxnQkFBZ0IsRUFDaEIsV0FBVyxHQUNaLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLHlFQUF5RTtBQUN6RSxtRUFBbUU7QUFDbkUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxpQ0FBaUM7QUFDakMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixjQUFjLEVBQ2QsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsVUFBVSxHQUNYLE1BQU0sVUFBVSxDQUFDO0FBS2xCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEVBR2YsY0FBYyxFQUNkLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsb0JBQW9CLEVBR3BCLG9CQUFvQixHQUNyQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxHQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixHQUNwQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsUUFBUSxFQUNSLGNBQWMsRUFDZCxRQUFRLEVBQ1Isd0JBQXdCLEdBQ3pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsU0FBUyxHQUVWLE1BQU0sV0FBVyxDQUFDO0FBQ25CLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLFlBQVksRUFDWixlQUFlLEVBQ2YsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsb0JBQW9CLEdBR3JCLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0IHtcbiAgc2V0TG9nQ29udGV4dFByb3ZpZGVyLFxuICByZWRhY3RTZW5zaXRpdmUsXG4gIGNyZWF0ZUxvZ2dlcixcbiAgdHlwZSBMb2dnZXIsXG4gIGxvZ2dlcixcbiAgZGVmYXVsdCxcbn0gZnJvbSAnLi9sb2dnZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkta2V5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2FmZS1yZXF1aXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VjdXJlLWNvbXBhcmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmFzaC1oYW5kbGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmN1cnJlbmN5LWdhdGUuanMnO1xuZXhwb3J0IHtcbiAgc2VuZFN1Y2Nlc3MsXG4gIHNlbmRFcnJvcixcbiAgc2VuZFF1b3RhRXhjZWVkZWQsXG4gIHF1b3RhRXhjZWVkZWRNZXNzYWdlLFxuICB0eXBlIFF1b3RhRXhjZWVkZWREZXRhaWxzLFxuICBzZW5kUGFnaW5hdGVkTmVzdGVkLFxuICBwYWdpbmF0aW9uTWV0YSxcbiAgdHlwZSBQYWdpbmF0aW9uTWV0YSxcbiAgZXh0cmFjdERiRXJyb3IsXG4gIGVycm9yTWVzc2FnZSxcbiAgc2VuZEJhZFJlcXVlc3QsXG4gIHNlbmRJbnRlcm5hbEVycm9yLFxuICBwYXJzZVBhZ2luYXRpb25QYXJhbXMsXG4gIHR5cGUgUGFnaW5hdGlvblBhcmFtcyxcbiAgdHlwZSBTb3J0UGFyYW1zLFxufSBmcm9tICcuL3Jlc3BvbnNlLmpzJztcbmV4cG9ydCB7XG4gIGdldFBhcmFtLFxuICBwYXJzZVF1ZXJ5SW50LFxuICBwYXJzZVF1ZXJ5U3RyaW5nLFxuICBwYXJzZU9wdGlvbmFsRGF0ZSxcbiAgcGFyc2VQb3NpdGl2ZUludCxcbiAgcGFyc2VRdWVyeUludENsYW1wZWQsXG4gIHBhcnNlUGFnZSxcbiAgdmFsaWRhdGVCdWxrQXJyYXksXG4gIHBhcnNlUmVwb3J0SW50ZXJ2YWwsXG4gIHBhcnNlUmVwb3J0VGltZXpvbmUsXG4gIHBhcnNlV2Vla1N0YXJ0LFxuICBpc1ZhbGlkVGltZXpvbmUsXG4gIHBhcnNlRGF0ZVJhbmdlLFxuICB0eXBlIFBhZ2UsXG4gIHR5cGUgUmVwb3J0SW50ZXJ2YWwsXG4gIHR5cGUgV2Vla1N0YXJ0LFxuICBSRVBPUlRfSU5URVJWQUxTLFxuICBXRUVLX1NUQVJUUyxcbn0gZnJvbSAnLi9wYXJhbXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaWRlbnRpdHkuanMnO1xuLy8gSldLIHByaW1pdGl2ZXMuIFBsYXRmb3JtIElTIHRoZSB0b2tlbiBzaWduZXIsIHNvIGl0IGxlZ2l0aW1hdGVseSBuZWVkc1xuLy8gYHB1YmxpY0p3a0Zyb21gICsgYGRlclRvSm9zZVNpZ25hdHVyZWAgZnJvbSB0aGUgcGFja2FnZSBzdXJmYWNlLlxuLy8gYGp3a1RodW1icHJpbnRgIGFuZCBgcHVibGljS2V5RnJvbUp3a2AgYXJlIGtpZC1kZXJpdmF0aW9uL3ZlcmlmaWNhdGlvblxuLy8gcGx1bWJpbmcgdXNlZCBvbmx5IGluc2lkZSBhcGktY29yZSDigJQgZGVlcC1pbXBvcnQgdGhlbSBmcm9tIHRoZXJlIGluc3RlYWQgb2Zcbi8vIGxlYWtpbmcgdGhlbSB0byBldmVyeSBzZXJ2aWNlLlxuZXhwb3J0IHtcbiAgVVNFUl9UT0tFTl9BTEdPUklUSE0sXG4gIFVTRVJfVE9LRU5fQ1VSVkUsXG4gIEpXS1NfUEFUSCxcbiAgZGVjb2RlSnd0SGVhZGVyLFxuICBpc0p3a3NEb2N1bWVudCxcbiAgcHVibGljSndrRnJvbSxcbiAgZGVyVG9Kb3NlU2lnbmF0dXJlLFxuICBlbmNvZGVKd3NTaWduaW5nSW5wdXQsXG4gIGNvbXBhY3RKd3MsXG59IGZyb20gJy4vandrLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUHVibGljSndrLFxuICBKd2tzRG9jdW1lbnQsXG59IGZyb20gJy4vandrLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS5qcyc7XG5leHBvcnQge1xuICByZXNldFN1cHBvcnRBbGlhc2VzQ2FjaGUsXG4gIGdldFByaW1hcnlTdXBwb3J0QWxpYXMsXG4gIGdldEFsbFN1cHBvcnRBbGlhc2VzLFxuICByZXNvbHZlUmVjaXBpZW50QWxpYXMsXG4gIERFRkFVTFRfU1VQUE9SVF9BTElBUyxcbn0gZnJvbSAnLi9hbGlhcy1yZXNvbHZlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmN1cnJlbmN5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXVkaXQuanMnO1xuZXhwb3J0IHtcbiAgZ2V0RGVmYXVsdEtleVByb3ZpZGVyLFxuICByZXNldERlZmF1bHRLZXlQcm92aWRlcixcbiAgc2V0S2V5UHJvdmlkZXIsXG4gIGVuY3J5cHRTZWNyZXQsXG4gIGRlY3J5cHRTZWNyZXQsXG4gIGlzRW5jcnlwdGVkQmxvYixcbiAgdHlwZSBFbmNyeXB0ZWRCbG9iLFxuICB0eXBlIEtleVByb3ZpZGVyLFxuICBFbnZLZXlQcm92aWRlcixcbiAgS21zS2V5UHJvdmlkZXIsXG4gIGNyZWF0ZUJhc2VLZXlQcm92aWRlcixcbiAgaW5pdFNlY3JldEVuY3J5cHRpb24sXG4gIHR5cGUgUGVyT3JnS21zQ29uZmlnLFxuICB0eXBlIFBlck9yZ0ttc1Jlc29sdmVyLFxuICBQZXJPcmdLbXNLZXlQcm92aWRlcixcbn0gZnJvbSAnLi9zZWNyZXQtZW5jcnlwdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3JldC1yb3RhdGlvbi5qcyc7XG5leHBvcnQge1xuICBzZXRDb3VudGVyRW1pdHRlcixcbiAgcmVzZXRDb3VudGVyRW1pdHRlcixcbiAgc2V0R2F1Z2VFbWl0dGVyLFxuICByZXNldEdhdWdlRW1pdHRlcixcbiAgZW1pdEdhdWdlLFxuICBlbWl0Q291bnRlcixcbn0gZnJvbSAnLi9tZXRyaWMtZW1pdHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2F3cy1zY3J1Yi5qcyc7XG5leHBvcnQge1xuICBleHRyYWN0UHJlZGljYXRlLFxuICBTUERYX1BSRURJQ0FURV9UWVBFLFxufSBmcm9tICcuL2Rzc2UuanMnO1xuZXhwb3J0IHtcbiAgbWFza0xpbmUsXG4gIGxvb2tzU2Vuc2l0aXZlLFxuICBSRURBQ1RFRCxcbiAgU0VOU0lUSVZFX1ZBTFVFX1BBVFRFUk5TLFxufSBmcm9tICcuL3NlbnNpdGl2ZS1wYXR0ZXJucy5qcyc7XG5leHBvcnQge1xuICBpc1ByaXZhdGVBZGRyZXNzLFxuICBhc3NlcnRTYWZlVXJsLFxuICBzYWZlRmV0Y2gsXG4gIHR5cGUgU2FmZUZldGNoUmVzcG9uc2UsXG59IGZyb20gJy4vc3NyZi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vudi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXRlbnRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wbGlhbmNlLWF0dHJpYnV0ZXMuanMnO1xuZXhwb3J0IHtcbiAgbGVhZGluZ1plcm9CaXRzLFxuICBwcm9vZk9mV29ya0hhc2gsXG4gIGNoYWxsZW5nZUtleSxcbiAgY2xhbXBEaWZmaWN1bHR5LFxuICBjcmVhdGVQcm9vZk9mV29ya0NoYWxsZW5nZSxcbiAgcGFyc2VQcm9vZk9mV29ya0NoYWxsZW5nZSxcbiAgdmVyaWZ5UHJvb2ZPZldvcmssXG4gIHNvbHZlUHJvb2ZPZldvcmssXG4gIFBPV19ERUZBVUxUX0RJRkZJQ1VMVFksXG4gIFBPV19NQVhfRElGRklDVUxUWSxcbiAgUE9XX0NIQUxMRU5HRV9UVExfTVMsXG4gIHR5cGUgUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHR5cGUgUHJvb2ZPZldvcmtTb2x1dGlvbixcbn0gZnJvbSAnLi9wcm9vZi1vZi13b3JrLmpzJztcbiJdfQ==
36
+ export { compareSemver, isSemver, satisfiesRange } from './semver.js';
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsZUFBZSxFQUNmLFlBQVksRUFFWixNQUFNLEVBQ04sT0FBTyxHQUNSLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsT0FBTyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUVwQixtQkFBbUIsRUFDbkIsY0FBYyxFQUVkLGNBQWMsRUFDZCxZQUFZLEVBQ1osY0FBYyxFQUNkLGlCQUFpQixFQUNqQixxQkFBcUIsR0FHdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFFBQVEsRUFDUixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGNBQWMsRUFJZCxnQkFBZ0IsRUFDaEIsV0FBVyxHQUNaLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLHlFQUF5RTtBQUN6RSxtRUFBbUU7QUFDbkUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSxpQ0FBaUM7QUFDakMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixjQUFjLEVBQ2QsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsVUFBVSxHQUNYLE1BQU0sVUFBVSxDQUFDO0FBS2xCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEVBR2YsY0FBYyxFQUNkLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsb0JBQW9CLEVBR3BCLG9CQUFvQixHQUNyQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxHQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixHQUNwQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsUUFBUSxFQUNSLGNBQWMsRUFDZCxRQUFRLEVBQ1Isd0JBQXdCLEdBQ3pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsU0FBUyxHQUVWLE1BQU0sV0FBVyxDQUFDO0FBQ25CLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLFlBQVksRUFDWixlQUFlLEVBQ2YsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsb0JBQW9CLEdBR3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIHNldExvZ0NvbnRleHRQcm92aWRlcixcbiAgcmVkYWN0U2Vuc2l0aXZlLFxuICBjcmVhdGVMb2dnZXIsXG4gIHR5cGUgTG9nZ2VyLFxuICBsb2dnZXIsXG4gIGRlZmF1bHQsXG59IGZyb20gJy4vbG9nZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpLWtleS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NhZmUtcmVxdWlyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyZS1jb21wYXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3Jhc2gtaGFuZGxlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25jdXJyZW5jeS1nYXRlLmpzJztcbmV4cG9ydCB7XG4gIHNlbmRTdWNjZXNzLFxuICBzZW5kRXJyb3IsXG4gIHNlbmRRdW90YUV4Y2VlZGVkLFxuICBxdW90YUV4Y2VlZGVkTWVzc2FnZSxcbiAgdHlwZSBRdW90YUV4Y2VlZGVkRGV0YWlscyxcbiAgc2VuZFBhZ2luYXRlZE5lc3RlZCxcbiAgcGFnaW5hdGlvbk1ldGEsXG4gIHR5cGUgUGFnaW5hdGlvbk1ldGEsXG4gIGV4dHJhY3REYkVycm9yLFxuICBlcnJvck1lc3NhZ2UsXG4gIHNlbmRCYWRSZXF1ZXN0LFxuICBzZW5kSW50ZXJuYWxFcnJvcixcbiAgcGFyc2VQYWdpbmF0aW9uUGFyYW1zLFxuICB0eXBlIFBhZ2luYXRpb25QYXJhbXMsXG4gIHR5cGUgU29ydFBhcmFtcyxcbn0gZnJvbSAnLi9yZXNwb25zZS5qcyc7XG5leHBvcnQge1xuICBnZXRQYXJhbSxcbiAgcGFyc2VRdWVyeUludCxcbiAgcGFyc2VRdWVyeVN0cmluZyxcbiAgcGFyc2VPcHRpb25hbERhdGUsXG4gIHBhcnNlUG9zaXRpdmVJbnQsXG4gIHBhcnNlUXVlcnlJbnRDbGFtcGVkLFxuICBwYXJzZVBhZ2UsXG4gIHZhbGlkYXRlQnVsa0FycmF5LFxuICBwYXJzZVJlcG9ydEludGVydmFsLFxuICBwYXJzZVJlcG9ydFRpbWV6b25lLFxuICBwYXJzZVdlZWtTdGFydCxcbiAgaXNWYWxpZFRpbWV6b25lLFxuICBwYXJzZURhdGVSYW5nZSxcbiAgdHlwZSBQYWdlLFxuICB0eXBlIFJlcG9ydEludGVydmFsLFxuICB0eXBlIFdlZWtTdGFydCxcbiAgUkVQT1JUX0lOVEVSVkFMUyxcbiAgV0VFS19TVEFSVFMsXG59IGZyb20gJy4vcGFyYW1zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lkZW50aXR5LmpzJztcbi8vIEpXSyBwcmltaXRpdmVzLiBQbGF0Zm9ybSBJUyB0aGUgdG9rZW4gc2lnbmVyLCBzbyBpdCBsZWdpdGltYXRlbHkgbmVlZHNcbi8vIGBwdWJsaWNKd2tGcm9tYCArIGBkZXJUb0pvc2VTaWduYXR1cmVgIGZyb20gdGhlIHBhY2thZ2Ugc3VyZmFjZS5cbi8vIGBqd2tUaHVtYnByaW50YCBhbmQgYHB1YmxpY0tleUZyb21Kd2tgIGFyZSBraWQtZGVyaXZhdGlvbi92ZXJpZmljYXRpb25cbi8vIHBsdW1iaW5nIHVzZWQgb25seSBpbnNpZGUgYXBpLWNvcmUg4oCUIGRlZXAtaW1wb3J0IHRoZW0gZnJvbSB0aGVyZSBpbnN0ZWFkIG9mXG4vLyBsZWFraW5nIHRoZW0gdG8gZXZlcnkgc2VydmljZS5cbmV4cG9ydCB7XG4gIFVTRVJfVE9LRU5fQUxHT1JJVEhNLFxuICBVU0VSX1RPS0VOX0NVUlZFLFxuICBKV0tTX1BBVEgsXG4gIGRlY29kZUp3dEhlYWRlcixcbiAgaXNKd2tzRG9jdW1lbnQsXG4gIHB1YmxpY0p3a0Zyb20sXG4gIGRlclRvSm9zZVNpZ25hdHVyZSxcbiAgZW5jb2RlSndzU2lnbmluZ0lucHV0LFxuICBjb21wYWN0SndzLFxufSBmcm9tICcuL2p3ay5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFB1YmxpY0p3ayxcbiAgSndrc0RvY3VtZW50LFxufSBmcm9tICcuL2p3ay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29iamVjdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUuanMnO1xuZXhwb3J0IHtcbiAgcmVzZXRTdXBwb3J0QWxpYXNlc0NhY2hlLFxuICBnZXRQcmltYXJ5U3VwcG9ydEFsaWFzLFxuICBnZXRBbGxTdXBwb3J0QWxpYXNlcyxcbiAgcmVzb2x2ZVJlY2lwaWVudEFsaWFzLFxuICBERUZBVUxUX1NVUFBPUlRfQUxJQVMsXG59IGZyb20gJy4vYWxpYXMtcmVzb2x2ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25jdXJyZW5jeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2F1ZGl0LmpzJztcbmV4cG9ydCB7XG4gIGdldERlZmF1bHRLZXlQcm92aWRlcixcbiAgcmVzZXREZWZhdWx0S2V5UHJvdmlkZXIsXG4gIHNldEtleVByb3ZpZGVyLFxuICBlbmNyeXB0U2VjcmV0LFxuICBkZWNyeXB0U2VjcmV0LFxuICBpc0VuY3J5cHRlZEJsb2IsXG4gIHR5cGUgRW5jcnlwdGVkQmxvYixcbiAgdHlwZSBLZXlQcm92aWRlcixcbiAgRW52S2V5UHJvdmlkZXIsXG4gIEttc0tleVByb3ZpZGVyLFxuICBjcmVhdGVCYXNlS2V5UHJvdmlkZXIsXG4gIGluaXRTZWNyZXRFbmNyeXB0aW9uLFxuICB0eXBlIFBlck9yZ0ttc0NvbmZpZyxcbiAgdHlwZSBQZXJPcmdLbXNSZXNvbHZlcixcbiAgUGVyT3JnS21zS2V5UHJvdmlkZXIsXG59IGZyb20gJy4vc2VjcmV0LWVuY3J5cHRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWNyZXQtcm90YXRpb24uanMnO1xuZXhwb3J0IHtcbiAgc2V0Q291bnRlckVtaXR0ZXIsXG4gIHJlc2V0Q291bnRlckVtaXR0ZXIsXG4gIHNldEdhdWdlRW1pdHRlcixcbiAgcmVzZXRHYXVnZUVtaXR0ZXIsXG4gIGVtaXRHYXVnZSxcbiAgZW1pdENvdW50ZXIsXG59IGZyb20gJy4vbWV0cmljLWVtaXR0ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hd3Mtc2NydWIuanMnO1xuZXhwb3J0IHtcbiAgZXh0cmFjdFByZWRpY2F0ZSxcbiAgU1BEWF9QUkVESUNBVEVfVFlQRSxcbn0gZnJvbSAnLi9kc3NlLmpzJztcbmV4cG9ydCB7XG4gIG1hc2tMaW5lLFxuICBsb29rc1NlbnNpdGl2ZSxcbiAgUkVEQUNURUQsXG4gIFNFTlNJVElWRV9WQUxVRV9QQVRURVJOUyxcbn0gZnJvbSAnLi9zZW5zaXRpdmUtcGF0dGVybnMuanMnO1xuZXhwb3J0IHtcbiAgaXNQcml2YXRlQWRkcmVzcyxcbiAgYXNzZXJ0U2FmZVVybCxcbiAgc2FmZUZldGNoLFxuICB0eXBlIFNhZmVGZXRjaFJlc3BvbnNlLFxufSBmcm9tICcuL3NzcmYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmV0ZW50aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcGxpYW5jZS1hdHRyaWJ1dGVzLmpzJztcbmV4cG9ydCB7XG4gIGxlYWRpbmdaZXJvQml0cyxcbiAgcHJvb2ZPZldvcmtIYXNoLFxuICBjaGFsbGVuZ2VLZXksXG4gIGNsYW1wRGlmZmljdWx0eSxcbiAgY3JlYXRlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHBhcnNlUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHZlcmlmeVByb29mT2ZXb3JrLFxuICBzb2x2ZVByb29mT2ZXb3JrLFxuICBQT1dfREVGQVVMVF9ESUZGSUNVTFRZLFxuICBQT1dfTUFYX0RJRkZJQ1VMVFksXG4gIFBPV19DSEFMTEVOR0VfVFRMX01TLFxuICB0eXBlIFByb29mT2ZXb3JrQ2hhbGxlbmdlLFxuICB0eXBlIFByb29mT2ZXb3JrU29sdXRpb24sXG59IGZyb20gJy4vcHJvb2Ytb2Ytd29yay5qcyc7XG5leHBvcnQgeyBjb21wYXJlU2VtdmVyLCBpc1NlbXZlciwgc2F0aXNmaWVzUmFuZ2UgfSBmcm9tICcuL3NlbXZlci5qcyc7XG4iXX0=
@@ -0,0 +1,18 @@
1
+ /** True for a full `x.y.z[-pre][+build]` version (a leading `v` is allowed). */
2
+ export declare function isSemver(v: string): boolean;
3
+ /**
4
+ * -1 / 0 / 1 ordering of two versions per SemVer §11: numeric x.y.z, a
5
+ * prerelease sorts before its release, and prerelease identifiers compare
6
+ * numerically when both are numeric (`rc.2` < `rc.10`), else as ASCII, with a
7
+ * numeric identifier below an alphanumeric one and a shorter set below a
8
+ * longer one that it prefixes. Throws on a value that isn't a version.
9
+ */
10
+ export declare function compareSemver(a: string, b: string): -1 | 0 | 1;
11
+ /**
12
+ * Whether `version` satisfies an `engines`-style range: comparator sets joined
13
+ * by `||`, each a space-separated AND of `>=`, `>`, `<=`, `<`, `=`, `^`, `~` or
14
+ * bare versions (partials like `>= 26` allowed). `*` / empty match anything.
15
+ * Returns null when the range uses syntax outside that (hyphen ranges, `x`
16
+ * wildcards), so the caller can decide rather than guess.
17
+ */
18
+ export declare function satisfiesRange(version: string, range: string): boolean | null;
@@ -0,0 +1,120 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * The small slice of semver the platform needs without a dependency: ordering
5
+ * versions (SemVer 2.0 §11, prereleases included) and checking a version
6
+ * against an `engines`-style range. Shared by the CLI's `--upgrade` and the
7
+ * server's minimum-client-version gate so both order versions identically.
8
+ */
9
+ const SEMVER = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;
10
+ function parse(v) {
11
+ const m = SEMVER.exec(v.trim());
12
+ if (!m)
13
+ return null;
14
+ return { nums: [Number(m[1]), Number(m[2]), Number(m[3])], pre: m[4] ? m[4].split('.') : [] };
15
+ }
16
+ /** True for a full `x.y.z[-pre][+build]` version (a leading `v` is allowed). */
17
+ export function isSemver(v) {
18
+ return parse(v) !== null;
19
+ }
20
+ /**
21
+ * -1 / 0 / 1 ordering of two versions per SemVer §11: numeric x.y.z, a
22
+ * prerelease sorts before its release, and prerelease identifiers compare
23
+ * numerically when both are numeric (`rc.2` < `rc.10`), else as ASCII, with a
24
+ * numeric identifier below an alphanumeric one and a shorter set below a
25
+ * longer one that it prefixes. Throws on a value that isn't a version.
26
+ */
27
+ export function compareSemver(a, b) {
28
+ const x = parse(a);
29
+ const y = parse(b);
30
+ if (!x || !y)
31
+ throw new Error(`Not a semver version: ${!x ? a : b}`);
32
+ for (let i = 0; i < 3; i++) {
33
+ if (x.nums[i] !== y.nums[i])
34
+ return x.nums[i] < y.nums[i] ? -1 : 1;
35
+ }
36
+ if (!x.pre.length || !y.pre.length) {
37
+ if (x.pre.length === y.pre.length)
38
+ return 0;
39
+ return x.pre.length ? -1 : 1;
40
+ }
41
+ for (let i = 0; i < Math.max(x.pre.length, y.pre.length); i++) {
42
+ const p = x.pre[i];
43
+ const q = y.pre[i];
44
+ if (p === undefined)
45
+ return -1;
46
+ if (q === undefined)
47
+ return 1;
48
+ if (p === q)
49
+ continue;
50
+ const pn = /^\d+$/.test(p);
51
+ const qn = /^\d+$/.test(q);
52
+ if (pn && qn)
53
+ return Number(p) < Number(q) ? -1 : 1;
54
+ if (pn !== qn)
55
+ return pn ? -1 : 1;
56
+ return p < q ? -1 : 1;
57
+ }
58
+ return 0;
59
+ }
60
+ /** A partial version (`26`, `26.13`) padded to x.y.z, or null. */
61
+ function padded(v) {
62
+ const m = /^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(-[0-9A-Za-z.-]+)?$/.exec(v);
63
+ if (!m)
64
+ return null;
65
+ return `${m[1]}.${m[2] ?? 0}.${m[3] ?? 0}${m[4] ?? ''}`;
66
+ }
67
+ function satisfiesComparator(version, comparator) {
68
+ const m = /^(>=|<=|>|<|=|\^|~)?\s*(.+)$/.exec(comparator);
69
+ if (!m)
70
+ return null;
71
+ const op = m[1] ?? '=';
72
+ const base = padded(m[2]);
73
+ if (!base)
74
+ return null;
75
+ const c = compareSemver(version, base);
76
+ switch (op) {
77
+ case '>=': return c >= 0;
78
+ case '>': return c > 0;
79
+ case '<=': return c <= 0;
80
+ case '<': return c < 0;
81
+ case '=': return c === 0;
82
+ default: {
83
+ // ^ keeps the left-most non-zero part fixed; ~ keeps major.minor fixed.
84
+ const [maj, min] = base.split(/[.-]/).map(Number);
85
+ const upper = op === '~' ? `${maj}.${min + 1}.0` : maj > 0 ? `${maj + 1}.0.0` : `0.${min + 1}.0`;
86
+ return c >= 0 && compareSemver(version, `${upper}-0`) < 0;
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Whether `version` satisfies an `engines`-style range: comparator sets joined
92
+ * by `||`, each a space-separated AND of `>=`, `>`, `<=`, `<`, `=`, `^`, `~` or
93
+ * bare versions (partials like `>= 26` allowed). `*` / empty match anything.
94
+ * Returns null when the range uses syntax outside that (hyphen ranges, `x`
95
+ * wildcards), so the caller can decide rather than guess.
96
+ */
97
+ export function satisfiesRange(version, range) {
98
+ if (!isSemver(version))
99
+ return null;
100
+ const trimmed = range.trim();
101
+ if (trimmed === '' || trimmed === '*')
102
+ return true;
103
+ let any = false;
104
+ for (const set of trimmed.split('||')) {
105
+ // Join an operator to its version (`>= 26.13.0` → `>=26.13.0`), then split.
106
+ const comparators = set.trim().replace(/(>=|<=|>|<|=|\^|~)\s+/g, '$1').split(/\s+/).filter(Boolean);
107
+ let all = true;
108
+ for (const comparator of comparators) {
109
+ const ok = satisfiesComparator(version, comparator);
110
+ if (ok === null)
111
+ return null;
112
+ if (!ok)
113
+ all = false;
114
+ }
115
+ if (all)
116
+ any = true;
117
+ }
118
+ return any;
119
+ }
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtdmVyLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VtdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxNQUFNLE1BQU0sR0FBRyxvRUFBb0UsQ0FBQztBQUlwRixTQUFTLEtBQUssQ0FBQyxDQUFTO0lBQ3RCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoRyxDQUFDO0FBRUQsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxRQUFRLENBQUMsQ0FBUztJQUNoQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDaEQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFFLFNBQVM7UUFDdEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksRUFBRSxJQUFJLEVBQUU7WUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLFNBQVMsTUFBTSxDQUFDLENBQVM7SUFDdkIsTUFBTSxDQUFDLEdBQUcscURBQXFELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxVQUFrQjtJQUM5RCxNQUFNLENBQUMsR0FBRyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNYLEtBQUssSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixLQUFLLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLEtBQUssR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixLQUFLLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsU0FBUyxDQUFDO1lBQ1Isd0VBQXdFO1lBQ3hFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFxQixDQUFDO1lBQ3RFLE1BQU0sS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2pHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxPQUFlLEVBQUUsS0FBYTtJQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBTyxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNuRCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEMsNEVBQTRFO1FBQzVFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDZixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLEVBQUUsS0FBSyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxFQUFFO2dCQUFFLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksR0FBRztZQUFFLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBzbWFsbCBzbGljZSBvZiBzZW12ZXIgdGhlIHBsYXRmb3JtIG5lZWRzIHdpdGhvdXQgYSBkZXBlbmRlbmN5OiBvcmRlcmluZ1xuICogdmVyc2lvbnMgKFNlbVZlciAyLjAgwqcxMSwgcHJlcmVsZWFzZXMgaW5jbHVkZWQpIGFuZCBjaGVja2luZyBhIHZlcnNpb25cbiAqIGFnYWluc3QgYW4gYGVuZ2luZXNgLXN0eWxlIHJhbmdlLiBTaGFyZWQgYnkgdGhlIENMSSdzIGAtLXVwZ3JhZGVgIGFuZCB0aGVcbiAqIHNlcnZlcidzIG1pbmltdW0tY2xpZW50LXZlcnNpb24gZ2F0ZSBzbyBib3RoIG9yZGVyIHZlcnNpb25zIGlkZW50aWNhbGx5LlxuICovXG5cbmNvbnN0IFNFTVZFUiA9IC9edj8oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoPzotKFswLTlBLVphLXouLV0rKSk/KD86XFwrWzAtOUEtWmEtei4tXSspPyQvO1xuXG5pbnRlcmZhY2UgUGFyc2VkIHsgbnVtczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdOyBwcmU6IHN0cmluZ1tdIH1cblxuZnVuY3Rpb24gcGFyc2Uodjogc3RyaW5nKTogUGFyc2VkIHwgbnVsbCB7XG4gIGNvbnN0IG0gPSBTRU1WRVIuZXhlYyh2LnRyaW0oKSk7XG4gIGlmICghbSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7IG51bXM6IFtOdW1iZXIobVsxXSksIE51bWJlcihtWzJdKSwgTnVtYmVyKG1bM10pXSwgcHJlOiBtWzRdID8gbVs0XS5zcGxpdCgnLicpIDogW10gfTtcbn1cblxuLyoqIFRydWUgZm9yIGEgZnVsbCBgeC55LnpbLXByZV1bK2J1aWxkXWAgdmVyc2lvbiAoYSBsZWFkaW5nIGB2YCBpcyBhbGxvd2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlbXZlcih2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnNlKHYpICE9PSBudWxsO1xufVxuXG4vKipcbiAqIC0xIC8gMCAvIDEgb3JkZXJpbmcgb2YgdHdvIHZlcnNpb25zIHBlciBTZW1WZXIgwqcxMTogbnVtZXJpYyB4LnkueiwgYVxuICogcHJlcmVsZWFzZSBzb3J0cyBiZWZvcmUgaXRzIHJlbGVhc2UsIGFuZCBwcmVyZWxlYXNlIGlkZW50aWZpZXJzIGNvbXBhcmVcbiAqIG51bWVyaWNhbGx5IHdoZW4gYm90aCBhcmUgbnVtZXJpYyAoYHJjLjJgIDwgYHJjLjEwYCksIGVsc2UgYXMgQVNDSUksIHdpdGggYVxuICogbnVtZXJpYyBpZGVudGlmaWVyIGJlbG93IGFuIGFscGhhbnVtZXJpYyBvbmUgYW5kIGEgc2hvcnRlciBzZXQgYmVsb3cgYVxuICogbG9uZ2VyIG9uZSB0aGF0IGl0IHByZWZpeGVzLiBUaHJvd3Mgb24gYSB2YWx1ZSB0aGF0IGlzbid0IGEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVTZW12ZXIoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiAtMSB8IDAgfCAxIHtcbiAgY29uc3QgeCA9IHBhcnNlKGEpO1xuICBjb25zdCB5ID0gcGFyc2UoYik7XG4gIGlmICgheCB8fCAheSkgdGhyb3cgbmV3IEVycm9yKGBOb3QgYSBzZW12ZXIgdmVyc2lvbjogJHsheCA/IGEgOiBifWApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIGlmICh4Lm51bXNbaV0gIT09IHkubnVtc1tpXSkgcmV0dXJuIHgubnVtc1tpXSEgPCB5Lm51bXNbaV0hID8gLTEgOiAxO1xuICB9XG4gIGlmICgheC5wcmUubGVuZ3RoIHx8ICF5LnByZS5sZW5ndGgpIHtcbiAgICBpZiAoeC5wcmUubGVuZ3RoID09PSB5LnByZS5sZW5ndGgpIHJldHVybiAwO1xuICAgIHJldHVybiB4LnByZS5sZW5ndGggPyAtMSA6IDE7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh4LnByZS5sZW5ndGgsIHkucHJlLmxlbmd0aCk7IGkrKykge1xuICAgIGNvbnN0IHAgPSB4LnByZVtpXTtcbiAgICBjb25zdCBxID0geS5wcmVbaV07XG4gICAgaWYgKHAgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmIChxID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChwID09PSBxKSBjb250aW51ZTtcbiAgICBjb25zdCBwbiA9IC9eXFxkKyQvLnRlc3QocCk7XG4gICAgY29uc3QgcW4gPSAvXlxcZCskLy50ZXN0KHEpO1xuICAgIGlmIChwbiAmJiBxbikgcmV0dXJuIE51bWJlcihwKSA8IE51bWJlcihxKSA/IC0xIDogMTtcbiAgICBpZiAocG4gIT09IHFuKSByZXR1cm4gcG4gPyAtMSA6IDE7XG4gICAgcmV0dXJuIHAgPCBxID8gLTEgOiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKiogQSBwYXJ0aWFsIHZlcnNpb24gKGAyNmAsIGAyNi4xM2ApIHBhZGRlZCB0byB4Lnkueiwgb3IgbnVsbC4gKi9cbmZ1bmN0aW9uIHBhZGRlZCh2OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbSA9IC9edj8oXFxkKykoPzpcXC4oXFxkKykpPyg/OlxcLihcXGQrKSk/KC1bMC05QS1aYS16Li1dKyk/JC8uZXhlYyh2KTtcbiAgaWYgKCFtKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGAke21bMV19LiR7bVsyXSA/PyAwfS4ke21bM10gPz8gMH0ke21bNF0gPz8gJyd9YDtcbn1cblxuZnVuY3Rpb24gc2F0aXNmaWVzQ29tcGFyYXRvcih2ZXJzaW9uOiBzdHJpbmcsIGNvbXBhcmF0b3I6IHN0cmluZyk6IGJvb2xlYW4gfCBudWxsIHtcbiAgY29uc3QgbSA9IC9eKD49fDw9fD58PHw9fFxcXnx+KT9cXHMqKC4rKSQvLmV4ZWMoY29tcGFyYXRvcik7XG4gIGlmICghbSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IG9wID0gbVsxXSA/PyAnPSc7XG4gIGNvbnN0IGJhc2UgPSBwYWRkZWQobVsyXSEpO1xuICBpZiAoIWJhc2UpIHJldHVybiBudWxsO1xuICBjb25zdCBjID0gY29tcGFyZVNlbXZlcih2ZXJzaW9uLCBiYXNlKTtcbiAgc3dpdGNoIChvcCkge1xuICAgIGNhc2UgJz49JzogcmV0dXJuIGMgPj0gMDtcbiAgICBjYXNlICc+JzogcmV0dXJuIGMgPiAwO1xuICAgIGNhc2UgJzw9JzogcmV0dXJuIGMgPD0gMDtcbiAgICBjYXNlICc8JzogcmV0dXJuIGMgPCAwO1xuICAgIGNhc2UgJz0nOiByZXR1cm4gYyA9PT0gMDtcbiAgICBkZWZhdWx0OiB7XG4gICAgICAvLyBeIGtlZXBzIHRoZSBsZWZ0LW1vc3Qgbm9uLXplcm8gcGFydCBmaXhlZDsgfiBrZWVwcyBtYWpvci5taW5vciBmaXhlZC5cbiAgICAgIGNvbnN0IFttYWosIG1pbl0gPSBiYXNlLnNwbGl0KC9bLi1dLykubWFwKE51bWJlcikgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICAgIGNvbnN0IHVwcGVyID0gb3AgPT09ICd+JyA/IGAke21han0uJHttaW4gKyAxfS4wYCA6IG1haiA+IDAgPyBgJHttYWogKyAxfS4wLjBgIDogYDAuJHttaW4gKyAxfS4wYDtcbiAgICAgIHJldHVybiBjID49IDAgJiYgY29tcGFyZVNlbXZlcih2ZXJzaW9uLCBgJHt1cHBlcn0tMGApIDwgMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGB2ZXJzaW9uYCBzYXRpc2ZpZXMgYW4gYGVuZ2luZXNgLXN0eWxlIHJhbmdlOiBjb21wYXJhdG9yIHNldHMgam9pbmVkXG4gKiBieSBgfHxgLCBlYWNoIGEgc3BhY2Utc2VwYXJhdGVkIEFORCBvZiBgPj1gLCBgPmAsIGA8PWAsIGA8YCwgYD1gLCBgXmAsIGB+YCBvclxuICogYmFyZSB2ZXJzaW9ucyAocGFydGlhbHMgbGlrZSBgPj0gMjZgIGFsbG93ZWQpLiBgKmAgLyBlbXB0eSBtYXRjaCBhbnl0aGluZy5cbiAqIFJldHVybnMgbnVsbCB3aGVuIHRoZSByYW5nZSB1c2VzIHN5bnRheCBvdXRzaWRlIHRoYXQgKGh5cGhlbiByYW5nZXMsIGB4YFxuICogd2lsZGNhcmRzKSwgc28gdGhlIGNhbGxlciBjYW4gZGVjaWRlIHJhdGhlciB0aGFuIGd1ZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzUmFuZ2UodmVyc2lvbjogc3RyaW5nLCByYW5nZTogc3RyaW5nKTogYm9vbGVhbiB8IG51bGwge1xuICBpZiAoIWlzU2VtdmVyKHZlcnNpb24pKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdHJpbW1lZCA9IHJhbmdlLnRyaW0oKTtcbiAgaWYgKHRyaW1tZWQgPT09ICcnIHx8IHRyaW1tZWQgPT09ICcqJykgcmV0dXJuIHRydWU7XG4gIGxldCBhbnkgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBzZXQgb2YgdHJpbW1lZC5zcGxpdCgnfHwnKSkge1xuICAgIC8vIEpvaW4gYW4gb3BlcmF0b3IgdG8gaXRzIHZlcnNpb24gKGA+PSAyNi4xMy4wYCDihpIgYD49MjYuMTMuMGApLCB0aGVuIHNwbGl0LlxuICAgIGNvbnN0IGNvbXBhcmF0b3JzID0gc2V0LnRyaW0oKS5yZXBsYWNlKC8oPj18PD18Pnw8fD18XFxefH4pXFxzKy9nLCAnJDEnKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICBsZXQgYWxsID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGNvbXBhcmF0b3Igb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGNvbnN0IG9rID0gc2F0aXNmaWVzQ29tcGFyYXRvcih2ZXJzaW9uLCBjb21wYXJhdG9yKTtcbiAgICAgIGlmIChvayA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoIW9rKSBhbGwgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFsbCkgYW55ID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gYW55O1xufVxuIl19
package/package.json CHANGED
@@ -127,7 +127,7 @@
127
127
  ]
128
128
  }
129
129
  },
130
- "version": "5.2.7",
130
+ "version": "5.2.8",
131
131
  "bugs": {
132
132
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
133
133
  },