@pipeline-builder/api-server 4.4.7 → 4.4.9

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.
@@ -1,6 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { sendSuccess, sendError, generateOpenApiSpec, ErrorCode, createLogger, verifyServicePrincipal, createHealthRouter, setCounterEmitter, setGaugeEmitter, requireAuth, safeEqual, createEnvSseTicketStore, SSE_TICKET_TTL_MS, auditContextFromRequest, runWithAuditContext, sanitizeCorrelationId } from '@pipeline-builder/api-core';
3
+ import { sendSuccess, sendError, generateOpenApiSpec, ErrorCode, createLogger, verifyServicePrincipal, createHealthRouter, clientVersionGate, setCounterEmitter, setGaugeEmitter, requireAuth, safeEqual, createEnvSseTicketStore, SSE_TICKET_TTL_MS, auditContextFromRequest, runWithAuditContext, sanitizeCorrelationId } from '@pipeline-builder/api-core';
4
4
  import { Config, CoreConstants } from '@pipeline-builder/pipeline-core';
5
5
  import { getConnection } from '@pipeline-builder/pipeline-data';
6
6
  import compression from 'compression';
@@ -380,6 +380,9 @@ export function createApp(options = {}) {
380
380
  runWithAuditContext(auditContextFromRequest(req, { requestId, traceId: currentTraceId() }), next);
381
381
  });
382
382
  mountInfraEndpoints(app, options, serviceName, enableOpenApi);
383
+ // A CLI older than PIPELINE_MANAGER_MIN_VERSION gets 426 "run --upgrade"
384
+ // (no-op while unset). After the infra endpoints, so probes never see it.
385
+ app.use(clientVersionGate());
383
386
  if (enableRateLimit)
384
387
  mountRateLimiter(app, serviceName);
385
388
  applyRequestTelemetry(app);
@@ -393,4 +396,4 @@ export function createApp(options = {}) {
393
396
  wireSse(app, sseManager);
394
397
  return { app, sseManager };
395
398
  }
396
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWZhY3RvcnkuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvYXBwLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM1UsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLE9BQXlFLE1BQU0sU0FBUyxDQUFDO0FBQ2hHLE9BQU8sU0FBUyxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sNkJBQTZCLENBQUM7QUFDekgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxN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QUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BHLENBQUMsQ0FBQyxDQUFDO0lBRUgsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDOUQsSUFBSSxlQUFlO1FBQUUsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTNCLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsNEVBQTRFO0lBQzVFLCtFQUErRTtJQUMvRSxpRUFBaUU7SUFDakUsOERBQThEO0lBRTlELElBQUksU0FBUztRQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFeEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHNlbmRTdWNjZXNzLCBzZW5kRXJyb3IsIGdlbmVyYXRlT3BlbkFwaVNwZWMsIEVycm9yQ29kZSwgY3JlYXRlTG9nZ2VyLCB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsLCBjcmVhdGVIZWFsdGhSb3V0ZXIsIHNldENvdW50ZXJFbWl0dGVyLCBzZXRHYXVnZUVtaXR0ZXIsIHJlcXVpcmVBdXRoLCBzYWZlRXF1YWwsIGNyZWF0ZUVudlNzZVRpY2tldFN0b3JlLCBTU0VfVElDS0VUX1RUTF9NUywgYXVkaXRDb250ZXh0RnJvbVJlcXVlc3QsIHJ1bldpdGhBdWRpdENvbnRleHQsIHNhbml0aXplQ29ycmVsYXRpb25JZCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgT3BlbkFwaVNwZWNPcHRpb25zIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgeyBnZXRDb25uZWN0aW9uIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgY29tcHJlc3Npb24gZnJvbSAnY29tcHJlc3Npb24nO1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycyc7XG5pbXBvcnQgZXhwcmVzcywgeyB0eXBlIEV4cHJlc3MsIHR5cGUgTmV4dEZ1bmN0aW9uLCB0eXBlIFJlcXVlc3QsIHR5cGUgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCByYXRlTGltaXQsIHsgaXBLZXlHZW5lcmF0b3IgfSBmcm9tICdleHByZXNzLXJhdGUtbGltaXQnO1xuaW1wb3J0IGhlbG1ldCBmcm9tICdoZWxtZXQnO1xuaW1wb3J0IHN3YWdnZXJVaSBmcm9tICdzd2FnZ2VyLXVpLWV4cHJlc3MnO1xuaW1wb3J0IHsgdjcgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgZXRhZ01pZGRsZXdhcmUgfSBmcm9tICcuL2V0YWctbWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZSZWRpc0lkZW1wb3RlbmN5U3RvcmUsIHNldElkZW1wb3RlbmN5U3RvcmUsIHR5cGUgSWRlbXBvdGVuY3lTdG9yZSB9IGZyb20gJy4vaWRlbXBvdGVuY3ktbWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgeyBtZXRyaWNzTWlkZGxld2FyZSwgbWV0cmljc0hhbmRsZXIsIGluY0NvdW50ZXIsIHNldEdhdWdlIH0gZnJvbSAnLi9tZXRyaWNzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNoYXJlZFJhdGVMaW1pdFN0b3JlIH0gZnJvbSAnLi9yYXRlLWxpbWl0LXN0b3JlLmpzJztcbmltcG9ydCB7IHJlYWRpbmVzc0d1YXJkIH0gZnJvbSAnLi9yZWFkaW5lc3MuanMnO1xuaW1wb3J0IHsgY3VycmVudFRyYWNlSWQgfSBmcm9tICcuL3RyYWNpbmcuanMnO1xuaW1wb3J0IHsgU1NFTWFuYWdlciwgU1NFX1JFUVVFU1RfSURfUkUgfSBmcm9tICcuLi9odHRwL3NzZS1jb25uZWN0aW9uLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNTU0VSZWxheSB9IGZyb20gJy4uL2h0dHAvc3NlLXJlbGF5LmpzJztcblxuLy8gV2lyZSBhcGktY29yZSdzIGNvdW50ZXIgc2hpbSB0byB0aGUgcmVhbCBwcm9tLWNsaWVudCByZWdpc3RyeS4gVGhpcyBpc1xuLy8gYSBuby1vcCB1bnRpbCBpbmNDb3VudGVyIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgKGxhenkgcmVnaXN0cmF0aW9uXG4vLyBpbiBtZXRyaWNzLnRzKSwgYW5kIGxldHMgYXBpLWNvcmUgaGVscGVycyBsaWtlIHRoZSBxdW90YSBjbGllbnQgcmVjb3JkXG4vLyBgcXVvdGFfZmFpbF9vcGVuX3RvdGFsYCB3aXRob3V0IHRha2luZyBhIGhhcmQgZGVwIG9uIGFwaS1zZXJ2ZXIuXG5zZXRDb3VudGVyRW1pdHRlcihpbmNDb3VudGVyKTtcbi8vIFNhbWUgc2VhbSBmb3IgR0FVR0VTLiBwaXBlbGluZS1kYXRhJ3MgcmVhZC1yZXBsaWNhIGxhZyBzYW1wbGVyIG5lZWRzIGl0OlxuLy8gcmVwbGF5IGxhZyBhbmQgdGhlIHN0YXRlIG9mIHRoZSByZWFkIGZhbGxiYWNrIGNpcmN1aXQgYXJlIHNhbXBsZWRcbi8vIHBvaW50LWluLXRpbWUgdmFsdWVzLCBzbyBlbWl0dGluZyB0aGVtIGFzIGNvdW50ZXJzIHdvdWxkIG1ha2UgZXZlcnkgcXVlcnlcbi8vIG92ZXIgdGhlbSB3cm9uZy4gcGlwZWxpbmUtZGF0YSBkZXBlbmRzIG9uIGFwaS1jb3JlIGFuZCBtdXN0IG5vdCBkZXBlbmQgb25cbi8vIGFwaS1zZXJ2ZXIsIGhlbmNlIHRoZSBzaGltIHJhdGhlciB0aGFuIGEgZGlyZWN0IGltcG9ydC5cbnNldEdhdWdlRW1pdHRlcihzZXRHYXVnZSk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYW4gRXhwcmVzcyBhcHBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUFwcE9wdGlvbnMge1xuICAvKiogRW5hYmxlIENPUlMgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUNvcnM/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIEhlbG1ldCBzZWN1cml0eSBoZWFkZXJzIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVIZWxtZXQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHJhdGUgbGltaXRpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZVJhdGVMaW1pdD86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgSlNPTiBib2R5IHBhcnNpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUpzb25Cb2R5PzogYm9vbGVhbjtcbiAgLyoqIEpTT04gYm9keSBzaXplIGxpbWl0IChkZWZhdWx0OiAnMW1iJykgKi9cbiAganNvbkxpbWl0Pzogc3RyaW5nO1xuICAvKipcbiAgICogUGF0aCBwcmVmaXhlcyB0aGUgZ2xvYmFsIEpTT04gYm9keSBwYXJzZXIgbXVzdCBOT1QgdG91Y2gg4oCUIGZvciByb3V0ZXMgdGhhdCBuZWVkXG4gICAqIHRoZSByYXcgYm9keSAoZS5nLiBhIFN0cmlwZSB3ZWJob29rIHdob3NlIEhNQUMgaXMgY29tcHV0ZWQgb3ZlciB0aGUgZXhhY3QgYnl0ZXMpLlxuICAgKiBXaXRob3V0IHRoaXMgdGhlIGdsb2JhbCBwYXJzZXIgY29uc3VtZXMgdGhlIGJvZHkgZmlyc3QgYW5kIGEgbGF0ZXIgYGV4cHJlc3MucmF3KClgXG4gICAqIG9uIHRoZSBzYW1lIHBhdGggaXMgYSBuby1vcCwgYnJlYWtpbmcgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi5cbiAgICovXG4gIGpzb25Cb2R5RXhjbHVkZT86IHN0cmluZ1tdO1xuICAvKiogRW5hYmxlIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlVXJsRW5jb2RlZD86IGJvb2xlYW47XG4gIC8qKiBVUkwtZW5jb2RlZCBib2R5IHNpemUgbGltaXQgKGRlZmF1bHQ6ICcxbWInKSAqL1xuICB1cmxFbmNvZGVkTGltaXQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gU1NFIG1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgc3NlTWFuYWdlcj86IFNTRU1hbmFnZXI7XG4gIC8qKlxuICAgKiBTZXJ2ZSB0aGUgcGVyLXJlcXVlc3QgYnVpbGQtbG9nIHN0cmVhbTogYFBPU1QgL2xvZ3MvdGlja2V0YCArXG4gICAqIGBHRVQgL2xvZ3MvOnJlcXVlc3RJZGAsIGEgbG9nIHRpY2tldCBzdG9yZSwgdGhlIGNyb3NzLXBvZCByZWxheSwgYW5kXG4gICAqIGBjdHgubG9nYCBmcmFtZXMgcHVzaGVkIHRvIFNTRS4gRGVmYXVsdCBmYWxzZSDigJQgYSBzZXJ2aWNlIHdpdGhvdXQgaXQgaGFzIG5vXG4gICAqIGAvbG9nc2Agcm91dGVzIGFuZCBgY3R4LmxvZ2Agb25seSB3cml0ZXMgdG8gdGhlIGxvZ2dlci5cbiAgICovXG4gIGxvZ1N0cmVhbT86IGJvb2xlYW47XG4gIC8qKiBIZWFsdGggY2hlY2sgZGVwZW5kZW5jeSBjaGVja2VyIOKAlCBpZiBwcm92aWRlZCwgL2hlYWx0aCByZXBvcnRzIGRlcGVuZGVuY3kgc3RhdHVzICovXG4gIGNoZWNrRGVwZW5kZW5jaWVzPzogKCkgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nPj47XG4gIC8qKlxuICAgKiBTZXJ2ZSB0aGUgT3BlbkFQSSBzcGVjIGF0IGAvZG9jcy9vcGVuYXBpLmpzb25gIGFuZCBTd2FnZ2VyIFVJIGF0IGAvZG9jc2AuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIE9GRiB1bmRlciBgTk9ERV9FTlY9cHJvZHVjdGlvbmA6IHRoZSByb3V0ZXMgYXJlIHJlZ2lzdGVyZWQgYWJvdmVcbiAgICogdGhlIHJhdGUgbGltaXRlciBhbmQgYXJlIG5vdCBhdXRoLWdhdGVkLCBzbyBpbiBwcm9kdWN0aW9uIHRoZXkgd291bGQgcHVibGlzaFxuICAgKiB0aGUgZnVsbCByb3V0ZSArIHNjaGVtYSBpbnZlbnRvcnkgb2YgZXZlcnkgc2VydmljZSB0byBhbnlvbmUgd2hvIGNvdWxkIHJlYWNoXG4gICAqIHRoZSBwb3J0LiBQYXNzIGB0cnVlYCBleHBsaWNpdGx5IHRvIHNlcnZlIHRoZW0gaW4gcHJvZHVjdGlvbiBhbnl3YXkuXG4gICAqL1xuICBlbmFibGVPcGVuQXBpPzogYm9vbGVhbjtcbiAgLyoqIE9wZW5BUEkgc3BlYyBjdXN0b21pemF0aW9uIG9wdGlvbnMgKi9cbiAgb3BlbkFwaU9wdGlvbnM/OiBPcGVuQXBpU3BlY09wdGlvbnM7XG4gIC8qKiBFbmFibGUgZ3ppcC9kZWZsYXRlIHJlc3BvbnNlIGNvbXByZXNzaW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVDb21wcmVzc2lvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZGVtcG90ZW5jeSByZXBsYXktY2FjaGUgYmFja2VuZCBmb3Iga2V5ZWQgbXV0YXRpb24gcmV0cmllcy4gV2hlbiBvbWl0dGVkLFxuICAgKiBjcmVhdGVBcHAgYXV0by13aXJlcyB0aGUgc2hhcmVkIGVudiBSZWRpcyBzdG9yZSAobXVsdGktcmVwbGljYSBkZWR1cCkgaWZcbiAgICogUmVkaXMgaXMgY29uZmlndXJlZCwgZWxzZSBrZWVwcyB0aGUgaW4tbWVtb3J5IGRlZmF1bHQgKHNpbmdsZS1yZXBsaWNhKS5cbiAgICogUGFzcyBhbiBleHBsaWNpdCBzdG9yZSB0byBpbmplY3QgYSBiZXNwb2tlIGJhY2tlbmQgKGUuZy4gYSBzZXJ2aWNlJ3Mgb3duXG4gICAqIGlvcmVkaXMgY29ubmVjdGlvbikuXG4gICAqL1xuICBpZGVtcG90ZW5jeVN0b3JlPzogSWRlbXBvdGVuY3lTdG9yZTtcbiAgLyoqXG4gICAqIEV4dHJhIHdhcm11cCBjYWxsYmFja3MgaW52b2tlZCBieSBgR0VUIC93YXJtdXBgIGluIGFkZGl0aW9uIHRvIHRoZVxuICAgKiBkZWZhdWx0IFBvc3RncmVzIHBpbmcuIFVzZSBmb3Igc2VydmljZXMgdGhhdCBkZXBlbmQgb24gTW9uZ28sIFJlZGlzLFxuICAgKiBTUVMsIGV0Yy4g4oCUIHByZS13YXJtaW5nIG9wZW5zIGNvbm5lY3Rpb24gcG9vbHMgYmVmb3JlIHJlYWwgdHJhZmZpY1xuICAgKiBhcnJpdmVzLiBFYWNoIGNhbGxiYWNrIHNob3VsZCByZXNvbHZlIHdoZW4gaXRzIGRlcGVuZGVuY3kgaXMgcmVhZHk7XG4gICAqIGFueSByZWplY3Rpb24gY2F1c2VzIC93YXJtdXAgdG8gcmV0dXJuIDUwMy5cbiAgICovXG4gIHdhcm11cEhvb2tzPzogQXJyYXk8KCkgPT4gUHJvbWlzZTx2b2lkPj47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBcHBSZXN1bHQge1xuICAvKiogQ29uZmlndXJlZCBFeHByZXNzIGFwcGxpY2F0aW9uICovXG4gIGFwcDogRXhwcmVzcztcbiAgLyoqIFNTRSBtYW5hZ2VyIGluc3RhbmNlICovXG4gIHNzZU1hbmFnZXI6IFNTRU1hbmFnZXI7XG59XG5cbi8qKiBIZWxtZXQgKHN0cmljdCBDU1ApLCBDT1JTLCBjb21wcmVzc2lvbiBhbmQgRVRhZ3MuICovXG5mdW5jdGlvbiBhcHBseVNlY3VyaXR5SGVhZGVycyhhcHA6IEV4cHJlc3MsIG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMsIGVuYWJsZU9wZW5BcGk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgeyBlbmFibGVDb3JzID0gdHJ1ZSwgZW5hYmxlSGVsbWV0ID0gdHJ1ZSwgZW5hYmxlQ29tcHJlc3Npb24gPSB0cnVlIH0gPSBvcHRpb25zO1xuICAvLyBTd2FnZ2VyIFVJIG5lZWRzIHVuc2FmZS1pbmxpbmUgKyB1bnNhZmUtZXZhbCBmb3IgaXRzIGJ1bmRsZWQgc2NyaXB0cyDigJRcbiAgLy8gYnV0IENTUCBpcyBvbmx5IHJlbGF4ZWQgdGhhdCBmYXIgd2hlbiAoYSkgT3BlbkFQSSBpcyBlbmFibGVkIEFORCAoYikgd2UncmVcbiAgLy8gbm90IGluIHByb2R1Y3Rpb24uIEluIHByb2QsIFN3YWdnZXIgc2hvdWxkIGJlIHNlcnZlZCBiZWhpbmQgYSBzZXBhcmF0ZVxuICAvLyBob3N0IG9yIGF1dGgtZ2F0ZWQgcm91dGU7IHRoZSBtYWluIGFwcCBrZWVwcyB0aGUgc3RyaWN0IENTUCBzbyBhIFN0b3JlZFxuICAvLyBYU1MgaW4gYW55IGhhbmRsZXIgY2FuJ3QgYGV2YWwoKWAgYXJiaXRyYXJ5IHNjcmlwdC5cbiAgY29uc3QgYWxsb3dTd2FnZ2VyQ3NwID0gZW5hYmxlT3BlbkFwaSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nO1xuICBpZiAoZW5hYmxlSGVsbWV0KSB7XG4gICAgYXBwLnVzZShoZWxtZXQoe1xuICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IHtcbiAgICAgICAgICBkZWZhdWx0U3JjOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgc2NyaXB0U3JjOiBhbGxvd1N3YWdnZXJDc3BcbiAgICAgICAgICAgID8gW1wiJ3NlbGYnXCIsIFwiJ3Vuc2FmZS1pbmxpbmUnXCIsIFwiJ3Vuc2FmZS1ldmFsJ1wiXVxuICAgICAgICAgICAgOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgc3R5bGVTcmM6IFtcIidzZWxmJ1wiLCBcIid1bnNhZmUtaW5saW5lJ1wiXSxcbiAgICAgICAgICBpbWdTcmM6IFtcIidzZWxmJ1wiLCAnZGF0YTonLCAnYmxvYjonXSxcbiAgICAgICAgICBjb25uZWN0U3JjOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgZm9udFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIG9iamVjdFNyYzogW1wiJ25vbmUnXCJdLFxuICAgICAgICAgIGZyYW1lQW5jZXN0b3JzOiBbXCInbm9uZSdcIl0sXG4gICAgICAgICAgYmFzZVVyaTogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIGZvcm1BY3Rpb246IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGVuYWJsZUNvcnMpIHtcbiAgICBhcHAudXNlKGNvcnMoQ29uZmlnLmdldCgnc2VydmVyJykuY29ycykpO1xuICB9XG5cbiAgLy8gUmVzcG9uc2UgY29tcHJlc3Npb24gKGd6aXAvZGVmbGF0ZSkg4oCUIHNraXAgU1NFIHN0cmVhbXNcbiAgaWYgKGVuYWJsZUNvbXByZXNzaW9uKSB7XG4gICAgYXBwLnVzZShjb21wcmVzc2lvbih7XG4gICAgICBmaWx0ZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgLy8gRG9uJ3QgY29tcHJlc3MgU1NFIHN0cmVhbXMuIE1hdGNoIGJ5IGluY2x1c2lvbjogdGhlIEFjY2VwdCBoZWFkZXIgaXNcbiAgICAgICAgLy8gb2Z0ZW4gYSBsaXN0IChlLmcuIFwidGV4dC9ldmVudC1zdHJlYW0sICovKlwiKSwgd2hpY2ggZXhhY3QgZXF1YWxpdHlcbiAgICAgICAgLy8gd291bGQgbWlzcywgY29tcHJlc3NpbmcvYnVmZmVyaW5nIHRoZSBzdHJlYW0uXG4gICAgICAgIGlmICgocmVxLmhlYWRlcnMuYWNjZXB0IHx8ICcnKS5pbmNsdWRlcygndGV4dC9ldmVudC1zdHJlYW0nKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gY29tcHJlc3Npb24uZmlsdGVyKHJlcSwgcmVzKTtcbiAgICAgIH0sXG4gICAgICB0aHJlc2hvbGQ6IENvcmVDb25zdGFudHMuQ09NUFJFU1NJT05fVEhSRVNIT0xEX0JZVEVTLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEVUYWcgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgR0VUIHJlcXVlc3RzICgzMDQgTm90IE1vZGlmaWVkKVxuICBhcHAudXNlKGV0YWdNaWRkbGV3YXJlKCkpO1xufVxuXG4vKiogSlNPTiArIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2Vycy4gKi9cbmZ1bmN0aW9uIGFwcGx5Qm9keVBhcnNpbmcoYXBwOiBFeHByZXNzLCBvcHRpb25zOiBDcmVhdGVBcHBPcHRpb25zKTogdm9pZCB7XG4gIGNvbnN0IHsgZW5hYmxlSnNvbkJvZHkgPSB0cnVlLCBqc29uTGltaXQgPSAnMW1iJywgZW5hYmxlVXJsRW5jb2RlZCA9IHRydWUsIHVybEVuY29kZWRMaW1pdCA9ICcxbWInIH0gPSBvcHRpb25zO1xuICBpZiAoZW5hYmxlSnNvbkJvZHkpIHtcbiAgICBjb25zdCBqc29uUGFyc2VyID0gZXhwcmVzcy5qc29uKHsgbGltaXQ6IGpzb25MaW1pdCB9KTtcbiAgICBjb25zdCBleGNsdWRlID0gb3B0aW9ucy5qc29uQm9keUV4Y2x1ZGUgPz8gW107XG4gICAgaWYgKGV4Y2x1ZGUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gU2tpcCB0aGUgZ2xvYmFsIEpTT04gcGFyc2VyIGZvciByYXctYm9keSBwYXRocyBzbyBhIHBlci1wYXRoIGBleHByZXNzLnJhdygpYFxuICAgICAgLy8gY2FuIHJlYWQgdGhlIGV4YWN0IGJ5dGVzIChzZWUgYGpzb25Cb2R5RXhjbHVkZWApLlxuICAgICAgYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IChleGNsdWRlLnNvbWUoKHApID0+IHJlcS5wYXRoLnN0YXJ0c1dpdGgocCkpID8gbmV4dCgpIDoganNvblBhcnNlcihyZXEsIHJlcywgbmV4dCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwLnVzZShqc29uUGFyc2VyKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlVXJsRW5jb2RlZCkge1xuICAgIGFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgZXh0ZW5kZWQ6IHRydWUsIGxpbWl0OiB1cmxFbmNvZGVkTGltaXQgfSkpO1xuICB9XG59XG5cbi8qKlxuICogSGVhbHRoLCByZWFkaW5lc3MgZ3VhcmQsIGAvd2FybXVwYCwgYC9tZXRyaWNzYCBhbmQgdGhlIE9wZW5BUEkgZG9jcyDigJQgYWxsXG4gKiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgcmF0ZSBsaW1pdGVyIHNvIHRoZXkgYXJlIG5ldmVyIHRocm90dGxlZC5cbiAqL1xuZnVuY3Rpb24gbW91bnRJbmZyYUVuZHBvaW50cyhhcHA6IEV4cHJlc3MsIG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMsIHNlcnZpY2VOYW1lOiBzdHJpbmcsIGVuYWJsZU9wZW5BcGk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgeyBjaGVja0RlcGVuZGVuY2llcywgb3BlbkFwaU9wdGlvbnMsIHdhcm11cEhvb2tzID0gW10gfSA9IG9wdGlvbnM7XG5cbiAgYXBwLnVzZShjcmVhdGVIZWFsdGhSb3V0ZXIoe1xuICAgIHNlcnZpY2VOYW1lLFxuICAgIGNoZWNrRGVwZW5kZW5jaWVzLFxuICB9KSk7XG5cbiAgLy8gUmVhZGluZXNzIGd1YXJkIOKAlCA1MDNzIGJ1c2luZXNzIHRyYWZmaWMgd2hpbGUgdGhlIHNlcnZpY2UgaXMgTm90UmVhZHlcbiAgLy8gKGRhdGFzdG9yZSBzdGlsbCBjb25uZWN0aW5nIGF0IHN0YXJ0dXAsIG9yIGRyb3BwZWQpLiBNb3VudGVkIHJpZ2h0IGFmdGVyXG4gIC8vIHRoZSBoZWFsdGggcm91dGVyIGFuZCBiZWZvcmUgZXZlcnl0aGluZyBlbHNlIHNvIGEgTm90UmVhZHkgcmVxdWVzdCBpc1xuICAvLyByZWplY3RlZCBjaGVhcGx5LCBiZWZvcmUgcmF0ZS1saW1pdCAvIGlkZW1wb3RlbmN5IC8gYnVzaW5lc3MgaGFuZGxlcnMgZXZlclxuICAvLyB0b3VjaCBhIGRpc2Nvbm5lY3RlZCBkYXRhc3RvcmUuIEl0IGFsbG93bGlzdHMgdGhlIGluZnJhIGVuZHBvaW50c1xuICAvLyAoL21ldHJpY3MsIC93YXJtdXAsIC9kb2NzLCAvbG9ncykgcmVnaXN0ZXJlZCBiZWxvdywgcGx1cyAvaGVhbHRoICsgL3JlYWR5LlxuICBhcHAudXNlKHJlYWRpbmVzc0d1YXJkKCkpO1xuXG4gIC8vIFdhcm0tdXAgZW5kcG9pbnQg4oCUIHByZS1vcGVucyBjb25uZWN0aW9uIHBvb2xzIHNvIHRoZSBmaXJzdCByZWFsIHJlcXVlc3RcbiAgLy8gZG9lc24ndCBwYXkgY29sZC1zdGFydCBsYXRlbmN5LiBBbHdheXMgcGluZ3MgUG9zdGdyZXM7IHNlcnZpY2VzIHVzaW5nXG4gIC8vIE1vbmdvIC8gUmVkaXMgLyBTUVMgcGFzcyBgd2FybXVwSG9va3NgIHNvIHRob3NlIGFyZSB3YXJtZWQgaW4gcGFyYWxsZWwuXG4gIC8vXG4gIC8vIEdBVEVEIHRvIHZlcmlmaWVkIHNlcnZpY2UgcHJpbmNpcGFscy4gRXZlcnkgaGl0IHJ1bnMgYSBQb3N0Z3JlcyByb3VuZC10cmlwXG4gIC8vIHBsdXMgYWxsIGB3YXJtdXBIb29rc2AgKE1vbmdvL1JlZGlzL1NRUyksIHNvIGFuIG9wZW4gZW5kcG9pbnQgd291bGQgbGV0IGFuXG4gIC8vIGFub255bW91cyBsb29wIGFtcGxpZnkgaW50byBkYXRhc3RvcmUgbG9hZCBvbiBldmVyeSBzZXJ2aWNlIGluIHRoZSBmbGVldCDigJRcbiAgLy8gYW5kIGl0IGlzIHJlZ2lzdGVyZWQgYWJvdmUgdGhlIHJhdGUgbGltaXRlciwgc28gbm90aGluZyB3b3VsZCB0aHJvdHRsZSBpdC5cbiAgLy8gYHZlcmlmeVNlcnZpY2VQcmluY2lwYWxgIGNoZWNrcyB0aGUgYmVhcmVyIHRva2VuIGNyeXB0b2dyYXBoaWNhbGx5LCBzbyBpdCBpc1xuICAvLyBzYWZlIGhlcmUsIGFib3ZlIGByZXF1aXJlQXV0aGAuXG4gIGFwcC5nZXQoJy93YXJtdXAnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCF2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsKHJlcSkpIHtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDQwNCwgJ05vdCBmb3VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRDb25uZWN0aW9uKCkudGVzdENvbm5lY3Rpb24oKSxcbiAgICAgICAgLi4ud2FybXVwSG9va3MubWFwKChob29rKSA9PiBob29rKCkpLFxuICAgICAgXSk7XG4gICAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyB3YXJtZWQ6IHRydWUsIGhvb2tzOiB3YXJtdXBIb29rcy5sZW5ndGggfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdXYXJtdXAgZmFpbGVkJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgZW5kcG9pbnQg4oCUIGFsd2F5cyByZWdpc3RlcmVkIChuZXZlciB0aHJvdHRsZWQpLlxuICAvL1xuICAvLyBPcHRpb25hbGx5IGdhdGVkOiB3aGVuIGBNRVRSSUNTX1NDUkFQRV9UT0tFTmAgaXMgc2V0LCB0aGUgc2NyYXBlciBtdXN0IHNlbmRcbiAgLy8gaXQgYXMgYSBiZWFyZXIgdG9rZW4gKFByb21ldGhldXMgYGJlYXJlcl90b2tlbmAgLyBgYmVhcmVyX3Rva2VuX2ZpbGVgIGluIHRoZVxuICAvLyBzY3JhcGUgY29uZmlnKS4gTGVmdCB1bmdhdGVkIHdoZW4gdW5zZXQgc28gZW5hYmxpbmcgaXQgaXMgYSBkZWxpYmVyYXRlLFxuICAvLyBjb29yZGluYXRlZCBjaGFuZ2UgcmF0aGVyIHRoYW4gYSBzaWxlbnQgbW9uaXRvcmluZyBvdXRhZ2Ug4oCUIHRlbmFudCBpZHMgc3RheVxuICAvLyBvdXQgb2YgdGhlIG91dHB1dCByZWdhcmRsZXNzLCBiZWNhdXNlIHRoZSBwZXItb3JnIGxhYmVsIGRlZmF1bHRzIE9GRiAoc2VlXG4gIC8vIEhUVFBfTUVUUklDU19PUkdfU0FNUExFX1JBVEUgaW4gbWV0cmljcy50cykuXG4gIGNvbnN0IG1ldHJpY3NUb2tlbiA9IHByb2Nlc3MuZW52Lk1FVFJJQ1NfU0NSQVBFX1RPS0VOO1xuICBhcHAuZ2V0KCcvbWV0cmljcycsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGlmICghbWV0cmljc1Rva2VuKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlciA9IHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgY29uc3QgcHJlc2VudGVkID0gaGVhZGVyPy5zdGFydHNXaXRoKCdCZWFyZXIgJykgPyBoZWFkZXIuc2xpY2UoNykgOiB1bmRlZmluZWQ7XG4gICAgLy8gQ29uc3RhbnQtdGltZSBjb21wYXJlIOKAlCBhIGxlbmd0aC1pbmRlcGVuZGVudCBlcXVhbGl0eSBjaGVjayBoZXJlIHdvdWxkXG4gICAgLy8gbGVhayB0aGUgdG9rZW4gYSBieXRlIGF0IGEgdGltZS5cbiAgICBpZiAoIXByZXNlbnRlZCB8fCAhc2FmZUVxdWFsKHByZXNlbnRlZCwgbWV0cmljc1Rva2VuKSkge1xuICAgICAgc2VuZEVycm9yKHJlcywgNDA0LCAnTm90IGZvdW5kJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5leHQoKTtcbiAgfSwgbWV0cmljc0hhbmRsZXIoKSk7XG5cbiAgaWYgKGVuYWJsZU9wZW5BcGkpIHtcbiAgICBjb25zdCBzcGVjID0gZ2VuZXJhdGVPcGVuQXBpU3BlYyhvcGVuQXBpT3B0aW9ucyk7XG4gICAgYXBwLmdldCgnL2RvY3Mvb3BlbmFwaS5qc29uJywgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgIHJlcy5qc29uKHNwZWMpO1xuICAgIH0pO1xuICAgIGFwcC51c2UoJy9kb2NzJywgc3dhZ2dlclVpLnNlcnZlLCBzd2FnZ2VyVWkuc2V0dXAoc3BlYywge1xuICAgICAgY3VzdG9tU2l0ZVRpdGxlOiBvcGVuQXBpT3B0aW9ucz8udGl0bGUgPz8gJ1BpcGVsaW5lIEJ1aWxkZXIgQVBJIERvY3MnLFxuICAgIH0pKTtcbiAgfVxufVxuXG4vKiogR2xvYmFsIHJhdGUgbGltaXRlciDigJQgc2hhcmVkIGFjcm9zcyByZXBsaWNhcyB2aWEgdGhlIGVudiBSZWRpcyB3aGVuIGNvbmZpZ3VyZWQuICovXG5mdW5jdGlvbiBtb3VudFJhdGVMaW1pdGVyKGFwcDogRXhwcmVzcywgc2VydmljZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCByYXRlTGltaXRDb25maWcgPSBDb25maWcuZ2V0KCdyYXRlTGltaXQnKTtcblxuICBjb25zdCByYXRlTGltaXRPcHRpb25zOiBQYXJhbWV0ZXJzPHR5cGVvZiByYXRlTGltaXQ+WzBdID0ge1xuICAgIG1heDogcmF0ZUxpbWl0Q29uZmlnLm1heCxcbiAgICB3aW5kb3dNczogcmF0ZUxpbWl0Q29uZmlnLndpbmRvd01zLFxuICAgIHN0YW5kYXJkSGVhZGVyczogdHJ1ZSxcbiAgICBsZWdhY3lIZWFkZXJzOiBmYWxzZSxcbiAgICAvLyBTa2lwIHJhdGUgbGltaXRpbmcgb25seSBmb3IgQ1JZUFRPR1JBUEhJQ0FMTFktVkVSSUZJRUQgaW50ZXJuYWwgc2VydmljZVxuICAgIC8vIGNhbGxlcnMuIFRoZSBsaW1pdGVyIHJ1bnMgYmVmb3JlIHJlcXVpcmVBdXRoLCBzbyBhIHBsYWludGV4dCBoZWFkZXJcbiAgICAvLyB3b3VsZCBiZSBzcG9vZmFibGUgYnkgYW55IGV4dGVybmFsIGNsaWVudCDihpIgdG90YWwgYnlwYXNzLlxuICAgIC8vIHZlcmlmeVNlcnZpY2VQcmluY2lwYWwgdmVyaWZpZXMgdGhlIHNpZ25lZCBzZXJ2aWNlIEpXVCBpbnN0ZWFkO1xuICAgIC8vIGludGVyLXNlcnZpY2UgY2FsbGVycyBhbGwgc2VuZCBvbmUgKGdldFNlcnZpY2VBdXRoSGVhZGVyKS5cbiAgICBza2lwOiAocmVxOiBSZXF1ZXN0KSA9PiB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsKHJlcSksXG4gICAgLy8gS2V5IG9uIGNsaWVudCBJUCBvbmx5LiBUaGUgbGltaXRlciBydW5zIHByZS1hdXRoLCBzbyBgcmVxLnVzZXJgIGlzIHVuc2V0XG4gICAgLy8gYW5kIGFueSBvcmcgaWQgd291bGQgY29tZSBmcm9tIHRoZSBjYWxsZXItc3VwcGxpZWQgYHgtb3JnLWlkYCBoZWFkZXIg4oCUXG4gICAgLy8gc3Bvb2ZhYmxlLCBsZXR0aW5nIGFuIGF0dGFja2VyIHJvdGF0ZSB2YWx1ZXMgdG8gZXZhZGUgdGhlIGJ1Y2tldCBvclxuICAgIC8vIGZsb29kIGEgdmljdGltIG9yZydzIGJ1Y2tldC4gaXBLZXlHZW5lcmF0b3Igbm9ybWFsaXplcyBJUHY2IHRvIGEgLzY0XG4gICAgLy8gcHJlZml4IChhbHNvIHJlcXVpcmVkIGJ5IGV4cHJlc3MtcmF0ZS1saW1pdCA4LngncyB2YWxpZGF0b3IpLlxuICAgIGtleUdlbmVyYXRvcjogKHJlcTogUmVxdWVzdCkgPT4gaXBLZXlHZW5lcmF0b3IocmVxLmlwIHx8ICdhbm9uJywgNjQpLFxuICAgIC8vIEEgc3RvcmUgZmFpbHVyZSAoUmVkaXMgZG93biAvIGZhaWxpbmcgb3ZlcikgbXVzdCBkZWdyYWRlIHRvIFwibm90IHJhdGVcbiAgICAvLyBsaW1pdGVkXCIsIG5ldmVyIHRvIGEgNTAwIG9uIGV2ZXJ5IHJlcXVlc3Qgb2YgZXZlcnkgc2VydmljZS5cbiAgICBwYXNzT25TdG9yZUVycm9yOiB0cnVlLFxuICAgIGhhbmRsZXI6IChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MjksICdUb28gbWFueSByZXF1ZXN0cywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLCBFcnJvckNvZGUuUkFURV9MSU1JVF9FWENFRURFRCk7XG4gICAgfSxcbiAgICAvLyBTaGFyZWQgc3RhdGUgYWNyb3NzIHJlcGxpY2FzICh0aGUgcHJvY2Vzcy13aWRlIHJhdGUtbGltaXQgUmVkaXMgY29ubmVjdGlvbjtcbiAgICAvLyB1bmRlZmluZWQgd2l0aG91dCBSZWRpcyDihpIgcGVyLXByb2Nlc3MgbWVtb3J5IHN0b3JlLCByaWdodCBmb3Igb25lIHJlcGxpY2EpLlxuICAgIC8vIE5hbWVzcGFjZWQgcGVyIFNFUlZJQ0U6IGV2ZXJ5IHNlcnZpY2Ugc2hhcmVzIG9uZSBSZWRpcywgYW5kIGFuIHVucHJlZml4ZWRcbiAgICAvLyBgcmw6PGlwPmAga2V5IHdvdWxkIGxldCBvbmUgY2xpZW50J3MgdHJhZmZpYyB0byBBTlkgc2VydmljZSBkcmFpbiBpdHNcbiAgICAvLyBidWRnZXQgb24gRVZFUlkgc2VydmljZS5cbiAgICBzdG9yZTogY3JlYXRlU2hhcmVkUmF0ZUxpbWl0U3RvcmUoYCR7c2VydmljZU5hbWV9Omdsb2JhbGApLFxuICB9O1xuXG4gIGFwcC51c2UocmF0ZUxpbWl0KHJhdGVMaW1pdE9wdGlvbnMpKTtcbn1cblxuLyoqIFJlcXVlc3QgdGltZW91dCwgZHVyYXRpb24gbG9nZ2luZyBhbmQgSFRUUCBtZXRyaWNzLiAqL1xuZnVuY3Rpb24gYXBwbHlSZXF1ZXN0VGVsZW1ldHJ5KGFwcDogRXhwcmVzcyk6IHZvaWQge1xuICAvLyBFeHByZXNzIHJlcXVlc3QgdGltZW91dCDigJQgdXNlcyBDb3JlQ29uc3RhbnRzIHRvIHNoYXJlIHRoZSBzYW1lIGRlZmF1bHQgYXMgTGFtYmRhIGhhbmRsZXJzXG4gIGNvbnN0IHRpbWVvdXRNcyA9IENvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TO1xuICBhcHAudXNlKChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICByZXMuc2V0VGltZW91dCh0aW1lb3V0TXMsICgpID0+IHtcbiAgICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSB7XG4gICAgICAgIHNlbmRFcnJvcihyZXMsIDUwMywgJ1JlcXVlc3QgdGltZW91dCcpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gUmVxdWVzdCBkdXJhdGlvbiBsb2dnaW5nXG4gIGNvbnN0IGR1cmF0aW9uTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZXF1ZXN0LWR1cmF0aW9uJyk7XG4gIGFwcC51c2UoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHJlcy5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAvLyBMb2cgYHJlcS5wYXRoYCAobm8gcXVlcnkgc3RyaW5nKSDigJQgYSBzdHJheSBgP3Rva2VuPWAvYD90aWNrZXQ9YCBtdXN0IG5vdCBiZVxuICAgICAgLy8gcGVyc2lzdGVkIHZlcmJhdGltIG9uIGV2ZXJ5IHJlcXVlc3QgKG1pcnJvcnMgdGhlIGF1dGh6LWRlbmlhbCBhdWRpdG9yJ3Mgc3RyaXApLlxuICAgICAgZHVyYXRpb25Mb2dnZXIuaW5mbyhgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofSAke3Jlcy5zdGF0dXNDb2RlfSAke2R1cmF0aW9ufW1zYCwge1xuICAgICAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICAgIHBhdGg6IHJlcS5wYXRoLFxuICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgZHVyYXRpb25NczogZHVyYXRpb24sXG4gICAgICAgIHJlcXVlc3RJZDogcmVxLnJlcXVlc3RJZCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gUHJvbWV0aGV1cyBtZXRyaWNzIG1pZGRsZXdhcmUg4oCUIHJlY29yZHMgcmVxdWVzdCBkdXJhdGlvbiBhbmQgY291bnRcbiAgYXBwLnVzZShtZXRyaWNzTWlkZGxld2FyZSgpKTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBTU0UgbWFuYWdlci4gVGhlIHJlbGF5ICh0aGlzIHNlcnZpY2UncyBvd24gUmVkaXMgY2hhbm5lbCkgaXNcbiAqIGJ1aWx0IG9ubHkgd2hlbiBzb21ldGhpbmcgc3RyZWFtczogdGhlIGxvZyBzdHJlYW0gdHVybnMgaXQgb24gaGVyZSwgYW5kIGFuXG4gKiBvcmcta2V5ZWQgY2hhbm5lbCB0dXJucyBpdCBvbiB3aGVuIHJlZ2lzdGVyZWQgKHJlZ2lzdGVyU3NlVGlja2V0Q2hhbm5lbCkuXG4gKiBUaGUgbG9nIHRpY2tldCBzdG9yZSBleGlzdHMgb25seSB3aXRoIHRoZSBsb2cgc3RyZWFtLlxuICovXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0U3NlTWFuYWdlcihzZXJ2aWNlTmFtZTogc3RyaW5nLCBsb2dTdHJlYW06IGJvb2xlYW4pOiBTU0VNYW5hZ2VyIHtcbiAgY29uc3Qgc3NlTWFuYWdlciA9IG5ldyBTU0VNYW5hZ2VyKHtcbiAgICBsb2dTdHJlYW0sXG4gICAgcmVsYXlGYWN0b3J5OiAoKSA9PiBjcmVhdGVFbnZSZWRpc1NTRVJlbGF5KHNlcnZpY2VOYW1lKSxcbiAgICAuLi4obG9nU3RyZWFtICYmIHtcbiAgICAgIHRpY2tldFN0b3JlOiBjcmVhdGVFbnZTc2VUaWNrZXRTdG9yZSh7XG4gICAgICAgIHR0bE1zOiBTU0VfVElDS0VUX1RUTF9NUyxcbiAgICAgICAga2V5UHJlZml4OiBgbG9nczoke3NlcnZpY2VOYW1lfWAsXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSk7XG4gIGlmIChsb2dTdHJlYW0pIHNzZU1hbmFnZXIuZW5hYmxlUmVsYXkoKTtcbiAgcmV0dXJuIHNzZU1hbmFnZXI7XG59XG5cbi8qKlxuICogVGhlIHBlci1yZXF1ZXN0IGJ1aWxkLWxvZyBzdHJlYW06IGBQT1NUIC9sb2dzL3RpY2tldGAgKyBgR0VUIC9sb2dzLzpyZXF1ZXN0SWRgLlxuICpcbiAqIFRpY2tldC1nYXRlZCDigJQgdGhlIHN0cmVhbSBjYXJyaWVzIHBlci1vcmcgYnVpbGQgbG9ncywgc28gaXQgbXVzdCBub3QgYmVcbiAqIHdvcmxkLXJlYWRhYmxlLiBDbGllbnRzIGZpcnN0IFBPU1QgL2xvZ3MvdGlja2V0IChKV1QtYXV0aGVudGljYXRlZCkgdG8gbWludCBhXG4gKiBzaG9ydC1saXZlZCwgc2luZ2xlLXVzZSB0aWNrZXQgYm91bmQgdG8gdGhlaXIgb3JnIEFORCB0byB0aGUgc3BlY2lmaWNcbiAqIGByZXF1ZXN0SWRgIHN0cmVhbSB0aGV5IGludGVuZCB0byBvcGVuLCB0aGVuIG9wZW4gdGhlIEV2ZW50U291cmNlIHdpdGhcbiAqID90aWNrZXQ9PHQ+LiBUaGlzIGtlZXBzIHRoZSBKV1Qgb3V0IG9mIHF1ZXJ5IHN0cmluZ3MgLyBhY2Nlc3MgbG9ncyB3aGlsZVxuICogZW5mb3JjaW5nIG9yZyBvd25lcnNoaXAsIHBlci1zdWJqZWN0IGF1dGhvcml6YXRpb24sIGFuZCB0aGUgcGVyLW9yZ1xuICogY29ubmVjdGlvbiBjYXAgb24gdGhlIHN0cmVhbS4gTWlycm9ycyB0aGUgbWVzc2FnZS1zZXJ2aWNlIG5vdGlmaWNhdGlvbnMgU1NFXG4gKiB0aWNrZXQgZXhjaGFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHdpcmVTc2UoYXBwOiBFeHByZXNzLCBzc2VNYW5hZ2VyOiBTU0VNYW5hZ2VyKTogdm9pZCB7XG4gIGFwcC5wb3N0KCcvbG9ncy90aWNrZXQnLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IG9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghb3JnSWQpIHtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDQwMCwgJ1Rva2VuIG1pc3Npbmcgb3JnYW5pemF0aW9uJywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgY2FsbGVyIG11c3QgbmFtZSB0aGUgc3RyZWFtIHN1YmplY3QgdXAgZnJvbnQgc28gdGhlIHRpY2tldCBpcyBib3VuZCB0b1xuICAgIC8vIGl0LiBXaXRob3V0IHRoaXMsIGEgdGlja2V0IGNvdWxkIGJlIHJlcGxheWVkIGFnYWluc3QgQU5ZIHJlcXVlc3RJZCB0aGVcbiAgICAvLyBvcmcgY291bGQgZ3Vlc3MsIGxldHRpbmcgaXQgYXR0YWNoIHRvIGFub3RoZXIgb3JnJ3MgbG9nIHN0cmVhbS4gU3RyaWN0bHlcbiAgICAvLyBmb3JtYXQtdmFsaWRhdGVkIHNvIGl0IGNhbid0IGNhcnJ5IGFuIGluamVjdGlvbiBwYXlsb2FkIGludG8gdGhlIHN1YmplY3QuXG4gICAgY29uc3QgcmVxdWVzdElkID0gKHJlcS5ib2R5IGFzIHsgcmVxdWVzdElkPzogdW5rbm93biB9IHwgdW5kZWZpbmVkKT8ucmVxdWVzdElkO1xuICAgIGlmICh0eXBlb2YgcmVxdWVzdElkICE9PSAnc3RyaW5nJyB8fCAhU1NFX1JFUVVFU1RfSURfUkUudGVzdChyZXF1ZXN0SWQpKSB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MDAsICdNaXNzaW5nIG9yIGludmFsaWQgcmVxdWVzdElkJywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzc2VNYW5hZ2VyLmNyZWF0ZVRpY2tldChvcmdJZCwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdmb3JiaWRkZW4nKSB7XG4gICAgICAgIC8vIFRoZSBzdWJqZWN0IGlzIG93bmVkIGJ5IGFub3RoZXIgb3JnIOKAlCBkbyBub3QgY29uZmlybSBpdCBleGlzdHM7IGEgcGxhaW5cbiAgICAgICAgLy8gNDAzIGlzIGVub3VnaCBhbmQgbGVha3Mgbm90aGluZyBhYm91dCB3aGljaCByZXF1ZXN0SWRzIGFyZSBsaXZlLlxuICAgICAgICBzZW5kRXJyb3IocmVzLCA0MDMsICdOb3QgYXV0aG9yaXplZCBmb3IgdGhpcyBsb2cgc3RyZWFtJywgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdvcmctbGltaXQnKSB7XG4gICAgICAgIHNlbmRFcnJvcihyZXMsIDQyOSwgJ1RvbyBtYW55IGxvZyBzdHJlYW0gdGlja2V0cyBpc3N1ZWQnLCBFcnJvckNvZGUuUVVPVEFfRVhDRUVERUQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VuZEVycm9yKHJlcywgNTAzLCAnTG9nIHN0cmVhbWluZyBzdWJzeXN0ZW0gYXQgY2FwYWNpdHknLCBFcnJvckNvZGUuUVVPVEFfRVhDRUVERUQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyB0aWNrZXQ6IHJlc3VsdC50aWNrZXQgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBzdHJlYW0gaXRzZWxmIHJlc29sdmVzICsgY29uc3VtZXMgdGhlIHRpY2tldCBpbnNpZGUgbWlkZGxld2FyZSgpIGFuZFxuICAvLyByZWplY3RzIGFueSBhbm9ueW1vdXMgLyBpbnZhbGlkIC8gZXhwaXJlZCAvIGFscmVhZHktdXNlZCB0aWNrZXQgd2l0aCA0MDEuXG4gIGFwcC5nZXQoJy9sb2dzLzpyZXF1ZXN0SWQnLCBzc2VNYW5hZ2VyLm1pZGRsZXdhcmUoKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuZCBjb25maWd1cmUgYW4gRXhwcmVzcyBhcHBsaWNhdGlvbiB3aXRoIGNvbW1vbiBtaWRkbGV3YXJlXG4gKlxuICogU2V0cyB1cDpcbiAqIC0gQ09SUyB3aXRoIGNvbmZpZ3VyZWQgb3JpZ2luc1xuICogLSBIZWxtZXQgc2VjdXJpdHkgaGVhZGVyc1xuICogLSBSYXRlIGxpbWl0aW5nXG4gKiAtIEpTT04gYW5kIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZ1xuICogLSBUcnVzdCBwcm94eSBzZXR0aW5nc1xuICogLSBIZWFsdGggY2hlY2sgZW5kcG9pbnQgKC9oZWFsdGgpXG4gKiAtIE1ldHJpY3MgZW5kcG9pbnQgKC9tZXRyaWNzKVxuICogLSBTU0UgbG9ncyBlbmRwb2ludCAoL2xvZ3MvOnJlcXVlc3RJZCkg4oCUIG9ubHkgd2l0aCBgbG9nU3RyZWFtOiB0cnVlYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEV4cHJlc3MgYXBwIGFuZCBTU0UgbWFuYWdlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IGFwcCwgc3NlTWFuYWdlciB9ID0gY3JlYXRlQXBwKCk7XG4gKlxuICogYXBwLnBvc3QoJy9hcGkvcmVzb3VyY2UnLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gKiAgIC8vIFlvdXIgcm91dGUgaGFuZGxlclxuICogfSk7XG4gKlxuICogc3RhcnRTZXJ2ZXIoYXBwLCB7IG5hbWU6ICdNeSBTZXJ2aWNlJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwKG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMgPSB7fSk6IENyZWF0ZUFwcFJlc3VsdCB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVSYXRlTGltaXQgPSB0cnVlLFxuICAgIGxvZ1N0cmVhbSA9IGZhbHNlLFxuICAgIGVuYWJsZU9wZW5BcGkgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJztcblxuICAvLyBBIGNhbGxlci1zdXBwbGllZCBgc3NlTWFuYWdlcmAgc2tpcHMgdGhlIGRlZmF1bHQgY29uc3RydWN0aW9uIGVudGlyZWx5LlxuICBjb25zdCBzc2VNYW5hZ2VyID0gb3B0aW9ucy5zc2VNYW5hZ2VyID8/IGNyZWF0ZURlZmF1bHRTc2VNYW5hZ2VyKHNlcnZpY2VOYW1lLCBsb2dTdHJlYW0pO1xuXG4gIC8vIFdpcmUgdGhlIGlkZW1wb3RlbmN5IHJlcGxheS1jYWNoZSBiYWNrZW5kIHVzZWQgYnkgdGhlIHBvc3QtYXV0aCByb3V0ZVxuICAvLyBmYWN0b3JpZXMgKGNyZWF0ZVByb3RlY3RlZFJvdXRlIC8gY3JlYXRlQXV0aGVudGljYXRlZFdpdGhPcmdSb3V0ZSkuIFByZWZlclxuICAvLyBhbiBleHBsaWNpdGx5IGluamVjdGVkIHN0b3JlOyBvdGhlcndpc2UgYXV0by1jb25zdHJ1Y3QgZnJvbSB0aGUgc2hhcmVkIGVudlxuICAvLyBSZWRpcyBzbyBrZXllZCBtdXRhdGlvbiByZXRyaWVzIGRlZHVwZSBhY3Jvc3MgcmVwbGljYXMuIEZhbGxzIGJhY2sgdG8gdGhlXG4gIC8vIGluLW1lbW9yeSBkZWZhdWx0IHdoZW4gbm8gUmVkaXMgaXMgY29uZmlndXJlZCAoc2luZ2xlLXJlcGxpY2EgY29ycmVjdG5lc3MpLlxuICBjb25zdCByZXNvbHZlZElkZW1wb3RlbmN5U3RvcmUgPSBvcHRpb25zLmlkZW1wb3RlbmN5U3RvcmUgPz8gY3JlYXRlRW52UmVkaXNJZGVtcG90ZW5jeVN0b3JlKCk7XG4gIGlmIChyZXNvbHZlZElkZW1wb3RlbmN5U3RvcmUpIHtcbiAgICBzZXRJZGVtcG90ZW5jeVN0b3JlKHJlc29sdmVkSWRlbXBvdGVuY3lTdG9yZSk7XG4gIH1cblxuICAvLyBPcGVuVGVsZW1ldHJ5IGlzIE5PVCBpbml0aWFsaXplZCBoZXJlOiBieSB0aGUgdGltZSBjcmVhdGVBcHAgcnVucywgZXhwcmVzc1xuICAvLyBhbmQgaHR0cCBoYXZlIGFscmVhZHkgYmVlbiByZXF1aXJlZCwgc28gdGhlIGF1dG8taW5zdHJ1bWVudGF0aW9uIGhvb2tzXG4gIC8vIHdvdWxkIGhhdmUgbm90aGluZyB0byBwYXRjaCAobm8gaW5ib3VuZCBzcGFuIOKGkiBubyB0cmFjZSBpZCkuIFRyYWNpbmcgaXNcbiAgLy8gc3RhcnRlZCBieSB0aGUgYG90ZWwtYm9vdHN0cmFwLmpzYCBwcmVsb2FkIGluc3RlYWQgKG5vZGUgLXIg4oCmIOKAlCBzZWUgZWFjaFxuICAvLyBzZXJ2aWNlJ3MgRG9ja2VyZmlsZSBDTUQgLyBzdGFydCBzY3JpcHQpLCB3aGljaCBydW5zIGJlZm9yZSBhbnlcbiAgLy8gaW5zdHJ1bWVudGVkIG1vZHVsZSBsb2Fkcy4gYGN1cnJlbnRUcmFjZUlkKClgIHRoZW4gcmVhZHMgdGhlIGFjdGl2ZSBzcGFuLlxuXG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICBhcHBseVNlY3VyaXR5SGVhZGVycyhhcHAsIG9wdGlvbnMsIGVuYWJsZU9wZW5BcGkpO1xuICBhcHBseUJvZHlQYXJzaW5nKGFwcCwgb3B0aW9ucyk7XG5cbiAgLy8gVHJ1c3QgcHJveHkgKG11c3QgYmUgc2V0IGJlZm9yZSByYXRlIGxpbWl0ZXIgc28gcmVxLmlwIHJlc29sdmVzIGNvcnJlY3RseSlcbiAgYXBwLnNldCgndHJ1c3QgcHJveHknLCBDb25maWcuZ2V0KCdzZXJ2ZXInKS50cnVzdFByb3h5KTtcblxuICAvLyBSZXF1ZXN0IElEICsgYXVkaXQgY29udGV4dC4gUHJlZmVyIHRoZSBpbmJvdW5kIGBYLVJlcXVlc3QtSWRgIChuZ2lueCwgb3IgYVxuICAvLyBwZWVyIHNlcnZpY2UgLyBDTEkgZm9yd2FyZGluZyBpdHMgb3duKSB3aGVuIGl0IGlzIGEgYm91bmRlZCBvcGFxdWUgdG9rZW4g4oCUXG4gIC8vIGFuIG92ZXJzaXplZCBvciBqdW5rIHZhbHVlIGlzIHJlcGxhY2VkLCBub3Qgc3RvcmVkIOKAlCBvdGhlcndpc2UgZ2VuZXJhdGUgb25lLlxuICAvLyBUaGUgcmVzdCBvZiB0aGUgcmVxdWVzdCB0aGVuIHJ1bnMgaW5zaWRlIGFuIGF1ZGl0LWNvbnRleHQgc2NvcGUsIHNvIGV2ZXJ5XG4gIC8vIGByZWNvcmRBdWRpdGAgaXQgbWFrZXMgY2FycmllcyB0aGUgcmVxdWVzdCBpZCwgdHJhY2UgaWQsIGNsaWVudCBpcCAvIFVBLCB0aGVcbiAgLy8gdmVyaWZpZWQgY3JlZGVudGlhbCAocmVhZCBsYXppbHksIGFmdGVyIGByZXF1aXJlQXV0aGApIGFuZCBhbnkgaW5ib3VuZFxuICAvLyBgWC1QaXBlbGluZS1FeGVjdXRpb24tSWRgIC8gYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCAvIGBYLVNvdXJjZS1FdmVudC1JZGBcbiAgLy8gd2l0aCBubyBjYWxsLXNpdGUgY2hhbmdlLiBNb3VudGVkIGFmdGVyIGB0cnVzdCBwcm94eWAgc28gYHJlcS5pcGAgaXMgcmVhbC5cbiAgYXBwLnVzZSgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBoZHIgPSByZXEuaGVhZGVyc1sneC1yZXF1ZXN0LWlkJ107XG4gICAgY29uc3QgcmVxdWVzdElkID0gc2FuaXRpemVDb3JyZWxhdGlvbklkKEFycmF5LmlzQXJyYXkoaGRyKSA/IGhkclswXSA6IGhkcikgPz8gdXVpZCgpO1xuICAgIHJlcS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgcmVzLnNldEhlYWRlcignWC1SZXF1ZXN0LUlkJywgcmVxdWVzdElkKTtcbiAgICBydW5XaXRoQXVkaXRDb250ZXh0KGF1ZGl0Q29udGV4dEZyb21SZXF1ZXN0KHJlcSwgeyByZXF1ZXN0SWQsIHRyYWNlSWQ6IGN1cnJlbnRUcmFjZUlkKCkgfSksIG5leHQpO1xuICB9KTtcblxuICBtb3VudEluZnJhRW5kcG9pbnRzKGFwcCwgb3B0aW9ucywgc2VydmljZU5hbWUsIGVuYWJsZU9wZW5BcGkpO1xuICBpZiAoZW5hYmxlUmF0ZUxpbWl0KSBtb3VudFJhdGVMaW1pdGVyKGFwcCwgc2VydmljZU5hbWUpO1xuICBhcHBseVJlcXVlc3RUZWxlbWV0cnkoYXBwKTtcblxuICAvLyBOT1RFOiBpZGVtcG90ZW5jeSBpcyBpbnRlbnRpb25hbGx5IE5PVCBtb3VudGVkIGhlcmUuIEl0IG5lZWRzIHRoZSBWRVJJRklFRFxuICAvLyBvcmcgaWQgdG8gbmFtZXNwYWNlIGl0cyByZXBsYXkgY2FjaGUsIGJ1dCB0aGlzIHByZS1hdXRoIHBvc2l0aW9uIHJ1bnMgYmVmb3JlXG4gIC8vIGByZXF1aXJlQXV0aGAvYGF0dGFjaFJlcXVlc3RDb250ZXh0YCBwb3B1bGF0ZSBpZGVudGl0eSwgc28gYSBnbG9iYWwgbW91bnRcbiAgLy8gaGVyZSBpcyBhIHBlcm1hbmVudCBuby1vcCAob3JnIGFsd2F5cyB1bmRlZmluZWQg4oaSIHNraXApLiBJdCBpcyBpbnN0ZWFkIHdpcmVkXG4gIC8vIGludG8gdGhlIHBvc3QtYXV0aCByb3V0ZSBjaGFpbnMg4oCUIHNlZSBgY3JlYXRlUHJvdGVjdGVkUm91dGVgIC9cbiAgLy8gYGNyZWF0ZUF1dGhlbnRpY2F0ZWRXaXRoT3JnUm91dGVgIGluIG1pZGRsZXdhcmUtZmFjdG9yeS50cy5cblxuICBpZiAobG9nU3RyZWFtKSB3aXJlU3NlKGFwcCwgc3NlTWFuYWdlcik7XG5cbiAgcmV0dXJuIHsgYXBwLCBzc2VNYW5hZ2VyIH07XG59XG4iXX0=
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWZhY3RvcnkuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvYXBwLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOVYsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLE9BQXlFLE1BQU0sU0FBUyxDQUFDO0FBQ2hHLE9BQU8sU0FBUyxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sNkJBQTZCLENBQUM7QUFDekgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSww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Y0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BHLENBQUMsQ0FBQyxDQUFDO0lBRUgsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDOUQseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLGVBQWU7UUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEQscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0IsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUsK0VBQStFO0lBQy9FLGlFQUFpRTtJQUNqRSw4REFBOEQ7SUFFOUQsSUFBSSxTQUFTO1FBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUV4QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgc2VuZFN1Y2Nlc3MsIHNlbmRFcnJvciwgZ2VuZXJhdGVPcGVuQXBpU3BlYywgRXJyb3JDb2RlLCBjcmVhdGVMb2dnZXIsIHZlcmlmeVNlcnZpY2VQcmluY2lwYWwsIGNyZWF0ZUhlYWx0aFJvdXRlciwgY2xpZW50VmVyc2lvbkdhdGUsIHNldENvdW50ZXJFbWl0dGVyLCBzZXRHYXVnZUVtaXR0ZXIsIHJlcXVpcmVBdXRoLCBzYWZlRXF1YWwsIGNyZWF0ZUVudlNzZVRpY2tldFN0b3JlLCBTU0VfVElDS0VUX1RUTF9NUywgYXVkaXRDb250ZXh0RnJvbVJlcXVlc3QsIHJ1bldpdGhBdWRpdENvbnRleHQsIHNhbml0aXplQ29ycmVsYXRpb25JZCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgT3BlbkFwaVNwZWNPcHRpb25zIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgeyBnZXRDb25uZWN0aW9uIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgY29tcHJlc3Npb24gZnJvbSAnY29tcHJlc3Npb24nO1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycyc7XG5pbXBvcnQgZXhwcmVzcywgeyB0eXBlIEV4cHJlc3MsIHR5cGUgTmV4dEZ1bmN0aW9uLCB0eXBlIFJlcXVlc3QsIHR5cGUgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCByYXRlTGltaXQsIHsgaXBLZXlHZW5lcmF0b3IgfSBmcm9tICdleHByZXNzLXJhdGUtbGltaXQnO1xuaW1wb3J0IGhlbG1ldCBmcm9tICdoZWxtZXQnO1xuaW1wb3J0IHN3YWdnZXJVaSBmcm9tICdzd2FnZ2VyLXVpLWV4cHJlc3MnO1xuaW1wb3J0IHsgdjcgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgZXRhZ01pZGRsZXdhcmUgfSBmcm9tICcuL2V0YWctbWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZSZWRpc0lkZW1wb3RlbmN5U3RvcmUsIHNldElkZW1wb3RlbmN5U3RvcmUsIHR5cGUgSWRlbXBvdGVuY3lTdG9yZSB9IGZyb20gJy4vaWRlbXBvdGVuY3ktbWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgeyBtZXRyaWNzTWlkZGxld2FyZSwgbWV0cmljc0hhbmRsZXIsIGluY0NvdW50ZXIsIHNldEdhdWdlIH0gZnJvbSAnLi9tZXRyaWNzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNoYXJlZFJhdGVMaW1pdFN0b3JlIH0gZnJvbSAnLi9yYXRlLWxpbWl0LXN0b3JlLmpzJztcbmltcG9ydCB7IHJlYWRpbmVzc0d1YXJkIH0gZnJvbSAnLi9yZWFkaW5lc3MuanMnO1xuaW1wb3J0IHsgY3VycmVudFRyYWNlSWQgfSBmcm9tICcuL3RyYWNpbmcuanMnO1xuaW1wb3J0IHsgU1NFTWFuYWdlciwgU1NFX1JFUVVFU1RfSURfUkUgfSBmcm9tICcuLi9odHRwL3NzZS1jb25uZWN0aW9uLW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNTU0VSZWxheSB9IGZyb20gJy4uL2h0dHAvc3NlLXJlbGF5LmpzJztcblxuLy8gV2lyZSBhcGktY29yZSdzIGNvdW50ZXIgc2hpbSB0byB0aGUgcmVhbCBwcm9tLWNsaWVudCByZWdpc3RyeS4gVGhpcyBpc1xuLy8gYSBuby1vcCB1bnRpbCBpbmNDb3VudGVyIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgKGxhenkgcmVnaXN0cmF0aW9uXG4vLyBpbiBtZXRyaWNzLnRzKSwgYW5kIGxldHMgYXBpLWNvcmUgaGVscGVycyBsaWtlIHRoZSBxdW90YSBjbGllbnQgcmVjb3JkXG4vLyBgcXVvdGFfZmFpbF9vcGVuX3RvdGFsYCB3aXRob3V0IHRha2luZyBhIGhhcmQgZGVwIG9uIGFwaS1zZXJ2ZXIuXG5zZXRDb3VudGVyRW1pdHRlcihpbmNDb3VudGVyKTtcbi8vIFNhbWUgc2VhbSBmb3IgR0FVR0VTLiBwaXBlbGluZS1kYXRhJ3MgcmVhZC1yZXBsaWNhIGxhZyBzYW1wbGVyIG5lZWRzIGl0OlxuLy8gcmVwbGF5IGxhZyBhbmQgdGhlIHN0YXRlIG9mIHRoZSByZWFkIGZhbGxiYWNrIGNpcmN1aXQgYXJlIHNhbXBsZWRcbi8vIHBvaW50LWluLXRpbWUgdmFsdWVzLCBzbyBlbWl0dGluZyB0aGVtIGFzIGNvdW50ZXJzIHdvdWxkIG1ha2UgZXZlcnkgcXVlcnlcbi8vIG92ZXIgdGhlbSB3cm9uZy4gcGlwZWxpbmUtZGF0YSBkZXBlbmRzIG9uIGFwaS1jb3JlIGFuZCBtdXN0IG5vdCBkZXBlbmQgb25cbi8vIGFwaS1zZXJ2ZXIsIGhlbmNlIHRoZSBzaGltIHJhdGhlciB0aGFuIGEgZGlyZWN0IGltcG9ydC5cbnNldEdhdWdlRW1pdHRlcihzZXRHYXVnZSk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYW4gRXhwcmVzcyBhcHBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUFwcE9wdGlvbnMge1xuICAvKiogRW5hYmxlIENPUlMgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUNvcnM/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIEhlbG1ldCBzZWN1cml0eSBoZWFkZXJzIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVIZWxtZXQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHJhdGUgbGltaXRpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZVJhdGVMaW1pdD86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgSlNPTiBib2R5IHBhcnNpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZUpzb25Cb2R5PzogYm9vbGVhbjtcbiAgLyoqIEpTT04gYm9keSBzaXplIGxpbWl0IChkZWZhdWx0OiAnMW1iJykgKi9cbiAganNvbkxpbWl0Pzogc3RyaW5nO1xuICAvKipcbiAgICogUGF0aCBwcmVmaXhlcyB0aGUgZ2xvYmFsIEpTT04gYm9keSBwYXJzZXIgbXVzdCBOT1QgdG91Y2gg4oCUIGZvciByb3V0ZXMgdGhhdCBuZWVkXG4gICAqIHRoZSByYXcgYm9keSAoZS5nLiBhIFN0cmlwZSB3ZWJob29rIHdob3NlIEhNQUMgaXMgY29tcHV0ZWQgb3ZlciB0aGUgZXhhY3QgYnl0ZXMpLlxuICAgKiBXaXRob3V0IHRoaXMgdGhlIGdsb2JhbCBwYXJzZXIgY29uc3VtZXMgdGhlIGJvZHkgZmlyc3QgYW5kIGEgbGF0ZXIgYGV4cHJlc3MucmF3KClgXG4gICAqIG9uIHRoZSBzYW1lIHBhdGggaXMgYSBuby1vcCwgYnJlYWtpbmcgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi5cbiAgICovXG4gIGpzb25Cb2R5RXhjbHVkZT86IHN0cmluZ1tdO1xuICAvKiogRW5hYmxlIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlVXJsRW5jb2RlZD86IGJvb2xlYW47XG4gIC8qKiBVUkwtZW5jb2RlZCBib2R5IHNpemUgbGltaXQgKGRlZmF1bHQ6ICcxbWInKSAqL1xuICB1cmxFbmNvZGVkTGltaXQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gU1NFIG1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgc3NlTWFuYWdlcj86IFNTRU1hbmFnZXI7XG4gIC8qKlxuICAgKiBTZXJ2ZSB0aGUgcGVyLXJlcXVlc3QgYnVpbGQtbG9nIHN0cmVhbTogYFBPU1QgL2xvZ3MvdGlja2V0YCArXG4gICAqIGBHRVQgL2xvZ3MvOnJlcXVlc3RJZGAsIGEgbG9nIHRpY2tldCBzdG9yZSwgdGhlIGNyb3NzLXBvZCByZWxheSwgYW5kXG4gICAqIGBjdHgubG9nYCBmcmFtZXMgcHVzaGVkIHRvIFNTRS4gRGVmYXVsdCBmYWxzZSDigJQgYSBzZXJ2aWNlIHdpdGhvdXQgaXQgaGFzIG5vXG4gICAqIGAvbG9nc2Agcm91dGVzIGFuZCBgY3R4LmxvZ2Agb25seSB3cml0ZXMgdG8gdGhlIGxvZ2dlci5cbiAgICovXG4gIGxvZ1N0cmVhbT86IGJvb2xlYW47XG4gIC8qKiBIZWFsdGggY2hlY2sgZGVwZW5kZW5jeSBjaGVja2VyIOKAlCBpZiBwcm92aWRlZCwgL2hlYWx0aCByZXBvcnRzIGRlcGVuZGVuY3kgc3RhdHVzICovXG4gIGNoZWNrRGVwZW5kZW5jaWVzPzogKCkgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nPj47XG4gIC8qKlxuICAgKiBTZXJ2ZSB0aGUgT3BlbkFQSSBzcGVjIGF0IGAvZG9jcy9vcGVuYXBpLmpzb25gIGFuZCBTd2FnZ2VyIFVJIGF0IGAvZG9jc2AuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIE9GRiB1bmRlciBgTk9ERV9FTlY9cHJvZHVjdGlvbmA6IHRoZSByb3V0ZXMgYXJlIHJlZ2lzdGVyZWQgYWJvdmVcbiAgICogdGhlIHJhdGUgbGltaXRlciBhbmQgYXJlIG5vdCBhdXRoLWdhdGVkLCBzbyBpbiBwcm9kdWN0aW9uIHRoZXkgd291bGQgcHVibGlzaFxuICAgKiB0aGUgZnVsbCByb3V0ZSArIHNjaGVtYSBpbnZlbnRvcnkgb2YgZXZlcnkgc2VydmljZSB0byBhbnlvbmUgd2hvIGNvdWxkIHJlYWNoXG4gICAqIHRoZSBwb3J0LiBQYXNzIGB0cnVlYCBleHBsaWNpdGx5IHRvIHNlcnZlIHRoZW0gaW4gcHJvZHVjdGlvbiBhbnl3YXkuXG4gICAqL1xuICBlbmFibGVPcGVuQXBpPzogYm9vbGVhbjtcbiAgLyoqIE9wZW5BUEkgc3BlYyBjdXN0b21pemF0aW9uIG9wdGlvbnMgKi9cbiAgb3BlbkFwaU9wdGlvbnM/OiBPcGVuQXBpU3BlY09wdGlvbnM7XG4gIC8qKiBFbmFibGUgZ3ppcC9kZWZsYXRlIHJlc3BvbnNlIGNvbXByZXNzaW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuICBlbmFibGVDb21wcmVzc2lvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZGVtcG90ZW5jeSByZXBsYXktY2FjaGUgYmFja2VuZCBmb3Iga2V5ZWQgbXV0YXRpb24gcmV0cmllcy4gV2hlbiBvbWl0dGVkLFxuICAgKiBjcmVhdGVBcHAgYXV0by13aXJlcyB0aGUgc2hhcmVkIGVudiBSZWRpcyBzdG9yZSAobXVsdGktcmVwbGljYSBkZWR1cCkgaWZcbiAgICogUmVkaXMgaXMgY29uZmlndXJlZCwgZWxzZSBrZWVwcyB0aGUgaW4tbWVtb3J5IGRlZmF1bHQgKHNpbmdsZS1yZXBsaWNhKS5cbiAgICogUGFzcyBhbiBleHBsaWNpdCBzdG9yZSB0byBpbmplY3QgYSBiZXNwb2tlIGJhY2tlbmQgKGUuZy4gYSBzZXJ2aWNlJ3Mgb3duXG4gICAqIGlvcmVkaXMgY29ubmVjdGlvbikuXG4gICAqL1xuICBpZGVtcG90ZW5jeVN0b3JlPzogSWRlbXBvdGVuY3lTdG9yZTtcbiAgLyoqXG4gICAqIEV4dHJhIHdhcm11cCBjYWxsYmFja3MgaW52b2tlZCBieSBgR0VUIC93YXJtdXBgIGluIGFkZGl0aW9uIHRvIHRoZVxuICAgKiBkZWZhdWx0IFBvc3RncmVzIHBpbmcuIFVzZSBmb3Igc2VydmljZXMgdGhhdCBkZXBlbmQgb24gTW9uZ28sIFJlZGlzLFxuICAgKiBTUVMsIGV0Yy4g4oCUIHByZS13YXJtaW5nIG9wZW5zIGNvbm5lY3Rpb24gcG9vbHMgYmVmb3JlIHJlYWwgdHJhZmZpY1xuICAgKiBhcnJpdmVzLiBFYWNoIGNhbGxiYWNrIHNob3VsZCByZXNvbHZlIHdoZW4gaXRzIGRlcGVuZGVuY3kgaXMgcmVhZHk7XG4gICAqIGFueSByZWplY3Rpb24gY2F1c2VzIC93YXJtdXAgdG8gcmV0dXJuIDUwMy5cbiAgICovXG4gIHdhcm11cEhvb2tzPzogQXJyYXk8KCkgPT4gUHJvbWlzZTx2b2lkPj47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBcHBSZXN1bHQge1xuICAvKiogQ29uZmlndXJlZCBFeHByZXNzIGFwcGxpY2F0aW9uICovXG4gIGFwcDogRXhwcmVzcztcbiAgLyoqIFNTRSBtYW5hZ2VyIGluc3RhbmNlICovXG4gIHNzZU1hbmFnZXI6IFNTRU1hbmFnZXI7XG59XG5cbi8qKiBIZWxtZXQgKHN0cmljdCBDU1ApLCBDT1JTLCBjb21wcmVzc2lvbiBhbmQgRVRhZ3MuICovXG5mdW5jdGlvbiBhcHBseVNlY3VyaXR5SGVhZGVycyhhcHA6IEV4cHJlc3MsIG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMsIGVuYWJsZU9wZW5BcGk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgeyBlbmFibGVDb3JzID0gdHJ1ZSwgZW5hYmxlSGVsbWV0ID0gdHJ1ZSwgZW5hYmxlQ29tcHJlc3Npb24gPSB0cnVlIH0gPSBvcHRpb25zO1xuICAvLyBTd2FnZ2VyIFVJIG5lZWRzIHVuc2FmZS1pbmxpbmUgKyB1bnNhZmUtZXZhbCBmb3IgaXRzIGJ1bmRsZWQgc2NyaXB0cyDigJRcbiAgLy8gYnV0IENTUCBpcyBvbmx5IHJlbGF4ZWQgdGhhdCBmYXIgd2hlbiAoYSkgT3BlbkFQSSBpcyBlbmFibGVkIEFORCAoYikgd2UncmVcbiAgLy8gbm90IGluIHByb2R1Y3Rpb24uIEluIHByb2QsIFN3YWdnZXIgc2hvdWxkIGJlIHNlcnZlZCBiZWhpbmQgYSBzZXBhcmF0ZVxuICAvLyBob3N0IG9yIGF1dGgtZ2F0ZWQgcm91dGU7IHRoZSBtYWluIGFwcCBrZWVwcyB0aGUgc3RyaWN0IENTUCBzbyBhIFN0b3JlZFxuICAvLyBYU1MgaW4gYW55IGhhbmRsZXIgY2FuJ3QgYGV2YWwoKWAgYXJiaXRyYXJ5IHNjcmlwdC5cbiAgY29uc3QgYWxsb3dTd2FnZ2VyQ3NwID0gZW5hYmxlT3BlbkFwaSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nO1xuICBpZiAoZW5hYmxlSGVsbWV0KSB7XG4gICAgYXBwLnVzZShoZWxtZXQoe1xuICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IHtcbiAgICAgICAgICBkZWZhdWx0U3JjOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgc2NyaXB0U3JjOiBhbGxvd1N3YWdnZXJDc3BcbiAgICAgICAgICAgID8gW1wiJ3NlbGYnXCIsIFwiJ3Vuc2FmZS1pbmxpbmUnXCIsIFwiJ3Vuc2FmZS1ldmFsJ1wiXVxuICAgICAgICAgICAgOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgc3R5bGVTcmM6IFtcIidzZWxmJ1wiLCBcIid1bnNhZmUtaW5saW5lJ1wiXSxcbiAgICAgICAgICBpbWdTcmM6IFtcIidzZWxmJ1wiLCAnZGF0YTonLCAnYmxvYjonXSxcbiAgICAgICAgICBjb25uZWN0U3JjOiBbXCInc2VsZidcIl0sXG4gICAgICAgICAgZm9udFNyYzogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIG9iamVjdFNyYzogW1wiJ25vbmUnXCJdLFxuICAgICAgICAgIGZyYW1lQW5jZXN0b3JzOiBbXCInbm9uZSdcIl0sXG4gICAgICAgICAgYmFzZVVyaTogW1wiJ3NlbGYnXCJdLFxuICAgICAgICAgIGZvcm1BY3Rpb246IFtcIidzZWxmJ1wiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGVuYWJsZUNvcnMpIHtcbiAgICBhcHAudXNlKGNvcnMoQ29uZmlnLmdldCgnc2VydmVyJykuY29ycykpO1xuICB9XG5cbiAgLy8gUmVzcG9uc2UgY29tcHJlc3Npb24gKGd6aXAvZGVmbGF0ZSkg4oCUIHNraXAgU1NFIHN0cmVhbXNcbiAgaWYgKGVuYWJsZUNvbXByZXNzaW9uKSB7XG4gICAgYXBwLnVzZShjb21wcmVzc2lvbih7XG4gICAgICBmaWx0ZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgLy8gRG9uJ3QgY29tcHJlc3MgU1NFIHN0cmVhbXMuIE1hdGNoIGJ5IGluY2x1c2lvbjogdGhlIEFjY2VwdCBoZWFkZXIgaXNcbiAgICAgICAgLy8gb2Z0ZW4gYSBsaXN0IChlLmcuIFwidGV4dC9ldmVudC1zdHJlYW0sICovKlwiKSwgd2hpY2ggZXhhY3QgZXF1YWxpdHlcbiAgICAgICAgLy8gd291bGQgbWlzcywgY29tcHJlc3NpbmcvYnVmZmVyaW5nIHRoZSBzdHJlYW0uXG4gICAgICAgIGlmICgocmVxLmhlYWRlcnMuYWNjZXB0IHx8ICcnKS5pbmNsdWRlcygndGV4dC9ldmVudC1zdHJlYW0nKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gY29tcHJlc3Npb24uZmlsdGVyKHJlcSwgcmVzKTtcbiAgICAgIH0sXG4gICAgICB0aHJlc2hvbGQ6IENvcmVDb25zdGFudHMuQ09NUFJFU1NJT05fVEhSRVNIT0xEX0JZVEVTLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEVUYWcgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgR0VUIHJlcXVlc3RzICgzMDQgTm90IE1vZGlmaWVkKVxuICBhcHAudXNlKGV0YWdNaWRkbGV3YXJlKCkpO1xufVxuXG4vKiogSlNPTiArIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2Vycy4gKi9cbmZ1bmN0aW9uIGFwcGx5Qm9keVBhcnNpbmcoYXBwOiBFeHByZXNzLCBvcHRpb25zOiBDcmVhdGVBcHBPcHRpb25zKTogdm9pZCB7XG4gIGNvbnN0IHsgZW5hYmxlSnNvbkJvZHkgPSB0cnVlLCBqc29uTGltaXQgPSAnMW1iJywgZW5hYmxlVXJsRW5jb2RlZCA9IHRydWUsIHVybEVuY29kZWRMaW1pdCA9ICcxbWInIH0gPSBvcHRpb25zO1xuICBpZiAoZW5hYmxlSnNvbkJvZHkpIHtcbiAgICBjb25zdCBqc29uUGFyc2VyID0gZXhwcmVzcy5qc29uKHsgbGltaXQ6IGpzb25MaW1pdCB9KTtcbiAgICBjb25zdCBleGNsdWRlID0gb3B0aW9ucy5qc29uQm9keUV4Y2x1ZGUgPz8gW107XG4gICAgaWYgKGV4Y2x1ZGUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gU2tpcCB0aGUgZ2xvYmFsIEpTT04gcGFyc2VyIGZvciByYXctYm9keSBwYXRocyBzbyBhIHBlci1wYXRoIGBleHByZXNzLnJhdygpYFxuICAgICAgLy8gY2FuIHJlYWQgdGhlIGV4YWN0IGJ5dGVzIChzZWUgYGpzb25Cb2R5RXhjbHVkZWApLlxuICAgICAgYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IChleGNsdWRlLnNvbWUoKHApID0+IHJlcS5wYXRoLnN0YXJ0c1dpdGgocCkpID8gbmV4dCgpIDoganNvblBhcnNlcihyZXEsIHJlcywgbmV4dCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwLnVzZShqc29uUGFyc2VyKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlVXJsRW5jb2RlZCkge1xuICAgIGFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgZXh0ZW5kZWQ6IHRydWUsIGxpbWl0OiB1cmxFbmNvZGVkTGltaXQgfSkpO1xuICB9XG59XG5cbi8qKlxuICogSGVhbHRoLCByZWFkaW5lc3MgZ3VhcmQsIGAvd2FybXVwYCwgYC9tZXRyaWNzYCBhbmQgdGhlIE9wZW5BUEkgZG9jcyDigJQgYWxsXG4gKiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgcmF0ZSBsaW1pdGVyIHNvIHRoZXkgYXJlIG5ldmVyIHRocm90dGxlZC5cbiAqL1xuZnVuY3Rpb24gbW91bnRJbmZyYUVuZHBvaW50cyhhcHA6IEV4cHJlc3MsIG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMsIHNlcnZpY2VOYW1lOiBzdHJpbmcsIGVuYWJsZU9wZW5BcGk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgeyBjaGVja0RlcGVuZGVuY2llcywgb3BlbkFwaU9wdGlvbnMsIHdhcm11cEhvb2tzID0gW10gfSA9IG9wdGlvbnM7XG5cbiAgYXBwLnVzZShjcmVhdGVIZWFsdGhSb3V0ZXIoe1xuICAgIHNlcnZpY2VOYW1lLFxuICAgIGNoZWNrRGVwZW5kZW5jaWVzLFxuICB9KSk7XG5cbiAgLy8gUmVhZGluZXNzIGd1YXJkIOKAlCA1MDNzIGJ1c2luZXNzIHRyYWZmaWMgd2hpbGUgdGhlIHNlcnZpY2UgaXMgTm90UmVhZHlcbiAgLy8gKGRhdGFzdG9yZSBzdGlsbCBjb25uZWN0aW5nIGF0IHN0YXJ0dXAsIG9yIGRyb3BwZWQpLiBNb3VudGVkIHJpZ2h0IGFmdGVyXG4gIC8vIHRoZSBoZWFsdGggcm91dGVyIGFuZCBiZWZvcmUgZXZlcnl0aGluZyBlbHNlIHNvIGEgTm90UmVhZHkgcmVxdWVzdCBpc1xuICAvLyByZWplY3RlZCBjaGVhcGx5LCBiZWZvcmUgcmF0ZS1saW1pdCAvIGlkZW1wb3RlbmN5IC8gYnVzaW5lc3MgaGFuZGxlcnMgZXZlclxuICAvLyB0b3VjaCBhIGRpc2Nvbm5lY3RlZCBkYXRhc3RvcmUuIEl0IGFsbG93bGlzdHMgdGhlIGluZnJhIGVuZHBvaW50c1xuICAvLyAoL21ldHJpY3MsIC93YXJtdXAsIC9kb2NzLCAvbG9ncykgcmVnaXN0ZXJlZCBiZWxvdywgcGx1cyAvaGVhbHRoICsgL3JlYWR5LlxuICBhcHAudXNlKHJlYWRpbmVzc0d1YXJkKCkpO1xuXG4gIC8vIFdhcm0tdXAgZW5kcG9pbnQg4oCUIHByZS1vcGVucyBjb25uZWN0aW9uIHBvb2xzIHNvIHRoZSBmaXJzdCByZWFsIHJlcXVlc3RcbiAgLy8gZG9lc24ndCBwYXkgY29sZC1zdGFydCBsYXRlbmN5LiBBbHdheXMgcGluZ3MgUG9zdGdyZXM7IHNlcnZpY2VzIHVzaW5nXG4gIC8vIE1vbmdvIC8gUmVkaXMgLyBTUVMgcGFzcyBgd2FybXVwSG9va3NgIHNvIHRob3NlIGFyZSB3YXJtZWQgaW4gcGFyYWxsZWwuXG4gIC8vXG4gIC8vIEdBVEVEIHRvIHZlcmlmaWVkIHNlcnZpY2UgcHJpbmNpcGFscy4gRXZlcnkgaGl0IHJ1bnMgYSBQb3N0Z3JlcyByb3VuZC10cmlwXG4gIC8vIHBsdXMgYWxsIGB3YXJtdXBIb29rc2AgKE1vbmdvL1JlZGlzL1NRUyksIHNvIGFuIG9wZW4gZW5kcG9pbnQgd291bGQgbGV0IGFuXG4gIC8vIGFub255bW91cyBsb29wIGFtcGxpZnkgaW50byBkYXRhc3RvcmUgbG9hZCBvbiBldmVyeSBzZXJ2aWNlIGluIHRoZSBmbGVldCDigJRcbiAgLy8gYW5kIGl0IGlzIHJlZ2lzdGVyZWQgYWJvdmUgdGhlIHJhdGUgbGltaXRlciwgc28gbm90aGluZyB3b3VsZCB0aHJvdHRsZSBpdC5cbiAgLy8gYHZlcmlmeVNlcnZpY2VQcmluY2lwYWxgIGNoZWNrcyB0aGUgYmVhcmVyIHRva2VuIGNyeXB0b2dyYXBoaWNhbGx5LCBzbyBpdCBpc1xuICAvLyBzYWZlIGhlcmUsIGFib3ZlIGByZXF1aXJlQXV0aGAuXG4gIGFwcC5nZXQoJy93YXJtdXAnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCF2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsKHJlcSkpIHtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDQwNCwgJ05vdCBmb3VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRDb25uZWN0aW9uKCkudGVzdENvbm5lY3Rpb24oKSxcbiAgICAgICAgLi4ud2FybXVwSG9va3MubWFwKChob29rKSA9PiBob29rKCkpLFxuICAgICAgXSk7XG4gICAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyB3YXJtZWQ6IHRydWUsIGhvb2tzOiB3YXJtdXBIb29rcy5sZW5ndGggfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA1MDMsICdXYXJtdXAgZmFpbGVkJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQcm9tZXRoZXVzIG1ldHJpY3MgZW5kcG9pbnQg4oCUIGFsd2F5cyByZWdpc3RlcmVkIChuZXZlciB0aHJvdHRsZWQpLlxuICAvL1xuICAvLyBPcHRpb25hbGx5IGdhdGVkOiB3aGVuIGBNRVRSSUNTX1NDUkFQRV9UT0tFTmAgaXMgc2V0LCB0aGUgc2NyYXBlciBtdXN0IHNlbmRcbiAgLy8gaXQgYXMgYSBiZWFyZXIgdG9rZW4gKFByb21ldGhldXMgYGJlYXJlcl90b2tlbmAgLyBgYmVhcmVyX3Rva2VuX2ZpbGVgIGluIHRoZVxuICAvLyBzY3JhcGUgY29uZmlnKS4gTGVmdCB1bmdhdGVkIHdoZW4gdW5zZXQgc28gZW5hYmxpbmcgaXQgaXMgYSBkZWxpYmVyYXRlLFxuICAvLyBjb29yZGluYXRlZCBjaGFuZ2UgcmF0aGVyIHRoYW4gYSBzaWxlbnQgbW9uaXRvcmluZyBvdXRhZ2Ug4oCUIHRlbmFudCBpZHMgc3RheVxuICAvLyBvdXQgb2YgdGhlIG91dHB1dCByZWdhcmRsZXNzLCBiZWNhdXNlIHRoZSBwZXItb3JnIGxhYmVsIGRlZmF1bHRzIE9GRiAoc2VlXG4gIC8vIEhUVFBfTUVUUklDU19PUkdfU0FNUExFX1JBVEUgaW4gbWV0cmljcy50cykuXG4gIGNvbnN0IG1ldHJpY3NUb2tlbiA9IHByb2Nlc3MuZW52Lk1FVFJJQ1NfU0NSQVBFX1RPS0VOO1xuICBhcHAuZ2V0KCcvbWV0cmljcycsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4ge1xuICAgIGlmICghbWV0cmljc1Rva2VuKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlciA9IHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgY29uc3QgcHJlc2VudGVkID0gaGVhZGVyPy5zdGFydHNXaXRoKCdCZWFyZXIgJykgPyBoZWFkZXIuc2xpY2UoNykgOiB1bmRlZmluZWQ7XG4gICAgLy8gQ29uc3RhbnQtdGltZSBjb21wYXJlIOKAlCBhIGxlbmd0aC1pbmRlcGVuZGVudCBlcXVhbGl0eSBjaGVjayBoZXJlIHdvdWxkXG4gICAgLy8gbGVhayB0aGUgdG9rZW4gYSBieXRlIGF0IGEgdGltZS5cbiAgICBpZiAoIXByZXNlbnRlZCB8fCAhc2FmZUVxdWFsKHByZXNlbnRlZCwgbWV0cmljc1Rva2VuKSkge1xuICAgICAgc2VuZEVycm9yKHJlcywgNDA0LCAnTm90IGZvdW5kJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5leHQoKTtcbiAgfSwgbWV0cmljc0hhbmRsZXIoKSk7XG5cbiAgaWYgKGVuYWJsZU9wZW5BcGkpIHtcbiAgICBjb25zdCBzcGVjID0gZ2VuZXJhdGVPcGVuQXBpU3BlYyhvcGVuQXBpT3B0aW9ucyk7XG4gICAgYXBwLmdldCgnL2RvY3Mvb3BlbmFwaS5qc29uJywgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgIHJlcy5qc29uKHNwZWMpO1xuICAgIH0pO1xuICAgIGFwcC51c2UoJy9kb2NzJywgc3dhZ2dlclVpLnNlcnZlLCBzd2FnZ2VyVWkuc2V0dXAoc3BlYywge1xuICAgICAgY3VzdG9tU2l0ZVRpdGxlOiBvcGVuQXBpT3B0aW9ucz8udGl0bGUgPz8gJ1BpcGVsaW5lIEJ1aWxkZXIgQVBJIERvY3MnLFxuICAgIH0pKTtcbiAgfVxufVxuXG4vKiogR2xvYmFsIHJhdGUgbGltaXRlciDigJQgc2hhcmVkIGFjcm9zcyByZXBsaWNhcyB2aWEgdGhlIGVudiBSZWRpcyB3aGVuIGNvbmZpZ3VyZWQuICovXG5mdW5jdGlvbiBtb3VudFJhdGVMaW1pdGVyKGFwcDogRXhwcmVzcywgc2VydmljZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCByYXRlTGltaXRDb25maWcgPSBDb25maWcuZ2V0KCdyYXRlTGltaXQnKTtcblxuICBjb25zdCByYXRlTGltaXRPcHRpb25zOiBQYXJhbWV0ZXJzPHR5cGVvZiByYXRlTGltaXQ+WzBdID0ge1xuICAgIG1heDogcmF0ZUxpbWl0Q29uZmlnLm1heCxcbiAgICB3aW5kb3dNczogcmF0ZUxpbWl0Q29uZmlnLndpbmRvd01zLFxuICAgIHN0YW5kYXJkSGVhZGVyczogdHJ1ZSxcbiAgICBsZWdhY3lIZWFkZXJzOiBmYWxzZSxcbiAgICAvLyBTa2lwIHJhdGUgbGltaXRpbmcgb25seSBmb3IgQ1JZUFRPR1JBUEhJQ0FMTFktVkVSSUZJRUQgaW50ZXJuYWwgc2VydmljZVxuICAgIC8vIGNhbGxlcnMuIFRoZSBsaW1pdGVyIHJ1bnMgYmVmb3JlIHJlcXVpcmVBdXRoLCBzbyBhIHBsYWludGV4dCBoZWFkZXJcbiAgICAvLyB3b3VsZCBiZSBzcG9vZmFibGUgYnkgYW55IGV4dGVybmFsIGNsaWVudCDihpIgdG90YWwgYnlwYXNzLlxuICAgIC8vIHZlcmlmeVNlcnZpY2VQcmluY2lwYWwgdmVyaWZpZXMgdGhlIHNpZ25lZCBzZXJ2aWNlIEpXVCBpbnN0ZWFkO1xuICAgIC8vIGludGVyLXNlcnZpY2UgY2FsbGVycyBhbGwgc2VuZCBvbmUgKGdldFNlcnZpY2VBdXRoSGVhZGVyKS5cbiAgICBza2lwOiAocmVxOiBSZXF1ZXN0KSA9PiB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsKHJlcSksXG4gICAgLy8gS2V5IG9uIGNsaWVudCBJUCBvbmx5LiBUaGUgbGltaXRlciBydW5zIHByZS1hdXRoLCBzbyBgcmVxLnVzZXJgIGlzIHVuc2V0XG4gICAgLy8gYW5kIGFueSBvcmcgaWQgd291bGQgY29tZSBmcm9tIHRoZSBjYWxsZXItc3VwcGxpZWQgYHgtb3JnLWlkYCBoZWFkZXIg4oCUXG4gICAgLy8gc3Bvb2ZhYmxlLCBsZXR0aW5nIGFuIGF0dGFja2VyIHJvdGF0ZSB2YWx1ZXMgdG8gZXZhZGUgdGhlIGJ1Y2tldCBvclxuICAgIC8vIGZsb29kIGEgdmljdGltIG9yZydzIGJ1Y2tldC4gaXBLZXlHZW5lcmF0b3Igbm9ybWFsaXplcyBJUHY2IHRvIGEgLzY0XG4gICAgLy8gcHJlZml4IChhbHNvIHJlcXVpcmVkIGJ5IGV4cHJlc3MtcmF0ZS1saW1pdCA4LngncyB2YWxpZGF0b3IpLlxuICAgIGtleUdlbmVyYXRvcjogKHJlcTogUmVxdWVzdCkgPT4gaXBLZXlHZW5lcmF0b3IocmVxLmlwIHx8ICdhbm9uJywgNjQpLFxuICAgIC8vIEEgc3RvcmUgZmFpbHVyZSAoUmVkaXMgZG93biAvIGZhaWxpbmcgb3ZlcikgbXVzdCBkZWdyYWRlIHRvIFwibm90IHJhdGVcbiAgICAvLyBsaW1pdGVkXCIsIG5ldmVyIHRvIGEgNTAwIG9uIGV2ZXJ5IHJlcXVlc3Qgb2YgZXZlcnkgc2VydmljZS5cbiAgICBwYXNzT25TdG9yZUVycm9yOiB0cnVlLFxuICAgIGhhbmRsZXI6IChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MjksICdUb28gbWFueSByZXF1ZXN0cywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLCBFcnJvckNvZGUuUkFURV9MSU1JVF9FWENFRURFRCk7XG4gICAgfSxcbiAgICAvLyBTaGFyZWQgc3RhdGUgYWNyb3NzIHJlcGxpY2FzICh0aGUgcHJvY2Vzcy13aWRlIHJhdGUtbGltaXQgUmVkaXMgY29ubmVjdGlvbjtcbiAgICAvLyB1bmRlZmluZWQgd2l0aG91dCBSZWRpcyDihpIgcGVyLXByb2Nlc3MgbWVtb3J5IHN0b3JlLCByaWdodCBmb3Igb25lIHJlcGxpY2EpLlxuICAgIC8vIE5hbWVzcGFjZWQgcGVyIFNFUlZJQ0U6IGV2ZXJ5IHNlcnZpY2Ugc2hhcmVzIG9uZSBSZWRpcywgYW5kIGFuIHVucHJlZml4ZWRcbiAgICAvLyBgcmw6PGlwPmAga2V5IHdvdWxkIGxldCBvbmUgY2xpZW50J3MgdHJhZmZpYyB0byBBTlkgc2VydmljZSBkcmFpbiBpdHNcbiAgICAvLyBidWRnZXQgb24gRVZFUlkgc2VydmljZS5cbiAgICBzdG9yZTogY3JlYXRlU2hhcmVkUmF0ZUxpbWl0U3RvcmUoYCR7c2VydmljZU5hbWV9Omdsb2JhbGApLFxuICB9O1xuXG4gIGFwcC51c2UocmF0ZUxpbWl0KHJhdGVMaW1pdE9wdGlvbnMpKTtcbn1cblxuLyoqIFJlcXVlc3QgdGltZW91dCwgZHVyYXRpb24gbG9nZ2luZyBhbmQgSFRUUCBtZXRyaWNzLiAqL1xuZnVuY3Rpb24gYXBwbHlSZXF1ZXN0VGVsZW1ldHJ5KGFwcDogRXhwcmVzcyk6IHZvaWQge1xuICAvLyBFeHByZXNzIHJlcXVlc3QgdGltZW91dCDigJQgdXNlcyBDb3JlQ29uc3RhbnRzIHRvIHNoYXJlIHRoZSBzYW1lIGRlZmF1bHQgYXMgTGFtYmRhIGhhbmRsZXJzXG4gIGNvbnN0IHRpbWVvdXRNcyA9IENvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TO1xuICBhcHAudXNlKChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICByZXMuc2V0VGltZW91dCh0aW1lb3V0TXMsICgpID0+IHtcbiAgICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSB7XG4gICAgICAgIHNlbmRFcnJvcihyZXMsIDUwMywgJ1JlcXVlc3QgdGltZW91dCcpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gUmVxdWVzdCBkdXJhdGlvbiBsb2dnaW5nXG4gIGNvbnN0IGR1cmF0aW9uTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZXF1ZXN0LWR1cmF0aW9uJyk7XG4gIGFwcC51c2UoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHJlcy5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAvLyBMb2cgYHJlcS5wYXRoYCAobm8gcXVlcnkgc3RyaW5nKSDigJQgYSBzdHJheSBgP3Rva2VuPWAvYD90aWNrZXQ9YCBtdXN0IG5vdCBiZVxuICAgICAgLy8gcGVyc2lzdGVkIHZlcmJhdGltIG9uIGV2ZXJ5IHJlcXVlc3QgKG1pcnJvcnMgdGhlIGF1dGh6LWRlbmlhbCBhdWRpdG9yJ3Mgc3RyaXApLlxuICAgICAgZHVyYXRpb25Mb2dnZXIuaW5mbyhgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofSAke3Jlcy5zdGF0dXNDb2RlfSAke2R1cmF0aW9ufW1zYCwge1xuICAgICAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICAgIHBhdGg6IHJlcS5wYXRoLFxuICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgZHVyYXRpb25NczogZHVyYXRpb24sXG4gICAgICAgIHJlcXVlc3RJZDogcmVxLnJlcXVlc3RJZCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gUHJvbWV0aGV1cyBtZXRyaWNzIG1pZGRsZXdhcmUg4oCUIHJlY29yZHMgcmVxdWVzdCBkdXJhdGlvbiBhbmQgY291bnRcbiAgYXBwLnVzZShtZXRyaWNzTWlkZGxld2FyZSgpKTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBTU0UgbWFuYWdlci4gVGhlIHJlbGF5ICh0aGlzIHNlcnZpY2UncyBvd24gUmVkaXMgY2hhbm5lbCkgaXNcbiAqIGJ1aWx0IG9ubHkgd2hlbiBzb21ldGhpbmcgc3RyZWFtczogdGhlIGxvZyBzdHJlYW0gdHVybnMgaXQgb24gaGVyZSwgYW5kIGFuXG4gKiBvcmcta2V5ZWQgY2hhbm5lbCB0dXJucyBpdCBvbiB3aGVuIHJlZ2lzdGVyZWQgKHJlZ2lzdGVyU3NlVGlja2V0Q2hhbm5lbCkuXG4gKiBUaGUgbG9nIHRpY2tldCBzdG9yZSBleGlzdHMgb25seSB3aXRoIHRoZSBsb2cgc3RyZWFtLlxuICovXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0U3NlTWFuYWdlcihzZXJ2aWNlTmFtZTogc3RyaW5nLCBsb2dTdHJlYW06IGJvb2xlYW4pOiBTU0VNYW5hZ2VyIHtcbiAgY29uc3Qgc3NlTWFuYWdlciA9IG5ldyBTU0VNYW5hZ2VyKHtcbiAgICBsb2dTdHJlYW0sXG4gICAgcmVsYXlGYWN0b3J5OiAoKSA9PiBjcmVhdGVFbnZSZWRpc1NTRVJlbGF5KHNlcnZpY2VOYW1lKSxcbiAgICAuLi4obG9nU3RyZWFtICYmIHtcbiAgICAgIHRpY2tldFN0b3JlOiBjcmVhdGVFbnZTc2VUaWNrZXRTdG9yZSh7XG4gICAgICAgIHR0bE1zOiBTU0VfVElDS0VUX1RUTF9NUyxcbiAgICAgICAga2V5UHJlZml4OiBgbG9nczoke3NlcnZpY2VOYW1lfWAsXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSk7XG4gIGlmIChsb2dTdHJlYW0pIHNzZU1hbmFnZXIuZW5hYmxlUmVsYXkoKTtcbiAgcmV0dXJuIHNzZU1hbmFnZXI7XG59XG5cbi8qKlxuICogVGhlIHBlci1yZXF1ZXN0IGJ1aWxkLWxvZyBzdHJlYW06IGBQT1NUIC9sb2dzL3RpY2tldGAgKyBgR0VUIC9sb2dzLzpyZXF1ZXN0SWRgLlxuICpcbiAqIFRpY2tldC1nYXRlZCDigJQgdGhlIHN0cmVhbSBjYXJyaWVzIHBlci1vcmcgYnVpbGQgbG9ncywgc28gaXQgbXVzdCBub3QgYmVcbiAqIHdvcmxkLXJlYWRhYmxlLiBDbGllbnRzIGZpcnN0IFBPU1QgL2xvZ3MvdGlja2V0IChKV1QtYXV0aGVudGljYXRlZCkgdG8gbWludCBhXG4gKiBzaG9ydC1saXZlZCwgc2luZ2xlLXVzZSB0aWNrZXQgYm91bmQgdG8gdGhlaXIgb3JnIEFORCB0byB0aGUgc3BlY2lmaWNcbiAqIGByZXF1ZXN0SWRgIHN0cmVhbSB0aGV5IGludGVuZCB0byBvcGVuLCB0aGVuIG9wZW4gdGhlIEV2ZW50U291cmNlIHdpdGhcbiAqID90aWNrZXQ9PHQ+LiBUaGlzIGtlZXBzIHRoZSBKV1Qgb3V0IG9mIHF1ZXJ5IHN0cmluZ3MgLyBhY2Nlc3MgbG9ncyB3aGlsZVxuICogZW5mb3JjaW5nIG9yZyBvd25lcnNoaXAsIHBlci1zdWJqZWN0IGF1dGhvcml6YXRpb24sIGFuZCB0aGUgcGVyLW9yZ1xuICogY29ubmVjdGlvbiBjYXAgb24gdGhlIHN0cmVhbS4gTWlycm9ycyB0aGUgbWVzc2FnZS1zZXJ2aWNlIG5vdGlmaWNhdGlvbnMgU1NFXG4gKiB0aWNrZXQgZXhjaGFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHdpcmVTc2UoYXBwOiBFeHByZXNzLCBzc2VNYW5hZ2VyOiBTU0VNYW5hZ2VyKTogdm9pZCB7XG4gIGFwcC5wb3N0KCcvbG9ncy90aWNrZXQnLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IG9yZ0lkID0gcmVxLnVzZXI/Lm9yZ2FuaXphdGlvbklkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghb3JnSWQpIHtcbiAgICAgIHNlbmRFcnJvcihyZXMsIDQwMCwgJ1Rva2VuIG1pc3Npbmcgb3JnYW5pemF0aW9uJywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgY2FsbGVyIG11c3QgbmFtZSB0aGUgc3RyZWFtIHN1YmplY3QgdXAgZnJvbnQgc28gdGhlIHRpY2tldCBpcyBib3VuZCB0b1xuICAgIC8vIGl0LiBXaXRob3V0IHRoaXMsIGEgdGlja2V0IGNvdWxkIGJlIHJlcGxheWVkIGFnYWluc3QgQU5ZIHJlcXVlc3RJZCB0aGVcbiAgICAvLyBvcmcgY291bGQgZ3Vlc3MsIGxldHRpbmcgaXQgYXR0YWNoIHRvIGFub3RoZXIgb3JnJ3MgbG9nIHN0cmVhbS4gU3RyaWN0bHlcbiAgICAvLyBmb3JtYXQtdmFsaWRhdGVkIHNvIGl0IGNhbid0IGNhcnJ5IGFuIGluamVjdGlvbiBwYXlsb2FkIGludG8gdGhlIHN1YmplY3QuXG4gICAgY29uc3QgcmVxdWVzdElkID0gKHJlcS5ib2R5IGFzIHsgcmVxdWVzdElkPzogdW5rbm93biB9IHwgdW5kZWZpbmVkKT8ucmVxdWVzdElkO1xuICAgIGlmICh0eXBlb2YgcmVxdWVzdElkICE9PSAnc3RyaW5nJyB8fCAhU1NFX1JFUVVFU1RfSURfUkUudGVzdChyZXF1ZXN0SWQpKSB7XG4gICAgICBzZW5kRXJyb3IocmVzLCA0MDAsICdNaXNzaW5nIG9yIGludmFsaWQgcmVxdWVzdElkJywgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzc2VNYW5hZ2VyLmNyZWF0ZVRpY2tldChvcmdJZCwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdmb3JiaWRkZW4nKSB7XG4gICAgICAgIC8vIFRoZSBzdWJqZWN0IGlzIG93bmVkIGJ5IGFub3RoZXIgb3JnIOKAlCBkbyBub3QgY29uZmlybSBpdCBleGlzdHM7IGEgcGxhaW5cbiAgICAgICAgLy8gNDAzIGlzIGVub3VnaCBhbmQgbGVha3Mgbm90aGluZyBhYm91dCB3aGljaCByZXF1ZXN0SWRzIGFyZSBsaXZlLlxuICAgICAgICBzZW5kRXJyb3IocmVzLCA0MDMsICdOb3QgYXV0aG9yaXplZCBmb3IgdGhpcyBsb2cgc3RyZWFtJywgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdvcmctbGltaXQnKSB7XG4gICAgICAgIHNlbmRFcnJvcihyZXMsIDQyOSwgJ1RvbyBtYW55IGxvZyBzdHJlYW0gdGlja2V0cyBpc3N1ZWQnLCBFcnJvckNvZGUuUVVPVEFfRVhDRUVERUQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VuZEVycm9yKHJlcywgNTAzLCAnTG9nIHN0cmVhbWluZyBzdWJzeXN0ZW0gYXQgY2FwYWNpdHknLCBFcnJvckNvZGUuUVVPVEFfRVhDRUVERUQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyB0aWNrZXQ6IHJlc3VsdC50aWNrZXQgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBzdHJlYW0gaXRzZWxmIHJlc29sdmVzICsgY29uc3VtZXMgdGhlIHRpY2tldCBpbnNpZGUgbWlkZGxld2FyZSgpIGFuZFxuICAvLyByZWplY3RzIGFueSBhbm9ueW1vdXMgLyBpbnZhbGlkIC8gZXhwaXJlZCAvIGFscmVhZHktdXNlZCB0aWNrZXQgd2l0aCA0MDEuXG4gIGFwcC5nZXQoJy9sb2dzLzpyZXF1ZXN0SWQnLCBzc2VNYW5hZ2VyLm1pZGRsZXdhcmUoKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuZCBjb25maWd1cmUgYW4gRXhwcmVzcyBhcHBsaWNhdGlvbiB3aXRoIGNvbW1vbiBtaWRkbGV3YXJlXG4gKlxuICogU2V0cyB1cDpcbiAqIC0gQ09SUyB3aXRoIGNvbmZpZ3VyZWQgb3JpZ2luc1xuICogLSBIZWxtZXQgc2VjdXJpdHkgaGVhZGVyc1xuICogLSBSYXRlIGxpbWl0aW5nXG4gKiAtIEpTT04gYW5kIFVSTC1lbmNvZGVkIGJvZHkgcGFyc2luZ1xuICogLSBUcnVzdCBwcm94eSBzZXR0aW5nc1xuICogLSBIZWFsdGggY2hlY2sgZW5kcG9pbnQgKC9oZWFsdGgpXG4gKiAtIE1ldHJpY3MgZW5kcG9pbnQgKC9tZXRyaWNzKVxuICogLSBTU0UgbG9ncyBlbmRwb2ludCAoL2xvZ3MvOnJlcXVlc3RJZCkg4oCUIG9ubHkgd2l0aCBgbG9nU3RyZWFtOiB0cnVlYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEV4cHJlc3MgYXBwIGFuZCBTU0UgbWFuYWdlclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IGFwcCwgc3NlTWFuYWdlciB9ID0gY3JlYXRlQXBwKCk7XG4gKlxuICogYXBwLnBvc3QoJy9hcGkvcmVzb3VyY2UnLCByZXF1aXJlQXV0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gKiAgIC8vIFlvdXIgcm91dGUgaGFuZGxlclxuICogfSk7XG4gKlxuICogc3RhcnRTZXJ2ZXIoYXBwLCB7IG5hbWU6ICdNeSBTZXJ2aWNlJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwKG9wdGlvbnM6IENyZWF0ZUFwcE9wdGlvbnMgPSB7fSk6IENyZWF0ZUFwcFJlc3VsdCB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVSYXRlTGltaXQgPSB0cnVlLFxuICAgIGxvZ1N0cmVhbSA9IGZhbHNlLFxuICAgIGVuYWJsZU9wZW5BcGkgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJztcblxuICAvLyBBIGNhbGxlci1zdXBwbGllZCBgc3NlTWFuYWdlcmAgc2tpcHMgdGhlIGRlZmF1bHQgY29uc3RydWN0aW9uIGVudGlyZWx5LlxuICBjb25zdCBzc2VNYW5hZ2VyID0gb3B0aW9ucy5zc2VNYW5hZ2VyID8/IGNyZWF0ZURlZmF1bHRTc2VNYW5hZ2VyKHNlcnZpY2VOYW1lLCBsb2dTdHJlYW0pO1xuXG4gIC8vIFdpcmUgdGhlIGlkZW1wb3RlbmN5IHJlcGxheS1jYWNoZSBiYWNrZW5kIHVzZWQgYnkgdGhlIHBvc3QtYXV0aCByb3V0ZVxuICAvLyBmYWN0b3JpZXMgKGNyZWF0ZVByb3RlY3RlZFJvdXRlIC8gY3JlYXRlQXV0aGVudGljYXRlZFdpdGhPcmdSb3V0ZSkuIFByZWZlclxuICAvLyBhbiBleHBsaWNpdGx5IGluamVjdGVkIHN0b3JlOyBvdGhlcndpc2UgYXV0by1jb25zdHJ1Y3QgZnJvbSB0aGUgc2hhcmVkIGVudlxuICAvLyBSZWRpcyBzbyBrZXllZCBtdXRhdGlvbiByZXRyaWVzIGRlZHVwZSBhY3Jvc3MgcmVwbGljYXMuIEZhbGxzIGJhY2sgdG8gdGhlXG4gIC8vIGluLW1lbW9yeSBkZWZhdWx0IHdoZW4gbm8gUmVkaXMgaXMgY29uZmlndXJlZCAoc2luZ2xlLXJlcGxpY2EgY29ycmVjdG5lc3MpLlxuICBjb25zdCByZXNvbHZlZElkZW1wb3RlbmN5U3RvcmUgPSBvcHRpb25zLmlkZW1wb3RlbmN5U3RvcmUgPz8gY3JlYXRlRW52UmVkaXNJZGVtcG90ZW5jeVN0b3JlKCk7XG4gIGlmIChyZXNvbHZlZElkZW1wb3RlbmN5U3RvcmUpIHtcbiAgICBzZXRJZGVtcG90ZW5jeVN0b3JlKHJlc29sdmVkSWRlbXBvdGVuY3lTdG9yZSk7XG4gIH1cblxuICAvLyBPcGVuVGVsZW1ldHJ5IGlzIE5PVCBpbml0aWFsaXplZCBoZXJlOiBieSB0aGUgdGltZSBjcmVhdGVBcHAgcnVucywgZXhwcmVzc1xuICAvLyBhbmQgaHR0cCBoYXZlIGFscmVhZHkgYmVlbiByZXF1aXJlZCwgc28gdGhlIGF1dG8taW5zdHJ1bWVudGF0aW9uIGhvb2tzXG4gIC8vIHdvdWxkIGhhdmUgbm90aGluZyB0byBwYXRjaCAobm8gaW5ib3VuZCBzcGFuIOKGkiBubyB0cmFjZSBpZCkuIFRyYWNpbmcgaXNcbiAgLy8gc3RhcnRlZCBieSB0aGUgYG90ZWwtYm9vdHN0cmFwLmpzYCBwcmVsb2FkIGluc3RlYWQgKG5vZGUgLXIg4oCmIOKAlCBzZWUgZWFjaFxuICAvLyBzZXJ2aWNlJ3MgRG9ja2VyZmlsZSBDTUQgLyBzdGFydCBzY3JpcHQpLCB3aGljaCBydW5zIGJlZm9yZSBhbnlcbiAgLy8gaW5zdHJ1bWVudGVkIG1vZHVsZSBsb2Fkcy4gYGN1cnJlbnRUcmFjZUlkKClgIHRoZW4gcmVhZHMgdGhlIGFjdGl2ZSBzcGFuLlxuXG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICBhcHBseVNlY3VyaXR5SGVhZGVycyhhcHAsIG9wdGlvbnMsIGVuYWJsZU9wZW5BcGkpO1xuICBhcHBseUJvZHlQYXJzaW5nKGFwcCwgb3B0aW9ucyk7XG5cbiAgLy8gVHJ1c3QgcHJveHkgKG11c3QgYmUgc2V0IGJlZm9yZSByYXRlIGxpbWl0ZXIgc28gcmVxLmlwIHJlc29sdmVzIGNvcnJlY3RseSlcbiAgYXBwLnNldCgndHJ1c3QgcHJveHknLCBDb25maWcuZ2V0KCdzZXJ2ZXInKS50cnVzdFByb3h5KTtcblxuICAvLyBSZXF1ZXN0IElEICsgYXVkaXQgY29udGV4dC4gUHJlZmVyIHRoZSBpbmJvdW5kIGBYLVJlcXVlc3QtSWRgIChuZ2lueCwgb3IgYVxuICAvLyBwZWVyIHNlcnZpY2UgLyBDTEkgZm9yd2FyZGluZyBpdHMgb3duKSB3aGVuIGl0IGlzIGEgYm91bmRlZCBvcGFxdWUgdG9rZW4g4oCUXG4gIC8vIGFuIG92ZXJzaXplZCBvciBqdW5rIHZhbHVlIGlzIHJlcGxhY2VkLCBub3Qgc3RvcmVkIOKAlCBvdGhlcndpc2UgZ2VuZXJhdGUgb25lLlxuICAvLyBUaGUgcmVzdCBvZiB0aGUgcmVxdWVzdCB0aGVuIHJ1bnMgaW5zaWRlIGFuIGF1ZGl0LWNvbnRleHQgc2NvcGUsIHNvIGV2ZXJ5XG4gIC8vIGByZWNvcmRBdWRpdGAgaXQgbWFrZXMgY2FycmllcyB0aGUgcmVxdWVzdCBpZCwgdHJhY2UgaWQsIGNsaWVudCBpcCAvIFVBLCB0aGVcbiAgLy8gdmVyaWZpZWQgY3JlZGVudGlhbCAocmVhZCBsYXppbHksIGFmdGVyIGByZXF1aXJlQXV0aGApIGFuZCBhbnkgaW5ib3VuZFxuICAvLyBgWC1QaXBlbGluZS1FeGVjdXRpb24tSWRgIC8gYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCAvIGBYLVNvdXJjZS1FdmVudC1JZGBcbiAgLy8gd2l0aCBubyBjYWxsLXNpdGUgY2hhbmdlLiBNb3VudGVkIGFmdGVyIGB0cnVzdCBwcm94eWAgc28gYHJlcS5pcGAgaXMgcmVhbC5cbiAgYXBwLnVzZSgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBoZHIgPSByZXEuaGVhZGVyc1sneC1yZXF1ZXN0LWlkJ107XG4gICAgY29uc3QgcmVxdWVzdElkID0gc2FuaXRpemVDb3JyZWxhdGlvbklkKEFycmF5LmlzQXJyYXkoaGRyKSA/IGhkclswXSA6IGhkcikgPz8gdXVpZCgpO1xuICAgIHJlcS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgcmVzLnNldEhlYWRlcignWC1SZXF1ZXN0LUlkJywgcmVxdWVzdElkKTtcbiAgICBydW5XaXRoQXVkaXRDb250ZXh0KGF1ZGl0Q29udGV4dEZyb21SZXF1ZXN0KHJlcSwgeyByZXF1ZXN0SWQsIHRyYWNlSWQ6IGN1cnJlbnRUcmFjZUlkKCkgfSksIG5leHQpO1xuICB9KTtcblxuICBtb3VudEluZnJhRW5kcG9pbnRzKGFwcCwgb3B0aW9ucywgc2VydmljZU5hbWUsIGVuYWJsZU9wZW5BcGkpO1xuICAvLyBBIENMSSBvbGRlciB0aGFuIFBJUEVMSU5FX01BTkFHRVJfTUlOX1ZFUlNJT04gZ2V0cyA0MjYgXCJydW4gLS11cGdyYWRlXCJcbiAgLy8gKG5vLW9wIHdoaWxlIHVuc2V0KS4gQWZ0ZXIgdGhlIGluZnJhIGVuZHBvaW50cywgc28gcHJvYmVzIG5ldmVyIHNlZSBpdC5cbiAgYXBwLnVzZShjbGllbnRWZXJzaW9uR2F0ZSgpKTtcbiAgaWYgKGVuYWJsZVJhdGVMaW1pdCkgbW91bnRSYXRlTGltaXRlcihhcHAsIHNlcnZpY2VOYW1lKTtcbiAgYXBwbHlSZXF1ZXN0VGVsZW1ldHJ5KGFwcCk7XG5cbiAgLy8gTk9URTogaWRlbXBvdGVuY3kgaXMgaW50ZW50aW9uYWxseSBOT1QgbW91bnRlZCBoZXJlLiBJdCBuZWVkcyB0aGUgVkVSSUZJRURcbiAgLy8gb3JnIGlkIHRvIG5hbWVzcGFjZSBpdHMgcmVwbGF5IGNhY2hlLCBidXQgdGhpcyBwcmUtYXV0aCBwb3NpdGlvbiBydW5zIGJlZm9yZVxuICAvLyBgcmVxdWlyZUF1dGhgL2BhdHRhY2hSZXF1ZXN0Q29udGV4dGAgcG9wdWxhdGUgaWRlbnRpdHksIHNvIGEgZ2xvYmFsIG1vdW50XG4gIC8vIGhlcmUgaXMgYSBwZXJtYW5lbnQgbm8tb3AgKG9yZyBhbHdheXMgdW5kZWZpbmVkIOKGkiBza2lwKS4gSXQgaXMgaW5zdGVhZCB3aXJlZFxuICAvLyBpbnRvIHRoZSBwb3N0LWF1dGggcm91dGUgY2hhaW5zIOKAlCBzZWUgYGNyZWF0ZVByb3RlY3RlZFJvdXRlYCAvXG4gIC8vIGBjcmVhdGVBdXRoZW50aWNhdGVkV2l0aE9yZ1JvdXRlYCBpbiBtaWRkbGV3YXJlLWZhY3RvcnkudHMuXG5cbiAgaWYgKGxvZ1N0cmVhbSkgd2lyZVNzZShhcHAsIHNzZU1hbmFnZXIpO1xuXG4gIHJldHVybiB7IGFwcCwgc3NlTWFuYWdlciB9O1xufVxuIl19
package/package.json CHANGED
@@ -35,9 +35,9 @@
35
35
  "@opentelemetry/instrumentation": "0.301.1",
36
36
  "@opentelemetry/resources": "3.1.1",
37
37
  "@opentelemetry/sdk-node": "0.301.1",
38
- "@pipeline-builder/api-core": "5.2.7",
39
- "@pipeline-builder/pipeline-core": "4.4.7",
40
- "@pipeline-builder/pipeline-data": "4.3.7",
38
+ "@pipeline-builder/api-core": "5.2.8",
39
+ "@pipeline-builder/pipeline-core": "4.4.9",
40
+ "@pipeline-builder/pipeline-data": "4.3.9",
41
41
  "compression": "1.8.2",
42
42
  "cors": "2.8.6",
43
43
  "express": "5.3.0",
@@ -112,7 +112,7 @@
112
112
  "registry": "https://registry.npmjs.org/",
113
113
  "provenance": true
114
114
  },
115
- "version": "4.4.7",
115
+ "version": "4.4.9",
116
116
  "bugs": {
117
117
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
118
118
  },