@workflow/core 5.0.0-beta.11 → 5.0.0-beta.13

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.
@@ -156,6 +156,9 @@ function parseHealthCheckResponse(chunks) {
156
156
  if (typeof r.specVersion === 'number') {
157
157
  parsed.specVersion = r.specVersion;
158
158
  }
159
+ if (typeof r.workflowCoreVersion === 'string') {
160
+ parsed.workflowCoreVersion = r.workflowCoreVersion;
161
+ }
159
162
  return parsed;
160
163
  }
161
164
  export async function healthCheck(world, endpoint, options) {
@@ -460,4 +463,4 @@ export function memoizeEncryptionKey(world, runOrId) {
460
463
  return cached;
461
464
  };
462
465
  }
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUXZFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixHQUNwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4QyxPQUFPLEVBQWtCLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLElBQUksbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELHdEQUF3RDtBQUN4RCxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztBQUU1Qzs7OztHQUlHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxzQkFBc0IsQ0FBQztBQUUxRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFlBQW9CO0lBQ3ZELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLElBQUksS0FBSyxDQUNiLDBCQUEwQixZQUFZLHdHQUF3RyxDQUMvSSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sa0JBQWtCLFlBQVksRUFBb0IsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FB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RCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUlVOX0VSUk9SX0NPREVTLCBXb3JrZmxvd1dvcmxkRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHtcbiAgRXZlbnQsXG4gIEhlYWx0aENoZWNrUGF5bG9hZCxcbiAgVmFsaWRRdWV1ZU5hbWUsXG4gIFdvcmtmbG93UnVuLFxuICBXb3JsZCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIEhlYWx0aENoZWNrUGF5bG9hZFNjaGVtYSxcbiAgU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gIFNQRUNfVkVSU0lPTl9MRUdBQ1ksXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBtb25vdG9uaWNGYWN0b3J5IH0gZnJvbSAndWxpZCc7XG5cbmltcG9ydCB7IHR5cGUgQ3J5cHRvS2V5LCBpbXBvcnRLZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4uL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG5pbXBvcnQgeyBnZXRTcGFuS2luZCwgdHJhY2UgfSBmcm9tICcuLi90ZWxlbWV0cnkuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiBhcyB3b3JrZmxvd0NvcmVWZXJzaW9uIH0gZnJvbSAnLi4vdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBnZXRXb3JsZExhenkgfSBmcm9tICcuL2dldC13b3JsZC1sYXp5LmpzJztcblxuLyoqIERlZmF1bHQgdGltZW91dCBmb3IgaGVhbHRoIGNoZWNrcyBpbiBtaWxsaXNlY29uZHMgKi9cbmNvbnN0IERFRkFVTFRfSEVBTFRIX0NIRUNLX1RJTUVPVVQgPSAzMF8wMDA7XG5cbi8qKlxuICogUGF0dGVybiBmb3Igc2FmZSB3b3JrZmxvdyBuYW1lcy4gT25seSBhbGxvd3MgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsXG4gKiB1bmRlcnNjb3JlcywgaHlwaGVucywgZG90cywgZm9yd2FyZCBzbGFzaGVzIChmb3IgbmFtZXNwYWNlZCB3b3JrZmxvd3MpLFxuICogYW5kIGF0IHNpZ25zIChmb3Igc2NvcGVkIHBhY2thZ2VzKS5cbiAqL1xuY29uc3QgU0FGRV9XT1JLRkxPV19OQU1FX1BBVFRFUk4gPSAvXlthLXpBLVowLTlfXFwtLi9AXSskLztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSB3b3JrZmxvdyBuYW1lIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlIG5hbWUuXG4gKiBFbnN1cmVzIHRoZSB3b3JrZmxvdyBuYW1lIG9ubHkgY29udGFpbnMgc2FmZSBjaGFyYWN0ZXJzIGJlZm9yZVxuICogaW50ZXJwb2xhdGluZyBpdCBpbnRvIHRoZSBxdWV1ZSBuYW1lIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtmbG93UXVldWVOYW1lKHdvcmtmbG93TmFtZTogc3RyaW5nKTogVmFsaWRRdWV1ZU5hbWUge1xuICBpZiAoIVNBRkVfV09SS0ZMT1dfTkFNRV9QQVRURVJOLnRlc3Qod29ya2Zsb3dOYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIHdvcmtmbG93IG5hbWUgXCIke3dvcmtmbG93TmFtZX1cIjogbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBoeXBoZW5zLCBkb3RzLCBmb3J3YXJkIHNsYXNoZXMsIG9yIGF0IHNpZ25zYFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGBfX3drZl93b3JrZmxvd18ke3dvcmtmbG93TmFtZX1gIGFzIFZhbGlkUXVldWVOYW1lO1xufVxuXG5jb25zdCBnZW5lcmF0ZUlkID0gbW9ub3RvbmljRmFjdG9yeSgpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmVhbSBuYW1lIGZvciBhIGhlYWx0aCBjaGVjayB3aXRoIHRoZSBnaXZlbiBjb3JyZWxhdGlvbiBJRC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGVhbHRoQ2hlY2tTdHJlYW1OYW1lKGNvcnJlbGF0aW9uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgX19oZWFsdGhfY2hlY2tfXyR7Y29ycmVsYXRpb25JZH1gO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIGhlYWx0aCBjaGVjayBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2tSZXN1bHQge1xuICBoZWFsdGh5OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSBpZiBoZWFsdGggY2hlY2sgZmFpbGVkICovXG4gIGVycm9yPzogc3RyaW5nO1xuICAvKiogTGF0ZW5jeSBpZiB0aGUgaGVhbHRoIGNoZWNrIHdhcyBzdWNjZXNzZnVsICovXG4gIGxhdGVuY3lNcz86IG51bWJlcjtcbiAgLyoqIFNwZWMgdmVyc2lvbiBvZiB0aGUgcmVzcG9uZGluZyBkZXBsb3ltZW50ICovXG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbWVzc2FnZSBpcyBhIGhlYWx0aCBjaGVjayBwYXlsb2FkLlxuICogSWYgc28sIHJldHVybnMgdGhlIHBhcnNlZCBwYXlsb2FkLiBPdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhlYWx0aENoZWNrUGF5bG9hZChcbiAgbWVzc2FnZTogdW5rbm93blxuKTogSGVhbHRoQ2hlY2tQYXlsb2FkIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzdWx0ID0gSGVhbHRoQ2hlY2tQYXlsb2FkU2NoZW1hLnNhZmVQYXJzZShtZXNzYWdlKTtcbiAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpYyBmYWtlIHJ1bklkIGZvciBoZWFsdGggY2hlY2sgc3RyZWFtcy5cbiAqIEJvdGggdGhlIHdyaXRlciAoaGFuZGxlSGVhbHRoQ2hlY2tNZXNzYWdlKSBhbmQgcmVhZGVyIChoZWFsdGhDaGVjaykgZGVyaXZlXG4gKiB0aGUgc2FtZSBydW5JZCBmcm9tIHRoZSBjb3JyZWxhdGlvbklkIHNvIHRoYXQgaW1wbGVtZW50YXRpb25zIHRoYXQgc2NvcGVcbiAqIHN0cmVhbSByZWFkcyBieSBydW5JZCBzdGlsbCB3b3JrIGNvcnJlY3RseS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVIZWFsdGhDaGVja1J1bklkKGNvcnJlbGF0aW9uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgd3J1bl9oY18ke2NvcnJlbGF0aW9uSWR9YDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGEgaGVhbHRoIGNoZWNrIG1lc3NhZ2UgYnkgd3JpdGluZyB0aGUgcmVzdWx0IHRvIHRoZSB3b3JsZCdzIHN0cmVhbS5cbiAqIFRoZSBjYWxsZXIgY2FuIGxpc3RlbiB0byB0aGlzIHN0cmVhbSB0byBnZXQgdGhlIGhlYWx0aCBjaGVjayByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gaGVhbHRoQ2hlY2sgLSBUaGUgcGFyc2VkIGhlYWx0aCBjaGVjayBwYXlsb2FkXG4gKiBAcGFyYW0gZW5kcG9pbnQgLSBXaGljaCBlbmRwb2ludCBpcyByZXNwb25kaW5nICgnd29ya2Zsb3cnIG9yICdzdGVwJylcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUhlYWx0aENoZWNrTWVzc2FnZShcbiAgaGVhbHRoQ2hlY2s6IEhlYWx0aENoZWNrUGF5bG9hZCxcbiAgZW5kcG9pbnQ6ICd3b3JrZmxvdycgfCAnc3RlcCcsXG4gIHdvcmxkU3BlY1ZlcnNpb24/OiBudW1iZXJcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkTGF6eSgpO1xuICBjb25zdCBzdHJlYW1OYW1lID0gZ2V0SGVhbHRoQ2hlY2tTdHJlYW1OYW1lKGhlYWx0aENoZWNrLmNvcnJlbGF0aW9uSWQpO1xuICBjb25zdCByZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBoZWFsdGh5OiB0cnVlLFxuICAgIGVuZHBvaW50LFxuICAgIGNvcnJlbGF0aW9uSWQ6IGhlYWx0aENoZWNrLmNvcnJlbGF0aW9uSWQsXG4gICAgc3BlY1ZlcnNpb246IHdvcmxkU3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgd29ya2Zsb3dDb3JlVmVyc2lvbixcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gIH0pO1xuICAvLyBVc2UgYSBkZXRlcm1pbmlzdGljIGZha2UgcnVuSWQgZGVyaXZlZCBmcm9tIHRoZSBjb3JyZWxhdGlvbklkIHNvIHRoYXRcbiAgLy8gdGhlIHJlYWRlciBzaWRlIHByb2R1Y2VzIHRoZSBzYW1lIHZhbHVlLlxuICBjb25zdCBmYWtlUnVuSWQgPSBnZW5lcmF0ZUhlYWx0aENoZWNrUnVuSWQoaGVhbHRoQ2hlY2suY29ycmVsYXRpb25JZCk7XG4gIGF3YWl0IHdvcmxkLnN0cmVhbXMud3JpdGUoZmFrZVJ1bklkLCBzdHJlYW1OYW1lLCByZXNwb25zZSk7XG4gIGF3YWl0IHdvcmxkLnN0cmVhbXMuY2xvc2UoZmFrZVJ1bklkLCBzdHJlYW1OYW1lKTtcbn1cblxuZXhwb3J0IHR5cGUgSGVhbHRoQ2hlY2tFbmRwb2ludCA9ICd3b3JrZmxvdycgfCAnc3RlcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2tPcHRpb25zIHtcbiAgLyoqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGhlYWx0aCBjaGVjayByZXNwb25zZS4gRGVmYXVsdDogMzAwMDAgKDMwcykgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIERlcGxveW1lbnQgSUQgdG8gc2VuZCB0aGUgaGVhbHRoIGNoZWNrIHRvLiBGYWxscyBiYWNrIHRvIHByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lELiAqL1xuICBkZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyZm9ybXMgYSBoZWFsdGggY2hlY2sgYnkgc2VuZGluZyBhIG1lc3NhZ2UgdGhyb3VnaCB0aGUgcXVldWUgcGlwZWxpbmVcbiAqIGFuZCB2ZXJpZnlpbmcgaXQgaXMgcHJvY2Vzc2VkIGJ5IHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBieXBhc3NlcyBEZXBsb3ltZW50IFByb3RlY3Rpb24gb24gVmVyY2VsIGJlY2F1c2UgaXQgZ29lc1xuICogdGhyb3VnaCB0aGUgcXVldWUgaW5mcmFzdHJ1Y3R1cmUgcmF0aGVyIHRoYW4gZGlyZWN0IEhUVFAuXG4gKlxuICogQHBhcmFtIHdvcmxkIC0gVGhlIFdvcmxkIGluc3RhbmNlIHRvIHVzZSBmb3IgdGhlIGhlYWx0aCBjaGVja1xuICogQHBhcmFtIGVuZHBvaW50IC0gV2hpY2ggZW5kcG9pbnQgdG8gaGVhbHRoIGNoZWNrOiAnd29ya2Zsb3cnIG9yICdzdGVwJ1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgaGVhbHRoIGNoZWNrXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBoZWFsdGggY2hlY2sgcmVzdWx0XG4gKi9cbi8vIFBvbGwgaW50ZXJ2YWwgZm9yIGhlYWx0aCBjaGVjayByZXRyaWVzIChtcylcbmNvbnN0IEhFQUxUSF9DSEVDS19QT0xMX0lOVEVSVkFMID0gMTAwO1xuLy8gUGVyLXJlYWQgdGltZW91dCB0byBwcmV2ZW50IGJsb2NraW5nIGZvcmV2ZXIgb24gbG9jYWwgd29ybGQncyBFdmVudEVtaXR0ZXJcbi8vICh3aGljaCBkb2Vzbid0IHdvcmsgYWNyb3NzIHByb2Nlc3NlcylcbmNvbnN0IEhFQUxUSF9DSEVDS19SRUFEX1RJTUVPVVQgPSA1MDA7XG5cbi8qKlxuICogUmVhZCBjaHVua3MgZnJvbSBhIHN0cmVhbSB3aXRoIGEgdGltZW91dCBwZXIgcmVhZCBvcGVyYXRpb24uXG4gKiBSZXR1cm5zIHsgY2h1bmtzLCB0aW1lZE91dCB9IHdoZXJlIHRpbWVkT3V0IGluZGljYXRlcyBpZiBhIHJlYWQgdGltZWQgb3V0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkU3RyZWFtV2l0aFRpbWVvdXQoXG4gIHJlYWRlcjogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyPFVpbnQ4QXJyYXk+LFxuICByZWFkVGltZW91dDogbnVtYmVyXG4pOiBQcm9taXNlPHsgY2h1bmtzOiBVaW50OEFycmF5W107IHRpbWVkT3V0OiBib29sZWFuIH0+IHtcbiAgY29uc3QgY2h1bmtzOiBVaW50OEFycmF5W10gPSBbXTtcbiAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCFkb25lICYmICF0aW1lZE91dCkge1xuICAgIGNvbnN0IHJlYWRQcm9taXNlID0gcmVhZGVyLnJlYWQoKTtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHsgZG9uZTogdHJ1ZTsgdmFsdWU6IHVuZGVmaW5lZCB9PihcbiAgICAgIChyZXNvbHZlKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgIH0sIHJlYWRUaW1lb3V0KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3JlYWRQcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pO1xuICAgIGRvbmUgPSByZXN1bHQuZG9uZTtcbiAgICBpZiAocmVzdWx0LnZhbHVlKSBjaHVua3MucHVzaChyZXN1bHQudmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgY2h1bmtzLCB0aW1lZE91dCB9O1xufVxuXG4vKipcbiAqIFBhcnNlIGFuZCB2YWxpZGF0ZSBhIGhlYWx0aCBjaGVjayByZXNwb25zZSBmcm9tIHN0cmVhbSBjaHVua3MuXG4gKiBSZXR1cm5zIHRoZSBwYXJzZWQgcmVzcG9uc2Ugb3IgbnVsbCBpZiBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWx0aENoZWNrUmVzcG9uc2UoXG4gIGNodW5rczogVWludDhBcnJheVtdXG4pOiB7IGhlYWx0aHk6IGJvb2xlYW4gfSB8IG51bGwge1xuICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdG90YWxMZW5ndGggPSBjaHVua3MucmVkdWNlKChzdW0sIGNodW5rKSA9PiBzdW0gKyBjaHVuay5sZW5ndGgsIDApO1xuICBjb25zdCBjb21iaW5lZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgY29tYmluZWQuc2V0KGNodW5rLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VUZXh0ID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGNvbWJpbmVkKTtcblxuICBsZXQgcmVzcG9uc2U6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE9sZCBkZXBsb3ltZW50cyAoc3BlY1ZlcnNpb24gPCAzKSByZXR1cm4gcGxhaW4gdGV4dCBsaWtlXG4gICAgLy8gJ1dvcmtmbG93IFNESyBcIi4uLlwiIGVuZHBvaW50IGlzIGhlYWx0aHknLiBUcmVhdCBhbnkgbm9uLWVtcHR5XG4gICAgLy8gdGV4dCByZXNwb25zZSBhcyBhIGhlYWx0aHkgZGVwbG95bWVudCB3aXRoIHVua25vd24gc3BlY1ZlcnNpb24uXG4gICAgaWYgKHJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyBoZWFsdGh5OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiByZXNwb25zZSAhPT0gJ29iamVjdCcgfHxcbiAgICByZXNwb25zZSA9PT0gbnVsbCB8fFxuICAgICEoJ2hlYWx0aHknIGluIHJlc3BvbnNlKSB8fFxuICAgIHR5cGVvZiAocmVzcG9uc2UgYXMgeyBoZWFsdGh5OiB1bmtub3duIH0pLmhlYWx0aHkgIT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHIgPSByZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcGFyc2VkOiB7IGhlYWx0aHk6IGJvb2xlYW47IHNwZWNWZXJzaW9uPzogbnVtYmVyIH0gPSB7XG4gICAgaGVhbHRoeTogci5oZWFsdGh5IGFzIGJvb2xlYW4sXG4gIH07XG4gIGlmICh0eXBlb2Ygci5zcGVjVmVyc2lvbiA9PT0gJ251bWJlcicpIHtcbiAgICBwYXJzZWQuc3BlY1ZlcnNpb24gPSByLnNwZWNWZXJzaW9uO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoZWFsdGhDaGVjayhcbiAgd29ybGQ6IFdvcmxkLFxuICBlbmRwb2ludDogSGVhbHRoQ2hlY2tFbmRwb2ludCxcbiAgb3B0aW9ucz86IEhlYWx0aENoZWNrT3B0aW9uc1xuKTogUHJvbWlzZTxIZWFsdGhDaGVja1Jlc3VsdD4ge1xuICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucz8udGltZW91dCA/PyBERUZBVUxUX0hFQUxUSF9DSEVDS19USU1FT1VUO1xuICBjb25zdCBjb3JyZWxhdGlvbklkID0gZ2VuZXJhdGVJZCgpO1xuICBjb25zdCBzdHJlYW1OYW1lID0gZ2V0SGVhbHRoQ2hlY2tTdHJlYW1OYW1lKGNvcnJlbGF0aW9uSWQpO1xuXG4gIGNvbnN0IHF1ZXVlTmFtZTogVmFsaWRRdWV1ZU5hbWUgPVxuICAgIGVuZHBvaW50ID09PSAnd29ya2Zsb3cnXG4gICAgICA/ICdfX3drZl93b3JrZmxvd19oZWFsdGhfY2hlY2snXG4gICAgICA6ICdfX3drZl9zdGVwX2hlYWx0aF9jaGVjayc7XG5cbiAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdvcmxkLnF1ZXVlKFxuICAgICAgcXVldWVOYW1lLFxuICAgICAgeyBfX2hlYWx0aENoZWNrOiB0cnVlLCBjb3JyZWxhdGlvbklkIH0sXG4gICAgICB7XG4gICAgICAgIC8vIFVzZSBKU09OIHRyYW5zcG9ydCBzbyB0aGUgaGVhbHRoIGNoZWNrIHdvcmtzIGFnYWluc3QgYm90aFxuICAgICAgICAvLyBvbGQgKEpTT04tb25seSkgYW5kIG5ldyAoZHVhbCkgZGVwbG95bWVudHMuXG4gICAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fTEVHQUNZLFxuICAgICAgICBkZXBsb3ltZW50SWQ6IG9wdGlvbnM/LmRlcGxveW1lbnRJZCxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCB0aW1lb3V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCB3b3JsZC5zdHJlYW1zLmdldChcbiAgICAgICAgICBnZW5lcmF0ZUhlYWx0aENoZWNrUnVuSWQoY29ycmVsYXRpb25JZCksXG4gICAgICAgICAgc3RyZWFtTmFtZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgIGNvbnN0IHsgY2h1bmtzLCB0aW1lZE91dCB9ID0gYXdhaXQgcmVhZFN0cmVhbVdpdGhUaW1lb3V0KFxuICAgICAgICAgIHJlYWRlcixcbiAgICAgICAgICBIRUFMVEhfQ0hFQ0tfUkVBRF9USU1FT1VUXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRpbWVkT3V0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBjYW5jZWwgZXJyb3JzXG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBIRUFMVEhfQ0hFQ0tfUE9MTF9JTlRFUlZBTClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBwYXJzZUhlYWx0aENoZWNrUmVzcG9uc2UoY2h1bmtzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgICAgICAgbGF0ZW5jeU1zOiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEhFQUxUSF9DSEVDS19QT0xMX0lOVEVSVkFMKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgSEVBTFRIX0NIRUNLX1BPTExfSU5URVJWQUwpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBoZWFsdGh5OiBmYWxzZSxcbiAgICAgIGVycm9yOiBgSGVhbHRoIGNoZWNrIHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9bXNgLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWx0aHk6IGZhbHNlLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50UGFnaW5hdGlvbkNvbnRyYWN0RXJyb3IoXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZ1xuKTogV29ya2Zsb3dXb3JsZEVycm9yIHtcbiAgcmV0dXJuIG5ldyBXb3JrZmxvd1dvcmxkRXJyb3IoXG4gICAgYEV2ZW50IHBhZ2luYXRpb24gJHttZXNzYWdlfSBmb3Igd29ya2Zsb3cgcnVuIFwiJHtydW5JZH1cIi5gLFxuICAgIHsgY29kZTogUlVOX0VSUk9SX0NPREVTLldPUkxEX0NPTlRSQUNUX0VSUk9SIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjb3JkUmVxdWVzdGVkRXZlbnRDdXJzb3IoXG4gIHJ1bklkOiBzdHJpbmcsXG4gIGN1cnNvcjogc3RyaW5nIHwgbnVsbCxcbiAgcmVxdWVzdGVkQ3Vyc29yczogU2V0PHN0cmluZz5cbik6IHZvaWQge1xuICBpZiAoIWN1cnNvcikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocmVxdWVzdGVkQ3Vyc29ycy5oYXMoY3Vyc29yKSkge1xuICAgIHRocm93IGV2ZW50UGFnaW5hdGlvbkNvbnRyYWN0RXJyb3IocnVuSWQsICdkaWQgbm90IGFkdmFuY2UnKTtcbiAgfVxuICByZXF1ZXN0ZWRDdXJzb3JzLmFkZChjdXJzb3IpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRVbmlxdWVFdmVudHMoXG4gIHRhcmdldDogRXZlbnRbXSxcbiAgdGFyZ2V0SWRzOiBTZXQ8c3RyaW5nPixcbiAgZXZlbnRzOiBFdmVudFtdXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICBpZiAoIXRhcmdldElkcy5oYXMoZXZlbnQuZXZlbnRJZCkpIHtcbiAgICAgIHRhcmdldElkcy5hZGQoZXZlbnQuZXZlbnRJZCk7XG4gICAgICB0YXJnZXQucHVzaChldmVudCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydEV2ZW50UGFnaW5hdGlvblByb2dyZXNzKFxuICBydW5JZDogc3RyaW5nLFxuICBoYXNNb3JlOiBib29sZWFuLFxuICBjdXJzb3I6IHN0cmluZyB8IG51bGwsXG4gIHJlcXVlc3RlZEN1cnNvcnM6IFNldDxzdHJpbmc+XG4pOiB2b2lkIHtcbiAgaWYgKCFoYXNNb3JlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjdXJzb3IgPT09IG51bGwpIHtcbiAgICB0aHJvdyBldmVudFBhZ2luYXRpb25Db250cmFjdEVycm9yKFxuICAgICAgcnVuSWQsXG4gICAgICAncmV0dXJuZWQgbW9yZSBwYWdlcyB3aXRob3V0IGEgY3Vyc29yJ1xuICAgICk7XG4gIH1cbiAgaWYgKHJlcXVlc3RlZEN1cnNvcnMuaGFzKGN1cnNvcikpIHtcbiAgICB0aHJvdyBldmVudFBhZ2luYXRpb25Db250cmFjdEVycm9yKHJ1bklkLCAncmVwZWF0ZWQgYSBjdXJzb3InKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRSZXRyeVdpdGhvdXRFdmVudEN1cnNvcihcbiAgZXJyb3I6IHVua25vd24sXG4gIGN1cnNvcjogc3RyaW5nIHwgbnVsbCxcbiAgYWxyZWFkeVJldHJpZWQ6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGN1cnNvciAhPT0gbnVsbCAmJlxuICAgICFhbHJlYWR5UmV0cmllZCAmJlxuICAgIFdvcmtmbG93V29ybGRFcnJvci5pcyhlcnJvcikgJiZcbiAgICBlcnJvci5zdGF0dXMgPT09IDQwMFxuICApO1xufVxuXG4vKipcbiAqIExvYWRzIHdvcmtmbG93IHJ1biBldmVudHMgYnkgaXRlcmF0aW5nIHRocm91Z2ggYWxsIHBhZ2VzIG9mIHBhZ2luYXRlZFxuICogcmVzdWx0cy4gRXZlbnRzIGFyZSByZXR1cm5lZCBpbiBjaHJvbm9sb2dpY2FsIChhc2NlbmRpbmcpIG9yZGVyIGZvclxuICogZGV0ZXJtaW5pc3RpYyB3b3JrZmxvdyByZXBsYXkuXG4gKlxuICogQHBhcmFtIHJ1bklkIC0gVGhlIHdvcmtmbG93IHJ1biBJRC5cbiAqIEBwYXJhbSBhZnRlckN1cnNvciAtIElmIHByb3ZpZGVkLCBvbmx5IGV2ZW50cyBhZnRlciB0aGlzIGN1cnNvciBhcmVcbiAqICAgcmV0dXJuZWQgKGluY3JlbWVudGFsIGxvYWQpLiBJZiBvbWl0dGVkLCBhbGwgZXZlbnRzIGFyZSByZXR1cm5lZC5cbiAqICAgVGhlIHJldHVybmVkIGN1cnNvciBjYW4gYmUgcGFzc2VkIGJhY2sgaW4gb24gYSBzdWJzZXF1ZW50IGNhbGwgZm9yXG4gKiAgIGluY3JlbWVudGFsIGxvYWRpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV29ya2Zsb3dSdW5FdmVudHMoXG4gIHJ1bklkOiBzdHJpbmcsXG4gIGFmdGVyQ3Vyc29yPzogc3RyaW5nXG4pOiBQcm9taXNlPHsgZXZlbnRzOiBFdmVudFtdOyBjdXJzb3I6IHN0cmluZyB8IG51bGwgfT4ge1xuICBjb25zdCBpbmNyZW1lbnRhbCA9IGFmdGVyQ3Vyc29yICE9PSB1bmRlZmluZWQ7XG4gIHJldHVybiB0cmFjZShcbiAgICBpbmNyZW1lbnRhbCA/ICd3b3JrZmxvdy5sb2FkTmV3RXZlbnRzJyA6ICd3b3JrZmxvdy5sb2FkRXZlbnRzJyxcbiAgICBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd1J1bklkKHJ1bklkKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsb2FkZWRFdmVudHM6IEV2ZW50W10gPSBbXTtcbiAgICAgIGNvbnN0IGxvYWRlZEV2ZW50SWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBjb25zdCByZXF1ZXN0ZWRDdXJzb3JzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBsZXQgY3Vyc29yOiBzdHJpbmcgfCBudWxsID0gYWZ0ZXJDdXJzb3IgPz8gbnVsbDtcbiAgICAgIGxldCBoYXNNb3JlID0gdHJ1ZTtcbiAgICAgIGxldCBwYWdlc0xvYWRlZCA9IDA7XG4gICAgICBsZXQgcmV0cmllZFdpdGhvdXRDdXJzb3IgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZExhenkoKTtcbiAgICAgIGNvbnN0IGxvYWRTdGFydCA9IERhdGUubm93KCk7XG4gICAgICB3aGlsZSAoaGFzTW9yZSkge1xuICAgICAgICAvLyBUT0RPOiB3ZSdyZSBjdXJyZW50bHkgbG9hZGluZyBhbGwgdGhlIGRhdGEgd2l0aCByZXNvbHZlUmVmIGJlaGF2aW91ci4gV2UgbmVlZCB0byB1cGRhdGUgdGhpc1xuICAgICAgICAvLyB0byBsYXp5bG9hZCB0aGUgZGF0YSBmcm9tIHRoZSB3b3JsZCBpbnN0ZWFkIHNvIHRoYXQgd2UgY2FuIG9wdGltaXplIGFuZCBtYWtlIHRoZSBldmVudCBsb2cgbG9hZGluZ1xuICAgICAgICAvLyBtdWNoIGZhc3RlciBhbmQgbWVtb3J5IGVmZmljaWVudFxuICAgICAgICBjb25zdCBwYWdlU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ZWRDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgIHJlY29yZFJlcXVlc3RlZEV2ZW50Q3Vyc29yKHJ1bklkLCByZXF1ZXN0ZWRDdXJzb3IsIHJlcXVlc3RlZEN1cnNvcnMpO1xuXG4gICAgICAgIGxldCByZXNwb25zZTogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiB3b3JsZC5ldmVudHMubGlzdD4+O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIHNvcnRPcmRlcjogJ2FzYycsXG4gICAgICAgICAgICAgIGN1cnNvcjogcmVxdWVzdGVkQ3Vyc29yID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2hvdWxkUmV0cnlXaXRob3V0RXZlbnRDdXJzb3IoXG4gICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICByZXF1ZXN0ZWRDdXJzb3IsXG4gICAgICAgICAgICAgIHJldHJpZWRXaXRob3V0Q3Vyc29yXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICAgICAgICAgICdFdmVudCBjdXJzb3Igd2FzIHJlamVjdGVkOyByZXRyeWluZyB3aXRoIGEgZnVsbCBldmVudCByZWxvYWQuJyxcbiAgICAgICAgICAgICAgeyB3b3JrZmxvd1J1bklkOiBydW5JZCB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9hZGVkRXZlbnRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBsb2FkZWRFdmVudElkcy5jbGVhcigpO1xuICAgICAgICAgICAgcmVxdWVzdGVkQ3Vyc29ycy5jbGVhcigpO1xuICAgICAgICAgICAgY3Vyc29yID0gbnVsbDtcbiAgICAgICAgICAgIHJldHJpZWRXaXRob3V0Q3Vyc29yID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGVuZFVuaXF1ZUV2ZW50cyhsb2FkZWRFdmVudHMsIGxvYWRlZEV2ZW50SWRzLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgaGFzTW9yZSA9IHJlc3BvbnNlLmhhc01vcmU7XG4gICAgICAgIGFzc2VydEV2ZW50UGFnaW5hdGlvblByb2dyZXNzKFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIGhhc01vcmUsXG4gICAgICAgICAgcmVzcG9uc2UuY3Vyc29yLFxuICAgICAgICAgIHJlcXVlc3RlZEN1cnNvcnNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIGxhc3Qgbm9uLW51bGwgY3Vyc29yIGFjcm9zcyBwYWdlcy4gQSBXb3JsZCBtYXlcbiAgICAgICAgLy8gbGVnaXRpbWF0ZWx5IHJldHVybiBgeyBkYXRhOiBbXSwgY3Vyc29yOiBudWxsLCBoYXNNb3JlOiBmYWxzZSB9YFxuICAgICAgICAvLyBvbiBhIHRyYWlsaW5nIGVtcHR5IHBhZ2Ug4oCUIGZvciBleGFtcGxlIHdoZW4gdGhlIHByZXZpb3VzIHBhZ2Unc1xuICAgICAgICAvLyB1bmRlcmx5aW5nIERCIHF1ZXJ5IGhpdCB0aGUgbGltaXQgZXhhY3RseSBhbmQgcmV0dXJuZWQgYVxuICAgICAgICAvLyBgTGFzdEV2YWx1YXRlZEtleWAgXCJqdXN0IGluIGNhc2VcIi4gT3ZlcndyaXRpbmcgd2l0aCB0aGF0IG51bGxcbiAgICAgICAgLy8gd291bGQgbG9zZSB0aGUgcG9zaXRpb24gcGFzdCB0aGUgbGFzdCByZWFsIGV2ZW50IHdlIGxvYWRlZCBhbmRcbiAgICAgICAgLy8gZm9yY2UgdGhlIHJ1bnRpbWUgaW50byB0aGUgXCJubyBjdXJzb3IgYWZ0ZXIgaW5pdGlhbCBsb2FkXCIgZnVsbC1cbiAgICAgICAgLy8gcmVsb2FkIGZhbGxiYWNrIG9uIGV2ZXJ5IHN1YnNlcXVlbnQgcmVwbGF5IGl0ZXJhdGlvbi5cbiAgICAgICAgY3Vyc29yID0gcmVzcG9uc2UuY3Vyc29yID8/IGN1cnNvcjtcbiAgICAgICAgcGFnZXNMb2FkZWQrKztcblxuICAgICAgICBydW50aW1lTG9nZ2VyLmRlYnVnKCdMb2FkZWQgZXZlbnQgcGFnZScsIHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiBydW5JZCxcbiAgICAgICAgICBpbmNyZW1lbnRhbCxcbiAgICAgICAgICBwYWdlOiBwYWdlc0xvYWRlZCxcbiAgICAgICAgICBwYWdlRXZlbnRzOiByZXNwb25zZS5kYXRhLmxlbmd0aCxcbiAgICAgICAgICB0b3RhbEV2ZW50czogbG9hZGVkRXZlbnRzLmxlbmd0aCxcbiAgICAgICAgICBoYXNNb3JlLFxuICAgICAgICAgIHBhZ2VNczogRGF0ZS5ub3coKSAtIHBhZ2VTdGFydCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ1bnRpbWVMb2dnZXIuZGVidWcoJ0V2ZW50IGxvYWQgY29tcGxldGUnLCB7XG4gICAgICAgIHdvcmtmbG93UnVuSWQ6IHJ1bklkLFxuICAgICAgICBpbmNyZW1lbnRhbCxcbiAgICAgICAgdG90YWxFdmVudHM6IGxvYWRlZEV2ZW50cy5sZW5ndGgsXG4gICAgICAgIHBhZ2VzTG9hZGVkLFxuICAgICAgICB0b3RhbE1zOiBEYXRlLm5vdygpIC0gbG9hZFN0YXJ0LFxuICAgICAgfSk7XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dFdmVudHNDb3VudChsb2FkZWRFdmVudHMubGVuZ3RoKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93RXZlbnRzUGFnZXNMb2FkZWQocGFnZXNMb2FkZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IGV2ZW50czogbG9hZGVkRXZlbnRzLCBjdXJzb3IgfTtcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogQ09SUyBoZWFkZXJzIGZvciBoZWFsdGggY2hlY2sgcmVzcG9uc2VzLlxuICogQWxsb3dzIHRoZSBvYnNlcnZhYmlsaXR5IFVJIHRvIGNoZWNrIGVuZHBvaW50IGhlYWx0aCBmcm9tIGEgZGlmZmVyZW50IG9yaWdpbi5cbiAqL1xuY29uc3QgSEVBTFRIX0NIRUNLX0NPUlNfSEVBREVSUyA9IHtcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiAnUE9TVCwgT1BUSU9OUywgR0VULCBIRUFEJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiAnQ29udGVudC1UeXBlJyxcbn07XG5cbi8qKlxuICogV3JhcHMgYSByZXF1ZXN0L3Jlc3BvbnNlIGhhbmRsZXIgYW5kIGFkZHMgYSBoZWFsdGggY2hlY2sgXCJtb2RlXCJcbiAqIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBhIGBfX2hlYWx0aGAgcXVlcnkgcGFyYW1ldGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEhlYWx0aENoZWNrKFxuICBoYW5kbGVyOiAocmVxOiBSZXF1ZXN0KSA9PiBQcm9taXNlPFJlc3BvbnNlPixcbiAgd29ybGRTcGVjVmVyc2lvbj86IG51bWJlclxuKTogKHJlcTogUmVxdWVzdCkgPT4gUHJvbWlzZTxSZXNwb25zZT4ge1xuICByZXR1cm4gYXN5bmMgKHJlcTogUmVxdWVzdCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3QgaXNIZWFsdGhDaGVjayA9IHVybC5zZWFyY2hQYXJhbXMuaGFzKCdfX2hlYWx0aCcpO1xuICAgIGlmIChpc0hlYWx0aENoZWNrKSB7XG4gICAgICAvLyBIYW5kbGUgQ09SUyBwcmVmbGlnaHQgZm9yIGhlYWx0aCBjaGVja1xuICAgICAgaWYgKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgICBzdGF0dXM6IDIwNCxcbiAgICAgICAgICBoZWFkZXJzOiBIRUFMVEhfQ0hFQ0tfQ09SU19IRUFERVJTLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBoZWFsdGh5OiB0cnVlLFxuICAgICAgICAgIGVuZHBvaW50OiB1cmwucGF0aG5hbWUsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IHdvcmxkU3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAgICAgd29ya2Zsb3dDb3JlVmVyc2lvbixcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgLi4uSEVBTFRIX0NIRUNLX0NPUlNfSEVBREVSUyxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaGFuZGxlcihyZXEpO1xuICB9O1xufVxuXG4vKipcbiAqIFF1ZXVlcyBhIG1lc3NhZ2UgdG8gdGhlIHNwZWNpZmllZCBxdWV1ZSB3aXRoIHRyYWNpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBxdWV1ZU1lc3NhZ2UoXG4gIHdvcmxkOiBXb3JsZCxcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2Ygd29ybGQucXVldWU+XG4pIHtcbiAgY29uc3QgcXVldWVOYW1lID0gYXJnc1swXTtcbiAgYXdhaXQgdHJhY2UoXG4gICAgJ3F1ZXVlLnB1Ymxpc2gnLFxuICAgIHtcbiAgICAgIC8vIFN0YW5kYXJkIE9URUwgbWVzc2FnaW5nIGNvbnZlbnRpb25zXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5NZXNzYWdpbmdTeXN0ZW0oJ3ZlcmNlbC1xdWV1ZScpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuTWVzc2FnaW5nRGVzdGluYXRpb25OYW1lKHF1ZXVlTmFtZSksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5NZXNzYWdpbmdPcGVyYXRpb25UeXBlKCdwdWJsaXNoJyksXG4gICAgICAgIC8vIFBlZXIgc2VydmljZSBmb3IgRGF0YWRvZyBzZXJ2aWNlIG1hcHNcbiAgICAgICAgLi4uQXR0cmlidXRlLlBlZXJTZXJ2aWNlKCd2ZXJjZWwtcXVldWUnKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlJwY1N5c3RlbSgndmVyY2VsLXF1ZXVlJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5ScGNTZXJ2aWNlKCd2cXMnKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLlJwY01ldGhvZCgncHVibGlzaCcpLFxuICAgICAgfSxcbiAgICAgIGtpbmQ6IGF3YWl0IGdldFNwYW5LaW5kKCdQUk9EVUNFUicpLFxuICAgIH0sXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZUlkIH0gPSBhd2FpdCB3b3JsZC5xdWV1ZSguLi5hcmdzKTtcbiAgICAgIGlmIChtZXNzYWdlSWQpIHtcbiAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyhBdHRyaWJ1dGUuTWVzc2FnaW5nTWVzc2FnZUlkKG1lc3NhZ2VJZCkpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBxdWV1ZSBvdmVyaGVhZCB0aW1lIGluIG1pbGxpc2Vjb25kcyBmb3IgYSBnaXZlbiBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVldWVPdmVyaGVhZChtZXNzYWdlOiB7IHJlcXVlc3RlZEF0PzogRGF0ZSB9KSB7XG4gIGlmICghbWVzc2FnZS5yZXF1ZXN0ZWRBdCkgcmV0dXJuO1xuICB0cnkge1xuICAgIHJldHVybiBBdHRyaWJ1dGUuUXVldWVPdmVyaGVhZE1zKFxuICAgICAgRGF0ZS5ub3coKSAtIG1lc3NhZ2UucmVxdWVzdGVkQXQuZ2V0VGltZSgpXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG1lbW9pemVkIGFjY2Vzc29yIGZvciB0aGUgcGVyLXJ1biBBRVMtMjU2IGVuY3J5cHRpb24ga2V5LlxuICpcbiAqIFRoZSBmaXJzdCBjYWxsIHJlc29sdmVzIHRoZSBrZXkgdmlhIGB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuYCAod2hpY2hcbiAqIG1heSBkbyBIS0RGIGRlcml2YXRpb24gbG9jYWxseSBvbiBWZXJjZWwsIG9yIGEgbmV0d29yayBmZXRjaCBmcm9tXG4gKiBleHRlcm5hbCBjb250ZXh0cykgYW5kIGltcG9ydHMgaXQgYXMgYSBgQ3J5cHRvS2V5YDsgc3Vic2VxdWVudCBjYWxsc1xuICogYXdhaXQgdGhlIHNhbWUgY2FjaGVkIHByb21pc2UuIElmIHRoZSB3b3JsZCBkb2Vzbid0IHN1cHBvcnQgZW5jcnlwdGlvblxuICogb3IgdGhlIHJ1biBoYXMgbm8ga2V5IGNvbmZpZ3VyZWQsIHRoZSBjYWNoZWQgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXG4gKlxuICogVXNlZCBieSBzdGVwIC8gd29ya2Zsb3cgaGFuZGxlcnMgdG8gZGVmZXIgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpXG4gKiBrZXkgZmV0Y2ggdW50aWwgdGhlIGZpcnN0IGNvZGUgcGF0aCB0aGF0IGFjdHVhbGx5IG5lZWRzIGl0IOKAlCB0eXBpY2FsbHlcbiAqIGlucHV0IGh5ZHJhdGlvbiBvbiB0aGUgc3VjY2VzcyBwYXRoLCBvciBlcnJvciBkZWh5ZHJhdGlvbiBvbiBhIGZhaWx1cmVcbiAqIHBhdGguIEJvdGggcGF0aHMgY2FuIHJhY2UtY2FsbCB0aGUgYWNjZXNzb3Igd2l0aG91dCB0cmlnZ2VyaW5nIGR1cGxpY2F0ZVxuICogZmV0Y2hlcy5cbiAqXG4gKiBFcnJvcnMgdGhyb3duIGJ5IGBnZXRFbmNyeXB0aW9uS2V5Rm9yUnVuYCBwcm9wYWdhdGUgdG8gZXZlcnkgY2FsbGVyXG4gKiAodGhlIGNhY2hlZCBwcm9taXNlIHJlamVjdHMpLiBUaGlzIGlzIGludGVudGlvbmFsOiB3aGVuIGVuY3J5cHRpb24gaXNcbiAqIGNvbmZpZ3VyZWQsIHdlIG5ldmVyIHdhbnQgdG8gc2lsZW50bHkgZmFsbCBiYWNrIHRvIHBsYWludGV4dFxuICogc2VyaWFsaXphdGlvbi4gQSBwcm9wYWdhdGVkIGVycm9yIGluIGFuIGV2ZW50LWVtaXNzaW9uIHBhdGggbGVhdmVzIHRoZVxuICogb3V0ZXIgdHJ5L2NhdGNoIHRvIGxvZyBhbmQgc3VyZmFjZSB0aGUgaXNzdWU7IHRoZSBxdWV1ZSdzIHJlZGVsaXZlcnlcbiAqIHNlbWFudGljcyB3aWxsIHJldHJ5IHRoZSBrZXkgZmV0Y2ggb24gdGhlIG5leHQgYXR0ZW1wdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW9pemVFbmNyeXB0aW9uS2V5KFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bk9ySWQ6IFdvcmtmbG93UnVuIHwgc3RyaW5nXG4pOiAoKSA9PiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4ge1xuICBsZXQgY2FjaGVkOiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgIGNhY2hlZCA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFRoZSBgZ2V0RW5jcnlwdGlvbktleUZvclJ1bmAgb3ZlcmxvYWQgc2V0IHRha2VzIGVpdGhlciBhXG4gICAgICAgIC8vIGBXb3JrZmxvd1J1bmAgb3IgYSBgcnVuSWQ6IHN0cmluZ2AgKHdpdGggb3B0aW9uYWwgY29udGV4dCkuIEJyYW5jaFxuICAgICAgICAvLyBoZXJlIHNvIFR5cGVTY3JpcHQgcGlja3MgdGhlIHJpZ2h0IG92ZXJsb2FkIGZvciBlYWNoIHNoYXBlLlxuICAgICAgICBjb25zdCByYXdLZXkgPVxuICAgICAgICAgIHR5cGVvZiBydW5PcklkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuT3JJZClcbiAgICAgICAgICAgIDogYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bk9ySWQpO1xuICAgICAgICByZXR1cm4gcmF3S2V5ID8gYXdhaXQgaW1wb3J0S2V5KHJhd0tleSkgOiB1bmRlZmluZWQ7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkO1xuICB9O1xufVxuIl19
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUXZFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixHQUNwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4QyxPQUFPLEVBQWtCLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLElBQUksbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELHdEQUF3RDtBQUN4RCxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztBQUU1Qzs7OztHQUlHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxzQkFBc0IsQ0FBQztBQUUxRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFlBQW9CO0lBQ3ZELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLElBQUksS0FBSyxDQUNiLDBCQUEwQixZQUFZLHdHQUF3RyxDQUMvSSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sa0JBQWtCLFlBQVksRUFBb0IsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FB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TyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUlVOX0VSUk9SX0NPREVTLCBXb3JrZmxvd1dvcmxkRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHtcbiAgRXZlbnQsXG4gIEhlYWx0aENoZWNrUGF5bG9hZCxcbiAgVmFsaWRRdWV1ZU5hbWUsXG4gIFdvcmtmbG93UnVuLFxuICBXb3JsZCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIEhlYWx0aENoZWNrUGF5bG9hZFNjaGVtYSxcbiAgU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gIFNQRUNfVkVSU0lPTl9MRUdBQ1ksXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBtb25vdG9uaWNGYWN0b3J5IH0gZnJvbSAndWxpZCc7XG5cbmltcG9ydCB7IHR5cGUgQ3J5cHRvS2V5LCBpbXBvcnRLZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4uL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG5pbXBvcnQgeyBnZXRTcGFuS2luZCwgdHJhY2UgfSBmcm9tICcuLi90ZWxlbWV0cnkuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiBhcyB3b3JrZmxvd0NvcmVWZXJzaW9uIH0gZnJvbSAnLi4vdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBnZXRXb3JsZExhenkgfSBmcm9tICcuL2dldC13b3JsZC1sYXp5LmpzJztcblxuLyoqIERlZmF1bHQgdGltZW91dCBmb3IgaGVhbHRoIGNoZWNrcyBpbiBtaWxsaXNlY29uZHMgKi9cbmNvbnN0IERFRkFVTFRfSEVBTFRIX0NIRUNLX1RJTUVPVVQgPSAzMF8wMDA7XG5cbi8qKlxuICogUGF0dGVybiBmb3Igc2FmZSB3b3JrZmxvdyBuYW1lcy4gT25seSBhbGxvd3MgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsXG4gKiB1bmRlcnNjb3JlcywgaHlwaGVucywgZG90cywgZm9yd2FyZCBzbGFzaGVzIChmb3IgbmFtZXNwYWNlZCB3b3JrZmxvd3MpLFxuICogYW5kIGF0IHNpZ25zIChmb3Igc2NvcGVkIHBhY2thZ2VzKS5cbiAqL1xuY29uc3QgU0FGRV9XT1JLRkxPV19OQU1FX1BBVFRFUk4gPSAvXlthLXpBLVowLTlfXFwtLi9AXSskLztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSB3b3JrZmxvdyBuYW1lIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlIG5hbWUuXG4gKiBFbnN1cmVzIHRoZSB3b3JrZmxvdyBuYW1lIG9ubHkgY29udGFpbnMgc2FmZSBjaGFyYWN0ZXJzIGJlZm9yZVxuICogaW50ZXJwb2xhdGluZyBpdCBpbnRvIHRoZSBxdWV1ZSBuYW1lIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtmbG93UXVldWVOYW1lKHdvcmtmbG93TmFtZTogc3RyaW5nKTogVmFsaWRRdWV1ZU5hbWUge1xuICBpZiAoIVNBRkVfV09SS0ZMT1dfTkFNRV9QQVRURVJOLnRlc3Qod29ya2Zsb3dOYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIHdvcmtmbG93IG5hbWUgXCIke3dvcmtmbG93TmFtZX1cIjogbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBoeXBoZW5zLCBkb3RzLCBmb3J3YXJkIHNsYXNoZXMsIG9yIGF0IHNpZ25zYFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGBfX3drZl93b3JrZmxvd18ke3dvcmtmbG93TmFtZX1gIGFzIFZhbGlkUXVldWVOYW1lO1xufVxuXG5jb25zdCBnZW5lcmF0ZUlkID0gbW9ub3RvbmljRmFjdG9yeSgpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmVhbSBuYW1lIGZvciBhIGhlYWx0aCBjaGVjayB3aXRoIHRoZSBnaXZlbiBjb3JyZWxhdGlvbiBJRC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGVhbHRoQ2hlY2tTdHJlYW1OYW1lKGNvcnJlbGF0aW9uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgX19oZWFsdGhfY2hlY2tfXyR7Y29ycmVsYXRpb25JZH1gO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIGhlYWx0aCBjaGVjayBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2tSZXN1bHQge1xuICBoZWFsdGh5OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSBpZiBoZWFsdGggY2hlY2sgZmFpbGVkICovXG4gIGVycm9yPzogc3RyaW5nO1xuICAvKiogTGF0ZW5jeSBpZiB0aGUgaGVhbHRoIGNoZWNrIHdhcyBzdWNjZXNzZnVsICovXG4gIGxhdGVuY3lNcz86IG51bWJlcjtcbiAgLyoqIFNwZWMgdmVyc2lvbiBvZiB0aGUgcmVzcG9uZGluZyBkZXBsb3ltZW50ICovXG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uIG9mIHRoZSByZXNwb25kaW5nIGRlcGxveW1lbnQsIHVzZWQgZm9yXG4gICAqIGNhcGFiaWxpdHkgZGV0ZWN0aW9uIChzZWUgYGdldFJ1bkNhcGFiaWxpdGllc2ApLiBPbWl0dGVkIHdoZW4gdGhlXG4gICAqIHJlc3BvbmRpbmcgZGVwbG95bWVudCBkaWQgbm90IHByb3ZpZGUgdGhlIGZpZWxkIGFzIGEgc3RyaW5nIOKAlFxuICAgKiBmb3IgZXhhbXBsZSwgYW4gb2xkZXIgYEB3b3JrZmxvdy9jb3JlYCB0aGF0IHByZWRhdGVzIHRoaXMgZmllbGQsXG4gICAqIG9yIGEgbm9uLUpTT04gcGxhaW4tdGV4dCBoZWFsdGggcmVzcG9uc2UuXG4gICAqL1xuICB3b3JrZmxvd0NvcmVWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbWVzc2FnZSBpcyBhIGhlYWx0aCBjaGVjayBwYXlsb2FkLlxuICogSWYgc28sIHJldHVybnMgdGhlIHBhcnNlZCBwYXlsb2FkLiBPdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhlYWx0aENoZWNrUGF5bG9hZChcbiAgbWVzc2FnZTogdW5rbm93blxuKTogSGVhbHRoQ2hlY2tQYXlsb2FkIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzdWx0ID0gSGVhbHRoQ2hlY2tQYXlsb2FkU2NoZW1hLnNhZmVQYXJzZShtZXNzYWdlKTtcbiAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpYyBmYWtlIHJ1bklkIGZvciBoZWFsdGggY2hlY2sgc3RyZWFtcy5cbiAqIEJvdGggdGhlIHdyaXRlciAoaGFuZGxlSGVhbHRoQ2hlY2tNZXNzYWdlKSBhbmQgcmVhZGVyIChoZWFsdGhDaGVjaykgZGVyaXZlXG4gKiB0aGUgc2FtZSBydW5JZCBmcm9tIHRoZSBjb3JyZWxhdGlvbklkIHNvIHRoYXQgaW1wbGVtZW50YXRpb25zIHRoYXQgc2NvcGVcbiAqIHN0cmVhbSByZWFkcyBieSBydW5JZCBzdGlsbCB3b3JrIGNvcnJlY3RseS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVIZWFsdGhDaGVja1J1bklkKGNvcnJlbGF0aW9uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgd3J1bl9oY18ke2NvcnJlbGF0aW9uSWR9YDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGEgaGVhbHRoIGNoZWNrIG1lc3NhZ2UgYnkgd3JpdGluZyB0aGUgcmVzdWx0IHRvIHRoZSB3b3JsZCdzIHN0cmVhbS5cbiAqIFRoZSBjYWxsZXIgY2FuIGxpc3RlbiB0byB0aGlzIHN0cmVhbSB0byBnZXQgdGhlIGhlYWx0aCBjaGVjayByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gaGVhbHRoQ2hlY2sgLSBUaGUgcGFyc2VkIGhlYWx0aCBjaGVjayBwYXlsb2FkXG4gKiBAcGFyYW0gZW5kcG9pbnQgLSBXaGljaCBlbmRwb2ludCBpcyByZXNwb25kaW5nICgnd29ya2Zsb3cnIG9yICdzdGVwJylcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUhlYWx0aENoZWNrTWVzc2FnZShcbiAgaGVhbHRoQ2hlY2s6IEhlYWx0aENoZWNrUGF5bG9hZCxcbiAgZW5kcG9pbnQ6ICd3b3JrZmxvdycgfCAnc3RlcCcsXG4gIHdvcmxkU3BlY1ZlcnNpb24/OiBudW1iZXJcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkTGF6eSgpO1xuICBjb25zdCBzdHJlYW1OYW1lID0gZ2V0SGVhbHRoQ2hlY2tTdHJlYW1OYW1lKGhlYWx0aENoZWNrLmNvcnJlbGF0aW9uSWQpO1xuICBjb25zdCByZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBoZWFsdGh5OiB0cnVlLFxuICAgIGVuZHBvaW50LFxuICAgIGNvcnJlbGF0aW9uSWQ6IGhlYWx0aENoZWNrLmNvcnJlbGF0aW9uSWQsXG4gICAgc3BlY1ZlcnNpb246IHdvcmxkU3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgd29ya2Zsb3dDb3JlVmVyc2lvbixcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gIH0pO1xuICAvLyBVc2UgYSBkZXRlcm1pbmlzdGljIGZha2UgcnVuSWQgZGVyaXZlZCBmcm9tIHRoZSBjb3JyZWxhdGlvbklkIHNvIHRoYXRcbiAgLy8gdGhlIHJlYWRlciBzaWRlIHByb2R1Y2VzIHRoZSBzYW1lIHZhbHVlLlxuICBjb25zdCBmYWtlUnVuSWQgPSBnZW5lcmF0ZUhlYWx0aENoZWNrUnVuSWQoaGVhbHRoQ2hlY2suY29ycmVsYXRpb25JZCk7XG4gIGF3YWl0IHdvcmxkLnN0cmVhbXMud3JpdGUoZmFrZVJ1bklkLCBzdHJlYW1OYW1lLCByZXNwb25zZSk7XG4gIGF3YWl0IHdvcmxkLnN0cmVhbXMuY2xvc2UoZmFrZVJ1bklkLCBzdHJlYW1OYW1lKTtcbn1cblxuZXhwb3J0IHR5cGUgSGVhbHRoQ2hlY2tFbmRwb2ludCA9ICd3b3JrZmxvdycgfCAnc3RlcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2tPcHRpb25zIHtcbiAgLyoqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGhlYWx0aCBjaGVjayByZXNwb25zZS4gRGVmYXVsdDogMzAwMDAgKDMwcykgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIERlcGxveW1lbnQgSUQgdG8gc2VuZCB0aGUgaGVhbHRoIGNoZWNrIHRvLiBGYWxscyBiYWNrIHRvIHByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lELiAqL1xuICBkZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyZm9ybXMgYSBoZWFsdGggY2hlY2sgYnkgc2VuZGluZyBhIG1lc3NhZ2UgdGhyb3VnaCB0aGUgcXVldWUgcGlwZWxpbmVcbiAqIGFuZCB2ZXJpZnlpbmcgaXQgaXMgcHJvY2Vzc2VkIGJ5IHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBieXBhc3NlcyBEZXBsb3ltZW50IFByb3RlY3Rpb24gb24gVmVyY2VsIGJlY2F1c2UgaXQgZ29lc1xuICogdGhyb3VnaCB0aGUgcXVldWUgaW5mcmFzdHJ1Y3R1cmUgcmF0aGVyIHRoYW4gZGlyZWN0IEhUVFAuXG4gKlxuICogQHBhcmFtIHdvcmxkIC0gVGhlIFdvcmxkIGluc3RhbmNlIHRvIHVzZSBmb3IgdGhlIGhlYWx0aCBjaGVja1xuICogQHBhcmFtIGVuZHBvaW50IC0gV2hpY2ggZW5kcG9pbnQgdG8gaGVhbHRoIGNoZWNrOiAnd29ya2Zsb3cnIG9yICdzdGVwJ1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgaGVhbHRoIGNoZWNrXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBoZWFsdGggY2hlY2sgcmVzdWx0XG4gKi9cbi8vIFBvbGwgaW50ZXJ2YWwgZm9yIGhlYWx0aCBjaGVjayByZXRyaWVzIChtcylcbmNvbnN0IEhFQUxUSF9DSEVDS19QT0xMX0lOVEVSVkFMID0gMTAwO1xuLy8gUGVyLXJlYWQgdGltZW91dCB0byBwcmV2ZW50IGJsb2NraW5nIGZvcmV2ZXIgb24gbG9jYWwgd29ybGQncyBFdmVudEVtaXR0ZXJcbi8vICh3aGljaCBkb2Vzbid0IHdvcmsgYWNyb3NzIHByb2Nlc3NlcylcbmNvbnN0IEhFQUxUSF9DSEVDS19SRUFEX1RJTUVPVVQgPSA1MDA7XG5cbi8qKlxuICogUmVhZCBjaHVua3MgZnJvbSBhIHN0cmVhbSB3aXRoIGEgdGltZW91dCBwZXIgcmVhZCBvcGVyYXRpb24uXG4gKiBSZXR1cm5zIHsgY2h1bmtzLCB0aW1lZE91dCB9IHdoZXJlIHRpbWVkT3V0IGluZGljYXRlcyBpZiBhIHJlYWQgdGltZWQgb3V0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkU3RyZWFtV2l0aFRpbWVvdXQoXG4gIHJlYWRlcjogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyPFVpbnQ4QXJyYXk+LFxuICByZWFkVGltZW91dDogbnVtYmVyXG4pOiBQcm9taXNlPHsgY2h1bmtzOiBVaW50OEFycmF5W107IHRpbWVkT3V0OiBib29sZWFuIH0+IHtcbiAgY29uc3QgY2h1bmtzOiBVaW50OEFycmF5W10gPSBbXTtcbiAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCFkb25lICYmICF0aW1lZE91dCkge1xuICAgIGNvbnN0IHJlYWRQcm9taXNlID0gcmVhZGVyLnJlYWQoKTtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHsgZG9uZTogdHJ1ZTsgdmFsdWU6IHVuZGVmaW5lZCB9PihcbiAgICAgIChyZXNvbHZlKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgIH0sIHJlYWRUaW1lb3V0KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3JlYWRQcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pO1xuICAgIGRvbmUgPSByZXN1bHQuZG9uZTtcbiAgICBpZiAocmVzdWx0LnZhbHVlKSBjaHVua3MucHVzaChyZXN1bHQudmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgY2h1bmtzLCB0aW1lZE91dCB9O1xufVxuXG4vKipcbiAqIFBhcnNlIGFuZCB2YWxpZGF0ZSBhIGhlYWx0aCBjaGVjayByZXNwb25zZSBmcm9tIHN0cmVhbSBjaHVua3MuXG4gKiBSZXR1cm5zIHRoZSBwYXJzZWQgcmVzcG9uc2Ugb3IgbnVsbCBpZiBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZUhlYWx0aENoZWNrUmVzcG9uc2UoY2h1bmtzOiBVaW50OEFycmF5W10pOiB7XG4gIGhlYWx0aHk6IGJvb2xlYW47XG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xuICB3b3JrZmxvd0NvcmVWZXJzaW9uPzogc3RyaW5nO1xufSB8IG51bGwge1xuICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdG90YWxMZW5ndGggPSBjaHVua3MucmVkdWNlKChzdW0sIGNodW5rKSA9PiBzdW0gKyBjaHVuay5sZW5ndGgsIDApO1xuICBjb25zdCBjb21iaW5lZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgY29tYmluZWQuc2V0KGNodW5rLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VUZXh0ID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGNvbWJpbmVkKTtcblxuICBsZXQgcmVzcG9uc2U6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE9sZCBkZXBsb3ltZW50cyAoc3BlY1ZlcnNpb24gPCAzKSByZXR1cm4gcGxhaW4gdGV4dCBsaWtlXG4gICAgLy8gJ1dvcmtmbG93IFNESyBcIi4uLlwiIGVuZHBvaW50IGlzIGhlYWx0aHknLiBUcmVhdCBhbnkgbm9uLWVtcHR5XG4gICAgLy8gdGV4dCByZXNwb25zZSBhcyBhIGhlYWx0aHkgZGVwbG95bWVudCB3aXRoIHVua25vd24gc3BlY1ZlcnNpb24uXG4gICAgaWYgKHJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyBoZWFsdGh5OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiByZXNwb25zZSAhPT0gJ29iamVjdCcgfHxcbiAgICByZXNwb25zZSA9PT0gbnVsbCB8fFxuICAgICEoJ2hlYWx0aHknIGluIHJlc3BvbnNlKSB8fFxuICAgIHR5cGVvZiAocmVzcG9uc2UgYXMgeyBoZWFsdGh5OiB1bmtub3duIH0pLmhlYWx0aHkgIT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHIgPSByZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcGFyc2VkOiB7XG4gICAgaGVhbHRoeTogYm9vbGVhbjtcbiAgICBzcGVjVmVyc2lvbj86IG51bWJlcjtcbiAgICB3b3JrZmxvd0NvcmVWZXJzaW9uPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIGhlYWx0aHk6IHIuaGVhbHRoeSBhcyBib29sZWFuLFxuICB9O1xuICBpZiAodHlwZW9mIHIuc3BlY1ZlcnNpb24gPT09ICdudW1iZXInKSB7XG4gICAgcGFyc2VkLnNwZWNWZXJzaW9uID0gci5zcGVjVmVyc2lvbjtcbiAgfVxuICBpZiAodHlwZW9mIHIud29ya2Zsb3dDb3JlVmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJzZWQud29ya2Zsb3dDb3JlVmVyc2lvbiA9IHIud29ya2Zsb3dDb3JlVmVyc2lvbjtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGVhbHRoQ2hlY2soXG4gIHdvcmxkOiBXb3JsZCxcbiAgZW5kcG9pbnQ6IEhlYWx0aENoZWNrRW5kcG9pbnQsXG4gIG9wdGlvbnM/OiBIZWFsdGhDaGVja09wdGlvbnNcbik6IFByb21pc2U8SGVhbHRoQ2hlY2tSZXN1bHQ+IHtcbiAgY29uc3QgdGltZW91dCA9IG9wdGlvbnM/LnRpbWVvdXQgPz8gREVGQVVMVF9IRUFMVEhfQ0hFQ0tfVElNRU9VVDtcbiAgY29uc3QgY29ycmVsYXRpb25JZCA9IGdlbmVyYXRlSWQoKTtcbiAgY29uc3Qgc3RyZWFtTmFtZSA9IGdldEhlYWx0aENoZWNrU3RyZWFtTmFtZShjb3JyZWxhdGlvbklkKTtcblxuICBjb25zdCBxdWV1ZU5hbWU6IFZhbGlkUXVldWVOYW1lID1cbiAgICBlbmRwb2ludCA9PT0gJ3dvcmtmbG93J1xuICAgICAgPyAnX193a2Zfd29ya2Zsb3dfaGVhbHRoX2NoZWNrJ1xuICAgICAgOiAnX193a2Zfc3RlcF9oZWFsdGhfY2hlY2snO1xuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3b3JsZC5xdWV1ZShcbiAgICAgIHF1ZXVlTmFtZSxcbiAgICAgIHsgX19oZWFsdGhDaGVjazogdHJ1ZSwgY29ycmVsYXRpb25JZCB9LFxuICAgICAge1xuICAgICAgICAvLyBVc2UgSlNPTiB0cmFuc3BvcnQgc28gdGhlIGhlYWx0aCBjaGVjayB3b3JrcyBhZ2FpbnN0IGJvdGhcbiAgICAgICAgLy8gb2xkIChKU09OLW9ubHkpIGFuZCBuZXcgKGR1YWwpIGRlcGxveW1lbnRzLlxuICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0xFR0FDWSxcbiAgICAgICAgZGVwbG95bWVudElkOiBvcHRpb25zPy5kZXBsb3ltZW50SWQsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgdGltZW91dCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgd29ybGQuc3RyZWFtcy5nZXQoXG4gICAgICAgICAgZ2VuZXJhdGVIZWFsdGhDaGVja1J1bklkKGNvcnJlbGF0aW9uSWQpLFxuICAgICAgICAgIHN0cmVhbU5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICBjb25zdCB7IGNodW5rcywgdGltZWRPdXQgfSA9IGF3YWl0IHJlYWRTdHJlYW1XaXRoVGltZW91dChcbiAgICAgICAgICByZWFkZXIsXG4gICAgICAgICAgSEVBTFRIX0NIRUNLX1JFQURfVElNRU9VVFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aW1lZE91dCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKCk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgY2FuY2VsIGVycm9yc1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgSEVBTFRIX0NIRUNLX1BPTExfSU5URVJWQUwpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcGFyc2VIZWFsdGhDaGVja1Jlc3BvbnNlKGNodW5rcyk7XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXNwb25zZSxcbiAgICAgICAgICAgIGxhdGVuY3lNczogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBIRUFMVEhfQ0hFQ0tfUE9MTF9JTlRFUlZBTClcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEhFQUxUSF9DSEVDS19QT0xMX0lOVEVSVkFMKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaGVhbHRoeTogZmFsc2UsXG4gICAgICBlcnJvcjogYEhlYWx0aCBjaGVjayB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zYCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBoZWFsdGh5OiBmYWxzZSxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFBhZ2luYXRpb25Db250cmFjdEVycm9yKFxuICBydW5JZDogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmdcbik6IFdvcmtmbG93V29ybGRFcnJvciB7XG4gIHJldHVybiBuZXcgV29ya2Zsb3dXb3JsZEVycm9yKFxuICAgIGBFdmVudCBwYWdpbmF0aW9uICR7bWVzc2FnZX0gZm9yIHdvcmtmbG93IHJ1biBcIiR7cnVuSWR9XCIuYCxcbiAgICB7IGNvZGU6IFJVTl9FUlJPUl9DT0RFUy5XT1JMRF9DT05UUkFDVF9FUlJPUiB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY29yZFJlcXVlc3RlZEV2ZW50Q3Vyc29yKFxuICBydW5JZDogc3RyaW5nLFxuICBjdXJzb3I6IHN0cmluZyB8IG51bGwsXG4gIHJlcXVlc3RlZEN1cnNvcnM6IFNldDxzdHJpbmc+XG4pOiB2b2lkIHtcbiAgaWYgKCFjdXJzb3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHJlcXVlc3RlZEN1cnNvcnMuaGFzKGN1cnNvcikpIHtcbiAgICB0aHJvdyBldmVudFBhZ2luYXRpb25Db250cmFjdEVycm9yKHJ1bklkLCAnZGlkIG5vdCBhZHZhbmNlJyk7XG4gIH1cbiAgcmVxdWVzdGVkQ3Vyc29ycy5hZGQoY3Vyc29yKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kVW5pcXVlRXZlbnRzKFxuICB0YXJnZXQ6IEV2ZW50W10sXG4gIHRhcmdldElkczogU2V0PHN0cmluZz4sXG4gIGV2ZW50czogRXZlbnRbXVxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgaWYgKCF0YXJnZXRJZHMuaGFzKGV2ZW50LmV2ZW50SWQpKSB7XG4gICAgICB0YXJnZXRJZHMuYWRkKGV2ZW50LmV2ZW50SWQpO1xuICAgICAgdGFyZ2V0LnB1c2goZXZlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRFdmVudFBhZ2luYXRpb25Qcm9ncmVzcyhcbiAgcnVuSWQ6IHN0cmluZyxcbiAgaGFzTW9yZTogYm9vbGVhbixcbiAgY3Vyc29yOiBzdHJpbmcgfCBudWxsLFxuICByZXF1ZXN0ZWRDdXJzb3JzOiBTZXQ8c3RyaW5nPlxuKTogdm9pZCB7XG4gIGlmICghaGFzTW9yZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY3Vyc29yID09PSBudWxsKSB7XG4gICAgdGhyb3cgZXZlbnRQYWdpbmF0aW9uQ29udHJhY3RFcnJvcihcbiAgICAgIHJ1bklkLFxuICAgICAgJ3JldHVybmVkIG1vcmUgcGFnZXMgd2l0aG91dCBhIGN1cnNvcidcbiAgICApO1xuICB9XG4gIGlmIChyZXF1ZXN0ZWRDdXJzb3JzLmhhcyhjdXJzb3IpKSB7XG4gICAgdGhyb3cgZXZlbnRQYWdpbmF0aW9uQ29udHJhY3RFcnJvcihydW5JZCwgJ3JlcGVhdGVkIGEgY3Vyc29yJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkUmV0cnlXaXRob3V0RXZlbnRDdXJzb3IoXG4gIGVycm9yOiB1bmtub3duLFxuICBjdXJzb3I6IHN0cmluZyB8IG51bGwsXG4gIGFscmVhZHlSZXRyaWVkOiBib29sZWFuXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjdXJzb3IgIT09IG51bGwgJiZcbiAgICAhYWxyZWFkeVJldHJpZWQgJiZcbiAgICBXb3JrZmxvd1dvcmxkRXJyb3IuaXMoZXJyb3IpICYmXG4gICAgZXJyb3Iuc3RhdHVzID09PSA0MDBcbiAgKTtcbn1cblxuLyoqXG4gKiBMb2FkcyB3b3JrZmxvdyBydW4gZXZlbnRzIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBwYWdlcyBvZiBwYWdpbmF0ZWRcbiAqIHJlc3VsdHMuIEV2ZW50cyBhcmUgcmV0dXJuZWQgaW4gY2hyb25vbG9naWNhbCAoYXNjZW5kaW5nKSBvcmRlciBmb3JcbiAqIGRldGVybWluaXN0aWMgd29ya2Zsb3cgcmVwbGF5LlxuICpcbiAqIEBwYXJhbSBydW5JZCAtIFRoZSB3b3JrZmxvdyBydW4gSUQuXG4gKiBAcGFyYW0gYWZ0ZXJDdXJzb3IgLSBJZiBwcm92aWRlZCwgb25seSBldmVudHMgYWZ0ZXIgdGhpcyBjdXJzb3IgYXJlXG4gKiAgIHJldHVybmVkIChpbmNyZW1lbnRhbCBsb2FkKS4gSWYgb21pdHRlZCwgYWxsIGV2ZW50cyBhcmUgcmV0dXJuZWQuXG4gKiAgIFRoZSByZXR1cm5lZCBjdXJzb3IgY2FuIGJlIHBhc3NlZCBiYWNrIGluIG9uIGEgc3Vic2VxdWVudCBjYWxsIGZvclxuICogICBpbmNyZW1lbnRhbCBsb2FkaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdvcmtmbG93UnVuRXZlbnRzKFxuICBydW5JZDogc3RyaW5nLFxuICBhZnRlckN1cnNvcj86IHN0cmluZ1xuKTogUHJvbWlzZTx7IGV2ZW50czogRXZlbnRbXTsgY3Vyc29yOiBzdHJpbmcgfCBudWxsIH0+IHtcbiAgY29uc3QgaW5jcmVtZW50YWwgPSBhZnRlckN1cnNvciAhPT0gdW5kZWZpbmVkO1xuICByZXR1cm4gdHJhY2UoXG4gICAgaW5jcmVtZW50YWwgPyAnd29ya2Zsb3cubG9hZE5ld0V2ZW50cycgOiAnd29ya2Zsb3cubG9hZEV2ZW50cycsXG4gICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dSdW5JZChydW5JZCksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbG9hZGVkRXZlbnRzOiBFdmVudFtdID0gW107XG4gICAgICBjb25zdCBsb2FkZWRFdmVudElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgY29uc3QgcmVxdWVzdGVkQ3Vyc29ycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgbGV0IGN1cnNvcjogc3RyaW5nIHwgbnVsbCA9IGFmdGVyQ3Vyc29yID8/IG51bGw7XG4gICAgICBsZXQgaGFzTW9yZSA9IHRydWU7XG4gICAgICBsZXQgcGFnZXNMb2FkZWQgPSAwO1xuICAgICAgbGV0IHJldHJpZWRXaXRob3V0Q3Vyc29yID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgZ2V0V29ybGRMYXp5KCk7XG4gICAgICBjb25zdCBsb2FkU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgd2hpbGUgKGhhc01vcmUpIHtcbiAgICAgICAgLy8gVE9ETzogd2UncmUgY3VycmVudGx5IGxvYWRpbmcgYWxsIHRoZSBkYXRhIHdpdGggcmVzb2x2ZVJlZiBiZWhhdmlvdXIuIFdlIG5lZWQgdG8gdXBkYXRlIHRoaXNcbiAgICAgICAgLy8gdG8gbGF6eWxvYWQgdGhlIGRhdGEgZnJvbSB0aGUgd29ybGQgaW5zdGVhZCBzbyB0aGF0IHdlIGNhbiBvcHRpbWl6ZSBhbmQgbWFrZSB0aGUgZXZlbnQgbG9nIGxvYWRpbmdcbiAgICAgICAgLy8gbXVjaCBmYXN0ZXIgYW5kIG1lbW9yeSBlZmZpY2llbnRcbiAgICAgICAgY29uc3QgcGFnZVN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdGVkQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICByZWNvcmRSZXF1ZXN0ZWRFdmVudEN1cnNvcihydW5JZCwgcmVxdWVzdGVkQ3Vyc29yLCByZXF1ZXN0ZWRDdXJzb3JzKTtcblxuICAgICAgICBsZXQgcmVzcG9uc2U6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2Ygd29ybGQuZXZlbnRzLmxpc3Q+PjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICBzb3J0T3JkZXI6ICdhc2MnLFxuICAgICAgICAgICAgICBjdXJzb3I6IHJlcXVlc3RlZEN1cnNvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHNob3VsZFJldHJ5V2l0aG91dEV2ZW50Q3Vyc29yKFxuICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgcmVxdWVzdGVkQ3Vyc29yLFxuICAgICAgICAgICAgICByZXRyaWVkV2l0aG91dEN1cnNvclxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcnVudGltZUxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAnRXZlbnQgY3Vyc29yIHdhcyByZWplY3RlZDsgcmV0cnlpbmcgd2l0aCBhIGZ1bGwgZXZlbnQgcmVsb2FkLicsXG4gICAgICAgICAgICAgIHsgd29ya2Zsb3dSdW5JZDogcnVuSWQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvYWRlZEV2ZW50cy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgbG9hZGVkRXZlbnRJZHMuY2xlYXIoKTtcbiAgICAgICAgICAgIHJlcXVlc3RlZEN1cnNvcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIGN1cnNvciA9IG51bGw7XG4gICAgICAgICAgICByZXRyaWVkV2l0aG91dEN1cnNvciA9IHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBlbmRVbmlxdWVFdmVudHMobG9hZGVkRXZlbnRzLCBsb2FkZWRFdmVudElkcywgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIGhhc01vcmUgPSByZXNwb25zZS5oYXNNb3JlO1xuICAgICAgICBhc3NlcnRFdmVudFBhZ2luYXRpb25Qcm9ncmVzcyhcbiAgICAgICAgICBydW5JZCxcbiAgICAgICAgICBoYXNNb3JlLFxuICAgICAgICAgIHJlc3BvbnNlLmN1cnNvcixcbiAgICAgICAgICByZXF1ZXN0ZWRDdXJzb3JzXG4gICAgICAgICk7XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IG5vbi1udWxsIGN1cnNvciBhY3Jvc3MgcGFnZXMuIEEgV29ybGQgbWF5XG4gICAgICAgIC8vIGxlZ2l0aW1hdGVseSByZXR1cm4gYHsgZGF0YTogW10sIGN1cnNvcjogbnVsbCwgaGFzTW9yZTogZmFsc2UgfWBcbiAgICAgICAgLy8gb24gYSB0cmFpbGluZyBlbXB0eSBwYWdlIOKAlCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBwcmV2aW91cyBwYWdlJ3NcbiAgICAgICAgLy8gdW5kZXJseWluZyBEQiBxdWVyeSBoaXQgdGhlIGxpbWl0IGV4YWN0bHkgYW5kIHJldHVybmVkIGFcbiAgICAgICAgLy8gYExhc3RFdmFsdWF0ZWRLZXlgIFwianVzdCBpbiBjYXNlXCIuIE92ZXJ3cml0aW5nIHdpdGggdGhhdCBudWxsXG4gICAgICAgIC8vIHdvdWxkIGxvc2UgdGhlIHBvc2l0aW9uIHBhc3QgdGhlIGxhc3QgcmVhbCBldmVudCB3ZSBsb2FkZWQgYW5kXG4gICAgICAgIC8vIGZvcmNlIHRoZSBydW50aW1lIGludG8gdGhlIFwibm8gY3Vyc29yIGFmdGVyIGluaXRpYWwgbG9hZFwiIGZ1bGwtXG4gICAgICAgIC8vIHJlbG9hZCBmYWxsYmFjayBvbiBldmVyeSBzdWJzZXF1ZW50IHJlcGxheSBpdGVyYXRpb24uXG4gICAgICAgIGN1cnNvciA9IHJlc3BvbnNlLmN1cnNvciA/PyBjdXJzb3I7XG4gICAgICAgIHBhZ2VzTG9hZGVkKys7XG5cbiAgICAgICAgcnVudGltZUxvZ2dlci5kZWJ1ZygnTG9hZGVkIGV2ZW50IHBhZ2UnLCB7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgICAgICAgaW5jcmVtZW50YWwsXG4gICAgICAgICAgcGFnZTogcGFnZXNMb2FkZWQsXG4gICAgICAgICAgcGFnZUV2ZW50czogcmVzcG9uc2UuZGF0YS5sZW5ndGgsXG4gICAgICAgICAgdG90YWxFdmVudHM6IGxvYWRlZEV2ZW50cy5sZW5ndGgsXG4gICAgICAgICAgaGFzTW9yZSxcbiAgICAgICAgICBwYWdlTXM6IERhdGUubm93KCkgLSBwYWdlU3RhcnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydW50aW1lTG9nZ2VyLmRlYnVnKCdFdmVudCBsb2FkIGNvbXBsZXRlJywge1xuICAgICAgICB3b3JrZmxvd1J1bklkOiBydW5JZCxcbiAgICAgICAgaW5jcmVtZW50YWwsXG4gICAgICAgIHRvdGFsRXZlbnRzOiBsb2FkZWRFdmVudHMubGVuZ3RoLFxuICAgICAgICBwYWdlc0xvYWRlZCxcbiAgICAgICAgdG90YWxNczogRGF0ZS5ub3coKSAtIGxvYWRTdGFydCxcbiAgICAgIH0pO1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93RXZlbnRzQ291bnQobG9hZGVkRXZlbnRzLmxlbmd0aCksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd0V2ZW50c1BhZ2VzTG9hZGVkKHBhZ2VzTG9hZGVkKSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBldmVudHM6IGxvYWRlZEV2ZW50cywgY3Vyc29yIH07XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIENPUlMgaGVhZGVycyBmb3IgaGVhbHRoIGNoZWNrIHJlc3BvbnNlcy5cbiAqIEFsbG93cyB0aGUgb2JzZXJ2YWJpbGl0eSBVSSB0byBjaGVjayBlbmRwb2ludCBoZWFsdGggZnJvbSBhIGRpZmZlcmVudCBvcmlnaW4uXG4gKi9cbmNvbnN0IEhFQUxUSF9DSEVDS19DT1JTX0hFQURFUlMgPSB7XG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogJ1BPU1QsIE9QVElPTlMsIEdFVCwgSEVBRCcsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogJ0NvbnRlbnQtVHlwZScsXG59O1xuXG4vKipcbiAqIFdyYXBzIGEgcmVxdWVzdC9yZXNwb25zZSBoYW5kbGVyIGFuZCBhZGRzIGEgaGVhbHRoIGNoZWNrIFwibW9kZVwiXG4gKiBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgYSBgX19oZWFsdGhgIHF1ZXJ5IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIZWFsdGhDaGVjayhcbiAgaGFuZGxlcjogKHJlcTogUmVxdWVzdCkgPT4gUHJvbWlzZTxSZXNwb25zZT4sXG4gIHdvcmxkU3BlY1ZlcnNpb24/OiBudW1iZXJcbik6IChyZXE6IFJlcXVlc3QpID0+IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgcmV0dXJuIGFzeW5jIChyZXE6IFJlcXVlc3QpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGNvbnN0IGlzSGVhbHRoQ2hlY2sgPSB1cmwuc2VhcmNoUGFyYW1zLmhhcygnX19oZWFsdGgnKTtcbiAgICBpZiAoaXNIZWFsdGhDaGVjaykge1xuICAgICAgLy8gSGFuZGxlIENPUlMgcHJlZmxpZ2h0IGZvciBoZWFsdGggY2hlY2tcbiAgICAgIGlmIChyZXEubWV0aG9kID09PSAnT1BUSU9OUycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgICAgaGVhZGVyczogSEVBTFRIX0NIRUNLX0NPUlNfSEVBREVSUyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgaGVhbHRoeTogdHJ1ZSxcbiAgICAgICAgICBlbmRwb2ludDogdXJsLnBhdGhuYW1lLFxuICAgICAgICAgIHNwZWNWZXJzaW9uOiB3b3JsZFNwZWNWZXJzaW9uID8/IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgICAgIHdvcmtmbG93Q29yZVZlcnNpb24sXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIC4uLkhFQUxUSF9DSEVDS19DT1JTX0hFQURFUlMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGhhbmRsZXIocmVxKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBRdWV1ZXMgYSBtZXNzYWdlIHRvIHRoZSBzcGVjaWZpZWQgcXVldWUgd2l0aCB0cmFjaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVldWVNZXNzYWdlKFxuICB3b3JsZDogV29ybGQsXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIHdvcmxkLnF1ZXVlPlxuKSB7XG4gIGNvbnN0IHF1ZXVlTmFtZSA9IGFyZ3NbMF07XG4gIGF3YWl0IHRyYWNlKFxuICAgICdxdWV1ZS5wdWJsaXNoJyxcbiAgICB7XG4gICAgICAvLyBTdGFuZGFyZCBPVEVMIG1lc3NhZ2luZyBjb252ZW50aW9uc1xuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAuLi5BdHRyaWJ1dGUuTWVzc2FnaW5nU3lzdGVtKCd2ZXJjZWwtcXVldWUnKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLk1lc3NhZ2luZ0Rlc3RpbmF0aW9uTmFtZShxdWV1ZU5hbWUpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuTWVzc2FnaW5nT3BlcmF0aW9uVHlwZSgncHVibGlzaCcpLFxuICAgICAgICAvLyBQZWVyIHNlcnZpY2UgZm9yIERhdGFkb2cgc2VydmljZSBtYXBzXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5QZWVyU2VydmljZSgndmVyY2VsLXF1ZXVlJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5ScGNTeXN0ZW0oJ3ZlcmNlbC1xdWV1ZScpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuUnBjU2VydmljZSgndnFzJyksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5ScGNNZXRob2QoJ3B1Ymxpc2gnKSxcbiAgICAgIH0sXG4gICAgICBraW5kOiBhd2FpdCBnZXRTcGFuS2luZCgnUFJPRFVDRVInKSxcbiAgICB9LFxuICAgIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VJZCB9ID0gYXdhaXQgd29ybGQucXVldWUoLi4uYXJncyk7XG4gICAgICBpZiAobWVzc2FnZUlkKSB7XG4gICAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoQXR0cmlidXRlLk1lc3NhZ2luZ01lc3NhZ2VJZChtZXNzYWdlSWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcXVldWUgb3ZlcmhlYWQgdGltZSBpbiBtaWxsaXNlY29uZHMgZm9yIGEgZ2l2ZW4gbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXVlT3ZlcmhlYWQobWVzc2FnZTogeyByZXF1ZXN0ZWRBdD86IERhdGUgfSkge1xuICBpZiAoIW1lc3NhZ2UucmVxdWVzdGVkQXQpIHJldHVybjtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQXR0cmlidXRlLlF1ZXVlT3ZlcmhlYWRNcyhcbiAgICAgIERhdGUubm93KCkgLSBtZXNzYWdlLnJlcXVlc3RlZEF0LmdldFRpbWUoKVxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBtZW1vaXplZCBhY2Nlc3NvciBmb3IgdGhlIHBlci1ydW4gQUVTLTI1NiBlbmNyeXB0aW9uIGtleS5cbiAqXG4gKiBUaGUgZmlyc3QgY2FsbCByZXNvbHZlcyB0aGUga2V5IHZpYSBgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bmAgKHdoaWNoXG4gKiBtYXkgZG8gSEtERiBkZXJpdmF0aW9uIGxvY2FsbHkgb24gVmVyY2VsLCBvciBhIG5ldHdvcmsgZmV0Y2ggZnJvbVxuICogZXh0ZXJuYWwgY29udGV4dHMpIGFuZCBpbXBvcnRzIGl0IGFzIGEgYENyeXB0b0tleWA7IHN1YnNlcXVlbnQgY2FsbHNcbiAqIGF3YWl0IHRoZSBzYW1lIGNhY2hlZCBwcm9taXNlLiBJZiB0aGUgd29ybGQgZG9lc24ndCBzdXBwb3J0IGVuY3J5cHRpb25cbiAqIG9yIHRoZSBydW4gaGFzIG5vIGtleSBjb25maWd1cmVkLCB0aGUgY2FjaGVkIHZhbHVlIGlzIGB1bmRlZmluZWRgLlxuICpcbiAqIFVzZWQgYnkgc3RlcCAvIHdvcmtmbG93IGhhbmRsZXJzIHRvIGRlZmVyIHRoZSAocG90ZW50aWFsbHkgZXhwZW5zaXZlKVxuICoga2V5IGZldGNoIHVudGlsIHRoZSBmaXJzdCBjb2RlIHBhdGggdGhhdCBhY3R1YWxseSBuZWVkcyBpdCDigJQgdHlwaWNhbGx5XG4gKiBpbnB1dCBoeWRyYXRpb24gb24gdGhlIHN1Y2Nlc3MgcGF0aCwgb3IgZXJyb3IgZGVoeWRyYXRpb24gb24gYSBmYWlsdXJlXG4gKiBwYXRoLiBCb3RoIHBhdGhzIGNhbiByYWNlLWNhbGwgdGhlIGFjY2Vzc29yIHdpdGhvdXQgdHJpZ2dlcmluZyBkdXBsaWNhdGVcbiAqIGZldGNoZXMuXG4gKlxuICogRXJyb3JzIHRocm93biBieSBgZ2V0RW5jcnlwdGlvbktleUZvclJ1bmAgcHJvcGFnYXRlIHRvIGV2ZXJ5IGNhbGxlclxuICogKHRoZSBjYWNoZWQgcHJvbWlzZSByZWplY3RzKS4gVGhpcyBpcyBpbnRlbnRpb25hbDogd2hlbiBlbmNyeXB0aW9uIGlzXG4gKiBjb25maWd1cmVkLCB3ZSBuZXZlciB3YW50IHRvIHNpbGVudGx5IGZhbGwgYmFjayB0byBwbGFpbnRleHRcbiAqIHNlcmlhbGl6YXRpb24uIEEgcHJvcGFnYXRlZCBlcnJvciBpbiBhbiBldmVudC1lbWlzc2lvbiBwYXRoIGxlYXZlcyB0aGVcbiAqIG91dGVyIHRyeS9jYXRjaCB0byBsb2cgYW5kIHN1cmZhY2UgdGhlIGlzc3VlOyB0aGUgcXVldWUncyByZWRlbGl2ZXJ5XG4gKiBzZW1hbnRpY3Mgd2lsbCByZXRyeSB0aGUga2V5IGZldGNoIG9uIHRoZSBuZXh0IGF0dGVtcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vaXplRW5jcnlwdGlvbktleShcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5PcklkOiBXb3JrZmxvd1J1biB8IHN0cmluZ1xuKTogKCkgPT4gUHJvbWlzZTxDcnlwdG9LZXkgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IGNhY2hlZDogUHJvbWlzZTxDcnlwdG9LZXkgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICBjYWNoZWQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUaGUgYGdldEVuY3J5cHRpb25LZXlGb3JSdW5gIG92ZXJsb2FkIHNldCB0YWtlcyBlaXRoZXIgYVxuICAgICAgICAvLyBgV29ya2Zsb3dSdW5gIG9yIGEgYHJ1bklkOiBzdHJpbmdgICh3aXRoIG9wdGlvbmFsIGNvbnRleHQpLiBCcmFuY2hcbiAgICAgICAgLy8gaGVyZSBzbyBUeXBlU2NyaXB0IHBpY2tzIHRoZSByaWdodCBvdmVybG9hZCBmb3IgZWFjaCBzaGFwZS5cbiAgICAgICAgY29uc3QgcmF3S2V5ID1cbiAgICAgICAgICB0eXBlb2YgcnVuT3JJZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bk9ySWQpXG4gICAgICAgICAgICA6IGF3YWl0IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4/LihydW5PcklkKTtcbiAgICAgICAgcmV0dXJuIHJhd0tleSA/IGF3YWl0IGltcG9ydEtleShyYXdLZXkpIDogdW5kZWZpbmVkO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAGnB;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAChE;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;;IACtB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;;;;IAIlD,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAID;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;gBA4BF,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAuB9D;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAKlE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAa7B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAKvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAGlC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAKlC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAK3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,sBAAsB,CAErC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CAAC,CAAC,CAAC;CA4G7B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AASzB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAChE;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;;IACtB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;;;;IAIlD,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAID;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;gBA4BF,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAiC9D;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAKlE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAa7B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAKvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAGlC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAKlC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAK3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,sBAAsB,CAErC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CAAC,CAAC,CAAC;CA6G7B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D"}
@@ -4,8 +4,8 @@ import { SPEC_VERSION_CURRENT, } from '@workflow/world';
4
4
  import { importKey } from '../encryption.js';
5
5
  import { getExternalRevivers, hydrateRunError, hydrateWorkflowReturnValue, } from '../serialization.js';
6
6
  import { getWorkflowRunStreamId } from '../util.js';
7
- import { wakeUpRun, } from './runs.js';
8
7
  import { getWorldLazy } from './get-world-lazy.js';
8
+ import { wakeUpRun, } from './runs.js';
9
9
  /**
10
10
  * A handler class for a workflow run.
11
11
  */
@@ -65,6 +65,15 @@ export class Run {
65
65
  }
66
66
  return this.#encryptionKeyPromise;
67
67
  }
68
+ /**
69
+ * Defer fetching the run and its encryption key until serialized stream data
70
+ * is actually read. An empty or metadata-only stream must not start an
71
+ * unobserved run lookup.
72
+ * @internal
73
+ */
74
+ #getEncryptionKeyLazily() {
75
+ return () => this.#getEncryptionKey();
76
+ }
68
77
  /**
69
78
  * Interrupts pending `sleep()` calls, resuming the workflow early.
70
79
  *
@@ -169,9 +178,10 @@ export class Run {
169
178
  'use step';
170
179
  const { ops = [], global = globalThis, startIndex, namespace } = options;
171
180
  const name = getWorkflowRunStreamId(this.runId, namespace);
172
- // Pass the key as a promise it will be resolved lazily inside
173
- // the first async transform() call of the deserialize stream.
174
- const encryptionKey = this.#getEncryptionKey();
181
+ // The resolver starts only when the deserialize stream sees its first
182
+ // chunk, so creating or probing an empty stream cannot reject in the
183
+ // background.
184
+ const encryptionKey = this.#getEncryptionKeyLazily();
175
185
  const stream = getExternalRevivers(global, ops, this.runId, encryptionKey)
176
186
  .ReadableStream({
177
187
  name,
@@ -268,4 +278,4 @@ export class Run {
268
278
  export function getRun(runId) {
269
279
  return new Run(runId);
270
280
  }
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEdBR3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUdMLFNBQVMsR0FDVixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUE2Q25EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQUc7SUFDZCxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQXNCO1FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBRzdCO1FBQ0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBUztJQUVkOzs7T0FHRztJQUNILGFBQWEsQ0FBNkI7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RCxJQUNFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7b0JBQ2xDLGVBQWUsR0FBRyxxQkFBcUIsRUFDdkMsQ0FBQztvQkFDRCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUUsQ0FBQztvQkFDakQsZUFBZSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDM0QsU0FBUztnQkFDWCxDQUFDO2dCQUNELE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFVLEtBQWE7SUFDM0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgV29ya2Zsb3dSdW5DYW5jZWxsZWRFcnJvcixcbiAgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcixcbiAgV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvcixcbiAgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFdPUktGTE9XX0RFU0VSSUFMSVpFLCBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuaW1wb3J0IHtcbiAgU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gIHR5cGUgV29ya2Zsb3dSdW5TdGF0dXMsXG4gIHR5cGUgV29ybGQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyB0eXBlIENyeXB0b0tleSwgaW1wb3J0S2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQge1xuICBnZXRFeHRlcm5hbFJldml2ZXJzLFxuICBoeWRyYXRlUnVuRXJyb3IsXG4gIGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UnVuU3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgU3RvcFNsZWVwT3B0aW9ucyxcbiAgdHlwZSBTdG9wU2xlZXBSZXN1bHQsXG4gIHdha2VVcFJ1bixcbn0gZnJvbSAnLi9ydW5zLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vZ2V0LXdvcmxkLWxhenkuanMnO1xuXG4vKipcbiAqIEEgYFJlYWRhYmxlU3RyZWFtYCBleHRlbmRlZCB3aXRoIHdvcmtmbG93LXNwZWNpZmljIGhlbHBlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93UmVhZGFibGVTdHJlYW08UiA9IGFueT4gPSBSZWFkYWJsZVN0cmVhbTxSPiAmIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhaWwgaW5kZXggKGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLCAwLWJhc2VkKSBvZiB0aGVcbiAgICogdW5kZXJseWluZyB3b3JrZmxvdyBzdHJlYW0uIFVzZWZ1bCBmb3IgcmVzb2x2aW5nIGEgbmVnYXRpdmUgYHN0YXJ0SW5kZXhgXG4gICAqIGludG8gYW4gYWJzb2x1dGUgcG9zaXRpb24g4oCUIGZvciBleGFtcGxlLCB3aGVuIGJ1aWxkaW5nIHJlY29ubmVjdGlvblxuICAgKiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSB0aGUgY2xpZW50IHdoZXJlIHRoZSBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBSZXR1cm5zIGAtMWAgd2hlbiBubyBjaHVua3MgaGF2ZSBiZWVuIHdyaXR0ZW4geWV0LlxuICAgKi9cbiAgZ2V0VGFpbEluZGV4KCk6IFByb21pc2U8bnVtYmVyPjtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSB3b3JrZmxvdydzIHJlYWRhYmxlIHN0cmVhbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBuYW1lc3BhY2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aXBsZSBzdHJlYW1zIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgc2FtZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggbnVtYmVyIG9mIHRoZSBzdGFydGluZyBjaHVuayB0byBiZWdpbiByZWFkaW5nIHRoZSBzdHJlYW0gZnJvbS5cbiAgICogTmVnYXRpdmUgdmFsdWVzIHN0YXJ0IGZyb20gdGhlIGVuZCAoZS5nLiAtMyByZWFkcyB0aGUgbGFzdCAzIGNodW5rcykuXG4gICAqL1xuICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAvKipcbiAgICogQW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBleGVjdXRpb25cbiAgICogZW52aXJvbm1lbnQgaXMgcGF1c2VkIC8gdGVybWluYXRlZFxuICAgKiAoaS5lLiB1c2luZyBbYHdhaXRVbnRpbCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0V4dGVuZGFibGVFdmVudC93YWl0VW50aWwpIG9yIHNpbWlsYXIpLlxuICAgKi9cbiAgb3BzPzogUHJvbWlzZTxhbnk+W107XG4gIC8qKlxuICAgKiBUaGUgZ2xvYmFsIG9iamVjdCB0byB1c2UgZm9yIGh5ZHJhdGluZyB0eXBlcyBmcm9tIHRoZSBnbG9iYWwgc2NvcGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHtAbGluayBbYGdsb2JhbFRoaXNgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9nbG9iYWxUaGlzKX0uXG4gICAqL1xuICBnbG9iYWw/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEEgaGFuZGxlciBjbGFzcyBmb3IgYSB3b3JrZmxvdyBydW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW48VFJlc3VsdD4ge1xuICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2U6IFJ1bjx1bmtub3duPikge1xuICAgIHJldHVybiB7IHJ1bklkOiBpbnN0YW5jZS5ydW5JZCwgcmVzaWxpZW50U3RhcnQ6IGluc3RhbmNlLiNyZXNpbGllbnRTdGFydCB9O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oZGF0YToge1xuICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgcmVzaWxpZW50U3RhcnQ/OiBib29sZWFuO1xuICB9KSB7XG4gICAgcmV0dXJuIG5ldyBSdW4oZGF0YS5ydW5JZCwgeyByZXNpbGllbnRTdGFydDogZGF0YS5yZXNpbGllbnRTdGFydCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIHJ1bklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JsZCBvYmplY3QuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI3dvcmxkUHJvbWlzZTogUHJvbWlzZTxXb3JsZD4gfCB1bmRlZmluZWQ7XG4gIGdldCAjbGF6eVdvcmxkUHJvbWlzZSgpIHtcbiAgICBpZiAoIXRoaXMuI3dvcmxkUHJvbWlzZSkgdGhpcy4jd29ybGRQcm9taXNlID0gZ2V0V29ybGRMYXp5KCk7XG4gICAgcmV0dXJuIHRoaXMuI3dvcmxkUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZWQgZW5jcnlwdGlvbiBrZXkgcmVzb2x1dGlvbi4gUmVzb2x2ZWQgb25jZSBvbiBmaXJzdCB1c2UgYW5kXG4gICAqIHJldXNlZCBmb3IgcmV0dXJuVmFsdWUsIGdldFJlYWRhYmxlKCksIGV0Yy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjZW5jcnlwdGlvbktleVByb21pc2U6IFByb21pc2U8Q3J5cHRvS2V5IHwgdW5kZWZpbmVkPiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHJ1bl9jcmVhdGVkIGZhaWxlZCBhbmQgdGhlIHJ1biBtYXkgbm90IGV4aXN0IHlldCAodGhlXG4gICAqIHJlc2lsaWVudCBzdGFydCBwYXRoIHdpbGwgY3JlYXRlIGl0IHZpYSBydW5fc3RhcnRlZCkuIHBvbGxSZXR1cm5WYWx1ZVxuICAgKiByZXRyaWVzIG9uIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciBvbmx5IHdoZW4gdGhpcyBmbGFnIGlzIHNldCBzb1xuICAgKiB0aGF0IG5vcm1hbCBydW5zIGZhaWwgZmFzdCBvbiA0MDQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI3Jlc2lsaWVudFN0YXJ0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocnVuSWQ6IHN0cmluZywgb3B0cz86IHsgcmVzaWxpZW50U3RhcnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnJ1bklkID0gcnVuSWQ7XG4gICAgdGhpcy4jcmVzaWxpZW50U3RhcnQgPSBvcHRzPy5yZXNpbGllbnRTdGFydCA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbmQgY2FjaGVzIHRoZSBlbmNyeXB0aW9uIGtleSBmb3IgdGhpcyBydW4uXG4gICAqIFRoZSBrZXkgaXMgdGhlIHNhbWUgZm9yIHRoZSBsaWZldGltZSBvZiBhIHJ1biwgc28gaXQgb25seSBuZWVkc1xuICAgKiB0byBiZSByZXNvbHZlZCBvbmNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNnZXRFbmNyeXB0aW9uS2V5KCk6IFByb21pc2U8Q3J5cHRvS2V5IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZSkge1xuICAgICAgdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpO1xuICAgICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuKTtcbiAgICAgICAgcmV0dXJuIHJhd0tleSA/IGF3YWl0IGltcG9ydEtleShyYXdLZXkpIDogdW5kZWZpbmVkO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycnVwdHMgcGVuZGluZyBgc2xlZXAoKWAgY2FsbHMsIHJlc3VtaW5nIHRoZSB3b3JrZmxvdyBlYXJseS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyB0byB0YXJnZXQgc3BlY2lmaWMgc2xlZXAgY2FsbHMgYnkgY29ycmVsYXRpb24gSUQuXG4gICAqICAgSWYgbm90IHByb3ZpZGVkLCBhbGwgcGVuZGluZyBzbGVlcCBjYWxscyB3aWxsIGJlIGludGVycnVwdGVkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBTdG9wU2xlZXBSZXN1bHR9IG9iamVjdCBjb250YWluaW5nIHRoZSBudW1iZXIgb2Ygc2xlZXAgY2FsbHMgdGhhdCB3ZXJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgYXN5bmMgd2FrZVVwKG9wdGlvbnM/OiBTdG9wU2xlZXBPcHRpb25zKTogUHJvbWlzZTxTdG9wU2xlZXBSZXN1bHQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB3YWtlVXBSdW4oYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZSwgdGhpcy5ydW5JZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgYXN5bmMgY2FuY2VsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUodGhpcy5ydW5JZCwge1xuICAgICAgZXZlbnRUeXBlOiAncnVuX2NhbmNlbGxlZCcsXG4gICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgd29ya2Zsb3cgcnVuIGV4aXN0cy5cbiAgICovXG4gIGdldCBleGlzdHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnNcbiAgICAgICAgLmdldCh0aGlzLnJ1bklkLCB7IHJlc29sdmVEYXRhOiAnbm9uZScgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IuaXMoZXJyb3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHN0YXR1cygpOiBQcm9taXNlPFdvcmtmbG93UnVuU3RhdHVzPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLnN0YXR1cylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICogUG9sbHMgdGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZSB1bnRpbCBpdCBpcyBjb21wbGV0ZWQuXG4gICAqL1xuICBnZXQgcmV0dXJuVmFsdWUoKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jcG9sbFJldHVyblZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgZ2V0IHdvcmtmbG93TmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi53b3JrZmxvd05hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGdldCBjcmVhdGVkQXQoKTogUHJvbWlzZTxEYXRlPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNyZWF0ZWRBdClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIHN0YXJ0ZWQgZXhlY3V0aW9uLlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgd29ya2Zsb3cgaGFzIG5vdCBzdGFydGVkIHlldC5cbiAgICovXG4gIGdldCBzdGFydGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLnN0YXJ0ZWRBdClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIGNvbXBsZXRlZC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICovXG4gIGdldCBjb21wbGV0ZWRBdCgpOiBQcm9taXNlPERhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4uY29tcGxldGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVhZGFibGUgc3RyZWFtIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBnZXQgcmVhZGFibGUoKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVhZGFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHdvcmtmbG93IHJ1bidzIGRlZmF1bHQgcmVhZGFibGUgc3RyZWFtLCB3aGljaCByZWFkcyBjaHVua3NcbiAgICogd3JpdHRlbiB0byB0aGUgY29ycmVzcG9uZGluZyB3cml0YWJsZSBzdHJlYW0ge0BsaW5rIGdldFdyaXRhYmxlfS5cbiAgICpcbiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBoYXMgYW4gYWRkaXRpb25hbCB7QGxpbmsgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbS5nZXRUYWlsSW5kZXggfCBnZXRUYWlsSW5kZXgoKX1cbiAgICogaGVscGVyIHRoYXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qga25vd24gY2h1bmsuIFRoaXMgaXMgdXNlZnVsIHdoZW5cbiAgICogYnVpbGRpbmcgcmVjb25uZWN0aW9uIGVuZHBvaW50cyB0aGF0IG5lZWQgdG8gaW5mb3JtIGNsaWVudHMgd2hlcmUgdGhlXG4gICAqIHN0cmVhbSBzdGFydHMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSByZWFkYWJsZSBzdHJlYW0uXG4gICAqIEByZXR1cm5zIEEgYFdvcmtmbG93UmVhZGFibGVTdHJlYW1gIGZvciB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0UmVhZGFibGU8UiA9IGFueT4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbU9wdGlvbnMgPSB7fVxuICApOiBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtPFI+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIGNvbnN0IHsgb3BzID0gW10sIGdsb2JhbCA9IGdsb2JhbFRoaXMsIHN0YXJ0SW5kZXgsIG5hbWVzcGFjZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lID0gZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCh0aGlzLnJ1bklkLCBuYW1lc3BhY2UpO1xuICAgIC8vIFBhc3MgdGhlIGtleSBhcyBhIHByb21pc2Ug4oCUIGl0IHdpbGwgYmUgcmVzb2x2ZWQgbGF6aWx5IGluc2lkZVxuICAgIC8vIHRoZSBmaXJzdCBhc3luYyB0cmFuc2Zvcm0oKSBjYWxsIG9mIHRoZSBkZXNlcmlhbGl6ZSBzdHJlYW0uXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHRoaXMuI2dldEVuY3J5cHRpb25LZXkoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBnZXRFeHRlcm5hbFJldml2ZXJzKGdsb2JhbCwgb3BzLCB0aGlzLnJ1bklkLCBlbmNyeXB0aW9uS2V5KVxuICAgICAgLlJlYWRhYmxlU3RyZWFtISh7XG4gICAgICBuYW1lLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICB9KSBhcyBSZWFkYWJsZVN0cmVhbTxSPjtcblxuICAgIGNvbnN0IHdvcmxkUHJvbWlzZSA9IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG4gICAgY29uc3QgcnVuSWQgPSB0aGlzLnJ1bklkO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN0cmVhbSwge1xuICAgICAgZ2V0VGFpbEluZGV4OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBhd2FpdCB3b3JsZFByb21pc2U7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCB3b3JsZC5zdHJlYW1zLmdldEluZm8ocnVuSWQsIG5hbWUpO1xuICAgICAgICByZXR1cm4gaW5mby50YWlsSW5kZXg7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGxzIHRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUgZXZlcnkgMSBzZWNvbmQgdW50aWwgaXQgaXMgY29tcGxldGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHJldHVybnMgVGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGFzeW5jICNwb2xsUmV0dXJuVmFsdWUoKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuXG4gICAgLy8gV2hlbiByZXNpbGllbnRTdGFydCBpcyB0cnVlLCBydW5fY3JlYXRlZCBmYWlsZWQgYW5kIHRoZSBydW4gbWF5XG4gICAgLy8gbm90IGV4aXN0IHlldC4gUmV0cnkgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIHVwIHRvIDMgdGltZXNcbiAgICAvLyAoMXMgKyAzcyArIDZzID0gMTBzIHRvdGFsKSB0byBnaXZlIHRoZSBxdWV1ZSB0aW1lIHRvIGRlbGl2ZXJcbiAgICAvLyBhbmQgdGhlIHJ1bnRpbWUgdG8gY3JlYXRlIHRoZSBydW4gdmlhIHJ1bl9zdGFydGVkLlxuICAgIC8vIFdoZW4gcmVzaWxpZW50U3RhcnQgaXMgZmFsc2UsIDQwNCBpcyBhIHJlYWwgZXJyb3Ig4oCUIGZhaWwgZmFzdC5cbiAgICBsZXQgbm90Rm91bmRSZXRyaWVzID0gMDtcbiAgICBjb25zdCBOT1RfRk9VTkRfTUFYX1JFVFJJRVMgPSB0aGlzLiNyZXNpbGllbnRTdGFydCA/IDMgOiAwO1xuICAgIGNvbnN0IE5PVF9GT1VORF9ERUxBWVMgPSBbMV8wMDAsIDNfMDAwLCA2XzAwMF07XG5cbiAgICAvLyBOT1RFOiB3aGVuIHRoaXMgcG9sbCBydW5zIGluc2lkZSBhIHN0ZXAgKGUuZy4gdGhlIHN0ZXAgdGhhdCBhIHBhcmVudFxuICAgIC8vIHdvcmtmbG93IHVzZXMgdG8gYXdhaXQgYSBjaGlsZCB3b3JrZmxvdydzIGByZXR1cm5WYWx1ZWApLCBpdCBibG9ja3NcbiAgICAvLyBhIHF1ZXVlIHdvcmtlciBzbG90IGZvciBhcyBsb25nIGFzIHRoZSBjaGlsZCBydW4gdGFrZXMgdG8gZmluaXNoLlxuICAgIC8vIFdvcmtlci1iYXNlZCB3b3JsZHMgbGlrZSBgd29ybGQtcG9zdGdyZXNgIG11c3QgYmUgc2l6ZWQgdG8gY292ZXIgdGhlXG4gICAgLy8gcGVhayBudW1iZXIgb2Ygc3VjaCBwb2xscyBpbiBmbGlnaHQg4oCUIHNlZSB0aGUgYHF1ZXVlQ29uY3VycmVuY3lgXG4gICAgLy8gZGVmYXVsdCBvbiB0aGUgUG9zdGdyZXMgd29ybGQgYW5kIHRoZSBub3RlcyBpbiB0aGUgZWFnZXItcHJvY2Vzc2luZ1xuICAgIC8vIGNoYW5nZWxvZyBmb3IgZGV0YWlscy5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCk7XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGF3YWl0IHRoaXMuI2dldEVuY3J5cHRpb25LZXkoKTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICAgICAgICBydW4ub3V0cHV0LFxuICAgICAgICAgICAgdGhpcy5ydW5JZCxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjYW5jZWxsZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IodGhpcy5ydW5JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVuLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAvLyBIeWRyYXRlIHRoZSBzZXJpYWxpemVkIHJ1biBlcnJvciBzbyB0aGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlXG4gICAgICAgICAgLy8gKHdpdGggaXRzIHR5cGUgaWRlbnRpdHksIGNhdXNlIGNoYWluLCBldGMuKSBpcyBzZXQgYXMgdGhlXG4gICAgICAgICAgLy8gYGNhdXNlYCBvbiBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLlxuICAgICAgICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBhd2FpdCB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KCk7XG4gICAgICAgICAgbGV0IGh5ZHJhdGVkRXJyb3I6IHVua25vd247XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGh5ZHJhdGVkRXJyb3IgPSBhd2FpdCBoeWRyYXRlUnVuRXJyb3IoXG4gICAgICAgICAgICAgIHJ1bi5lcnJvcixcbiAgICAgICAgICAgICAgdGhpcy5ydW5JZCxcbiAgICAgICAgICAgICAgZW5jcnlwdGlvbktleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIElmIGh5ZHJhdGlvbiBmYWlscywgc3VyZmFjZSBhIGdlbmVyaWMgZmFsbGJhY2sgcmF0aGVyIHRoYW5cbiAgICAgICAgICAgIC8vIGxlYXZpbmcgdGhlIHVzZXIgd2l0aCBhIHJhdyBVaW50OEFycmF5LiBUaGUgcnVuJ3MgZXJyb3JDb2RlXG4gICAgICAgICAgICAvLyBpcyBzdGlsbCBwcmVzZXJ2ZWQgb24gdGhlIHRocm93biBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLlxuICAgICAgICAgICAgaHlkcmF0ZWRFcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGh5ZHJhdGUgd29ya2Zsb3cgcnVuIGVycm9yJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bkZhaWxlZEVycm9yKHRoaXMucnVuSWQsIGh5ZHJhdGVkRXJyb3IsIHtcbiAgICAgICAgICAgIGVycm9yQ29kZTogcnVuLmVycm9yQ29kZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJ1biBub3QgY29tcGxldGVkIHlldCDigJQgc2xlZXAgYW5kIHBvbGwgYWdhaW4uXG4gICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yKHRoaXMucnVuSWQsIHJ1bi5zdGF0dXMpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IuaXMoZXJyb3IpKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMV8wMDApKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLmlzKGVycm9yKSAmJlxuICAgICAgICAgIG5vdEZvdW5kUmV0cmllcyA8IE5PVF9GT1VORF9NQVhfUkVUUklFU1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWxheSA9IE5PVF9GT1VORF9ERUxBWVNbbm90Rm91bmRSZXRyaWVzXSE7XG4gICAgICAgICAgbm90Rm91bmRSZXRyaWVzKys7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBgUnVuYCBvYmplY3QgZm9yIGEgZ2l2ZW4gcnVuIElELlxuICpcbiAqIEBwYXJhbSBydW5JZCAtIFRoZSB3b3JrZmxvdyBydW4gSUQgb2J0YWluZWQgZnJvbSB7QGxpbmsgc3RhcnR9LlxuICogQHJldHVybnMgQSBgUnVuYCBvYmplY3QuXG4gKiBAdGhyb3dzIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciBpZiB0aGUgcnVuIElEIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bjxUUmVzdWx0PihydW5JZDogc3RyaW5nKTogUnVuPFRSZXN1bHQ+IHtcbiAgcmV0dXJuIG5ldyBSdW4ocnVuSWQpO1xufVxuIl19
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEdBR3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFHTCxTQUFTLEdBQ1YsTUFBTSxXQUFXLENBQUM7QUE2Q25COztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQUc7SUFDZCxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQXNCO1FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBRzdCO1FBQ0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBUztJQUVkOzs7T0FHRztJQUNILGFBQWEsQ0FBNkI7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QU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsSUFDRSx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO29CQUNsQyxlQUFlLEdBQUcscUJBQXFCLEVBQ3ZDLENBQUM7b0JBQ0QsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFFLENBQUM7b0JBQ2pELGVBQWUsRUFBRSxDQUFDO29CQUNsQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzNELFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBVSxLQUFhO0lBQzNDLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IsXG4gIFdvcmtmbG93UnVuRmFpbGVkRXJyb3IsXG4gIFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IsXG4gIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbmltcG9ydCB7XG4gIFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICB0eXBlIFdvcmtmbG93UnVuU3RhdHVzLFxuICB0eXBlIFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgdHlwZSBDcnlwdG9LZXksIGltcG9ydEtleSB9IGZyb20gJy4uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxSZXZpdmVycyxcbiAgaHlkcmF0ZVJ1bkVycm9yLFxuICBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1J1blN0cmVhbUlkIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBnZXRXb3JsZExhenkgfSBmcm9tICcuL2dldC13b3JsZC1sYXp5LmpzJztcbmltcG9ydCB7XG4gIHR5cGUgU3RvcFNsZWVwT3B0aW9ucyxcbiAgdHlwZSBTdG9wU2xlZXBSZXN1bHQsXG4gIHdha2VVcFJ1bixcbn0gZnJvbSAnLi9ydW5zLmpzJztcblxuLyoqXG4gKiBBIGBSZWFkYWJsZVN0cmVhbWAgZXh0ZW5kZWQgd2l0aCB3b3JrZmxvdy1zcGVjaWZpYyBoZWxwZXJzLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtPFIgPSBhbnk+ID0gUmVhZGFibGVTdHJlYW08Uj4gJiB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWlsIGluZGV4IChpbmRleCBvZiB0aGUgbGFzdCBrbm93biBjaHVuaywgMC1iYXNlZCkgb2YgdGhlXG4gICAqIHVuZGVybHlpbmcgd29ya2Zsb3cgc3RyZWFtLiBVc2VmdWwgZm9yIHJlc29sdmluZyBhIG5lZ2F0aXZlIGBzdGFydEluZGV4YFxuICAgKiBpbnRvIGFuIGFic29sdXRlIHBvc2l0aW9uIOKAlCBmb3IgZXhhbXBsZSwgd2hlbiBidWlsZGluZyByZWNvbm5lY3Rpb25cbiAgICogZW5kcG9pbnRzIHRoYXQgbmVlZCB0byBpbmZvcm0gdGhlIGNsaWVudCB3aGVyZSB0aGUgc3RyZWFtIHN0YXJ0cy5cbiAgICpcbiAgICogUmV0dXJucyBgLTFgIHdoZW4gbm8gY2h1bmtzIGhhdmUgYmVlbiB3cml0dGVuIHlldC5cbiAgICovXG4gIGdldFRhaWxJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgd29ya2Zsb3cncyByZWFkYWJsZSBzdHJlYW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbU9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZXNwYWNlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGlwbGUgc3RyZWFtcyBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHNhbWUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGluZGV4IG51bWJlciBvZiB0aGUgc3RhcnRpbmcgY2h1bmsgdG8gYmVnaW4gcmVhZGluZyB0aGUgc3RyZWFtIGZyb20uXG4gICAqIE5lZ2F0aXZlIHZhbHVlcyBzdGFydCBmcm9tIHRoZSBlbmQgKGUuZy4gLTMgcmVhZHMgdGhlIGxhc3QgMyBjaHVua3MpLlxuICAgKi9cbiAgc3RhcnRJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgZXhlY3V0aW9uXG4gICAqIGVudmlyb25tZW50IGlzIHBhdXNlZCAvIHRlcm1pbmF0ZWRcbiAgICogKGkuZS4gdXNpbmcgW2B3YWl0VW50aWwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9FeHRlbmRhYmxlRXZlbnQvd2FpdFVudGlsKSBvciBzaW1pbGFyKS5cbiAgICovXG4gIG9wcz86IFByb21pc2U8YW55PltdO1xuICAvKipcbiAgICogVGhlIGdsb2JhbCBvYmplY3QgdG8gdXNlIGZvciBoeWRyYXRpbmcgdHlwZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB7QGxpbmsgW2BnbG9iYWxUaGlzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZ2xvYmFsVGhpcyl9LlxuICAgKi9cbiAgZ2xvYmFsPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgY2xhc3MgZm9yIGEgd29ya2Zsb3cgcnVuLlxuICovXG5leHBvcnQgY2xhc3MgUnVuPFRSZXN1bHQ+IHtcbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBSdW48dW5rbm93bj4pIHtcbiAgICByZXR1cm4geyBydW5JZDogaW5zdGFuY2UucnVuSWQsIHJlc2lsaWVudFN0YXJ0OiBpbnN0YW5jZS4jcmVzaWxpZW50U3RhcnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHtcbiAgICBydW5JZDogc3RyaW5nO1xuICAgIHJlc2lsaWVudFN0YXJ0PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHJldHVybiBuZXcgUnVuKGRhdGEucnVuSWQsIHsgcmVzaWxpZW50U3RhcnQ6IGRhdGEucmVzaWxpZW50U3RhcnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBydW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ybGQgb2JqZWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICN3b3JsZFByb21pc2U6IFByb21pc2U8V29ybGQ+IHwgdW5kZWZpbmVkO1xuICBnZXQgI2xhenlXb3JsZFByb21pc2UoKSB7XG4gICAgaWYgKCF0aGlzLiN3b3JsZFByb21pc2UpIHRoaXMuI3dvcmxkUHJvbWlzZSA9IGdldFdvcmxkTGF6eSgpO1xuICAgIHJldHVybiB0aGlzLiN3b3JsZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGVuY3J5cHRpb24ga2V5IHJlc29sdXRpb24uIFJlc29sdmVkIG9uY2Ugb24gZmlyc3QgdXNlIGFuZFxuICAgKiByZXVzZWQgZm9yIHJldHVyblZhbHVlLCBnZXRSZWFkYWJsZSgpLCBldGMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2VuY3J5cHRpb25LZXlQcm9taXNlOiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBydW5fY3JlYXRlZCBmYWlsZWQgYW5kIHRoZSBydW4gbWF5IG5vdCBleGlzdCB5ZXQgKHRoZVxuICAgKiByZXNpbGllbnQgc3RhcnQgcGF0aCB3aWxsIGNyZWF0ZSBpdCB2aWEgcnVuX3N0YXJ0ZWQpLiBwb2xsUmV0dXJuVmFsdWVcbiAgICogcmV0cmllcyBvbiBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3Igb25seSB3aGVuIHRoaXMgZmxhZyBpcyBzZXQgc29cbiAgICogdGhhdCBub3JtYWwgcnVucyBmYWlsIGZhc3Qgb24gNDA0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNyZXNpbGllbnRTdGFydCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bklkOiBzdHJpbmcsIG9wdHM/OiB7IHJlc2lsaWVudFN0YXJ0PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5ydW5JZCA9IHJ1bklkO1xuICAgIHRoaXMuI3Jlc2lsaWVudFN0YXJ0ID0gb3B0cz8ucmVzaWxpZW50U3RhcnQgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGNhY2hlcyB0aGUgZW5jcnlwdGlvbiBrZXkgZm9yIHRoaXMgcnVuLlxuICAgKiBUaGUga2V5IGlzIHRoZSBzYW1lIGZvciB0aGUgbGlmZXRpbWUgb2YgYSBydW4sIHNvIGl0IG9ubHkgbmVlZHNcbiAgICogdG8gYmUgcmVzb2x2ZWQgb25jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjZ2V0RW5jcnlwdGlvbktleSgpOiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2UpIHtcbiAgICAgIHRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKTtcbiAgICAgICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgICAgIHJldHVybiByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZlciBmZXRjaGluZyB0aGUgcnVuIGFuZCBpdHMgZW5jcnlwdGlvbiBrZXkgdW50aWwgc2VyaWFsaXplZCBzdHJlYW0gZGF0YVxuICAgKiBpcyBhY3R1YWxseSByZWFkLiBBbiBlbXB0eSBvciBtZXRhZGF0YS1vbmx5IHN0cmVhbSBtdXN0IG5vdCBzdGFydCBhblxuICAgKiB1bm9ic2VydmVkIHJ1biBsb29rdXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2dldEVuY3J5cHRpb25LZXlMYXppbHkoKTogKCkgPT4gUHJvbWlzZTxDcnlwdG9LZXkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycnVwdHMgcGVuZGluZyBgc2xlZXAoKWAgY2FsbHMsIHJlc3VtaW5nIHRoZSB3b3JrZmxvdyBlYXJseS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyB0byB0YXJnZXQgc3BlY2lmaWMgc2xlZXAgY2FsbHMgYnkgY29ycmVsYXRpb24gSUQuXG4gICAqICAgSWYgbm90IHByb3ZpZGVkLCBhbGwgcGVuZGluZyBzbGVlcCBjYWxscyB3aWxsIGJlIGludGVycnVwdGVkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBTdG9wU2xlZXBSZXN1bHR9IG9iamVjdCBjb250YWluaW5nIHRoZSBudW1iZXIgb2Ygc2xlZXAgY2FsbHMgdGhhdCB3ZXJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgYXN5bmMgd2FrZVVwKG9wdGlvbnM/OiBTdG9wU2xlZXBPcHRpb25zKTogUHJvbWlzZTxTdG9wU2xlZXBSZXN1bHQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB3YWtlVXBSdW4oYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZSwgdGhpcy5ydW5JZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgYXN5bmMgY2FuY2VsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUodGhpcy5ydW5JZCwge1xuICAgICAgZXZlbnRUeXBlOiAncnVuX2NhbmNlbGxlZCcsXG4gICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgd29ya2Zsb3cgcnVuIGV4aXN0cy5cbiAgICovXG4gIGdldCBleGlzdHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnNcbiAgICAgICAgLmdldCh0aGlzLnJ1bklkLCB7IHJlc29sdmVEYXRhOiAnbm9uZScgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IuaXMoZXJyb3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHN0YXR1cygpOiBQcm9taXNlPFdvcmtmbG93UnVuU3RhdHVzPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLnN0YXR1cylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICogUG9sbHMgdGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZSB1bnRpbCBpdCBpcyBjb21wbGV0ZWQuXG4gICAqL1xuICBnZXQgcmV0dXJuVmFsdWUoKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jcG9sbFJldHVyblZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgZ2V0IHdvcmtmbG93TmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi53b3JrZmxvd05hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGdldCBjcmVhdGVkQXQoKTogUHJvbWlzZTxEYXRlPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNyZWF0ZWRBdClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIHN0YXJ0ZWQgZXhlY3V0aW9uLlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgd29ya2Zsb3cgaGFzIG5vdCBzdGFydGVkIHlldC5cbiAgICovXG4gIGdldCBzdGFydGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLnN0YXJ0ZWRBdClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIGNvbXBsZXRlZC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICovXG4gIGdldCBjb21wbGV0ZWRBdCgpOiBQcm9taXNlPERhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4uY29tcGxldGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVhZGFibGUgc3RyZWFtIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBnZXQgcmVhZGFibGUoKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVhZGFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHdvcmtmbG93IHJ1bidzIGRlZmF1bHQgcmVhZGFibGUgc3RyZWFtLCB3aGljaCByZWFkcyBjaHVua3NcbiAgICogd3JpdHRlbiB0byB0aGUgY29ycmVzcG9uZGluZyB3cml0YWJsZSBzdHJlYW0ge0BsaW5rIGdldFdyaXRhYmxlfS5cbiAgICpcbiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBoYXMgYW4gYWRkaXRpb25hbCB7QGxpbmsgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbS5nZXRUYWlsSW5kZXggfCBnZXRUYWlsSW5kZXgoKX1cbiAgICogaGVscGVyIHRoYXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qga25vd24gY2h1bmsuIFRoaXMgaXMgdXNlZnVsIHdoZW5cbiAgICogYnVpbGRpbmcgcmVjb25uZWN0aW9uIGVuZHBvaW50cyB0aGF0IG5lZWQgdG8gaW5mb3JtIGNsaWVudHMgd2hlcmUgdGhlXG4gICAqIHN0cmVhbSBzdGFydHMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSByZWFkYWJsZSBzdHJlYW0uXG4gICAqIEByZXR1cm5zIEEgYFdvcmtmbG93UmVhZGFibGVTdHJlYW1gIGZvciB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0UmVhZGFibGU8UiA9IGFueT4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbU9wdGlvbnMgPSB7fVxuICApOiBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtPFI+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIGNvbnN0IHsgb3BzID0gW10sIGdsb2JhbCA9IGdsb2JhbFRoaXMsIHN0YXJ0SW5kZXgsIG5hbWVzcGFjZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lID0gZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCh0aGlzLnJ1bklkLCBuYW1lc3BhY2UpO1xuICAgIC8vIFRoZSByZXNvbHZlciBzdGFydHMgb25seSB3aGVuIHRoZSBkZXNlcmlhbGl6ZSBzdHJlYW0gc2VlcyBpdHMgZmlyc3RcbiAgICAvLyBjaHVuaywgc28gY3JlYXRpbmcgb3IgcHJvYmluZyBhbiBlbXB0eSBzdHJlYW0gY2Fubm90IHJlamVjdCBpbiB0aGVcbiAgICAvLyBiYWNrZ3JvdW5kLlxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5TGF6aWx5KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gZ2V0RXh0ZXJuYWxSZXZpdmVycyhnbG9iYWwsIG9wcywgdGhpcy5ydW5JZCwgZW5jcnlwdGlvbktleSlcbiAgICAgIC5SZWFkYWJsZVN0cmVhbSEoe1xuICAgICAgbmFtZSxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgfSkgYXMgUmVhZGFibGVTdHJlYW08Uj47XG5cbiAgICBjb25zdCB3b3JsZFByb21pc2UgPSB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgIGNvbnN0IHJ1bklkID0gdGhpcy5ydW5JZDtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdHJlYW0sIHtcbiAgICAgIGdldFRhaWxJbmRleDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgd29ybGRQcm9taXNlO1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgd29ybGQuc3RyZWFtcy5nZXRJbmZvKHJ1bklkLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIGluZm8udGFpbEluZGV4O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xscyB0aGUgd29ya2Zsb3cgcmV0dXJuIHZhbHVlIGV2ZXJ5IDEgc2Vjb25kIHVudGlsIGl0IGlzIGNvbXBsZXRlZC5cbiAgICogQGludGVybmFsXG4gICAqIEByZXR1cm5zIFRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBhc3luYyAjcG9sbFJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcblxuICAgIC8vIFdoZW4gcmVzaWxpZW50U3RhcnQgaXMgdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heVxuICAgIC8vIG5vdCBleGlzdCB5ZXQuIFJldHJ5IG9uIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciB1cCB0byAzIHRpbWVzXG4gICAgLy8gKDFzICsgM3MgKyA2cyA9IDEwcyB0b3RhbCkgdG8gZ2l2ZSB0aGUgcXVldWUgdGltZSB0byBkZWxpdmVyXG4gICAgLy8gYW5kIHRoZSBydW50aW1lIHRvIGNyZWF0ZSB0aGUgcnVuIHZpYSBydW5fc3RhcnRlZC5cbiAgICAvLyBXaGVuIHJlc2lsaWVudFN0YXJ0IGlzIGZhbHNlLCA0MDQgaXMgYSByZWFsIGVycm9yIOKAlCBmYWlsIGZhc3QuXG4gICAgbGV0IG5vdEZvdW5kUmV0cmllcyA9IDA7XG4gICAgY29uc3QgTk9UX0ZPVU5EX01BWF9SRVRSSUVTID0gdGhpcy4jcmVzaWxpZW50U3RhcnQgPyAzIDogMDtcbiAgICBjb25zdCBOT1RfRk9VTkRfREVMQVlTID0gWzFfMDAwLCAzXzAwMCwgNl8wMDBdO1xuXG4gICAgLy8gTk9URTogd2hlbiB0aGlzIHBvbGwgcnVucyBpbnNpZGUgYSBzdGVwIChlLmcuIHRoZSBzdGVwIHRoYXQgYSBwYXJlbnRcbiAgICAvLyB3b3JrZmxvdyB1c2VzIHRvIGF3YWl0IGEgY2hpbGQgd29ya2Zsb3cncyBgcmV0dXJuVmFsdWVgKSwgaXQgYmxvY2tzXG4gICAgLy8gYSBxdWV1ZSB3b3JrZXIgc2xvdCBmb3IgYXMgbG9uZyBhcyB0aGUgY2hpbGQgcnVuIHRha2VzIHRvIGZpbmlzaC5cbiAgICAvLyBXb3JrZXItYmFzZWQgd29ybGRzIGxpa2UgYHdvcmxkLXBvc3RncmVzYCBtdXN0IGJlIHNpemVkIHRvIGNvdmVyIHRoZVxuICAgIC8vIHBlYWsgbnVtYmVyIG9mIHN1Y2ggcG9sbHMgaW4gZmxpZ2h0IOKAlCBzZWUgdGhlIGBxdWV1ZUNvbmN1cnJlbmN5YFxuICAgIC8vIGRlZmF1bHQgb24gdGhlIFBvc3RncmVzIHdvcmxkIGFuZCB0aGUgbm90ZXMgaW4gdGhlIGVhZ2VyLXByb2Nlc3NpbmdcbiAgICAvLyBjaGFuZ2Vsb2cgZm9yIGRldGFpbHMuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpO1xuXG4gICAgICAgIGlmIChydW4uc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBhd2FpdCB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KCk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgICAgICAgcnVuLm91dHB1dCxcbiAgICAgICAgICAgIHRoaXMucnVuSWQsXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydW4uc3RhdHVzID09PSAnY2FuY2VsbGVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yKHRoaXMucnVuSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCBydW4gZXJyb3Igc28gdGhlIG9yaWdpbmFsIHRocm93biB2YWx1ZVxuICAgICAgICAgIC8vICh3aXRoIGl0cyB0eXBlIGlkZW50aXR5LCBjYXVzZSBjaGFpbiwgZXRjLikgaXMgc2V0IGFzIHRoZVxuICAgICAgICAgIC8vIGBjYXVzZWAgb24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICAgICAgICAgIGxldCBoeWRyYXRlZEVycm9yOiB1bmtub3duO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBoeWRyYXRlZEVycm9yID0gYXdhaXQgaHlkcmF0ZVJ1bkVycm9yKFxuICAgICAgICAgICAgICBydW4uZXJyb3IsXG4gICAgICAgICAgICAgIHRoaXMucnVuSWQsXG4gICAgICAgICAgICAgIGVuY3J5cHRpb25LZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBJZiBoeWRyYXRpb24gZmFpbHMsIHN1cmZhY2UgYSBnZW5lcmljIGZhbGxiYWNrIHJhdGhlciB0aGFuXG4gICAgICAgICAgICAvLyBsZWF2aW5nIHRoZSB1c2VyIHdpdGggYSByYXcgVWludDhBcnJheS4gVGhlIHJ1bidzIGVycm9yQ29kZVxuICAgICAgICAgICAgLy8gaXMgc3RpbGwgcHJlc2VydmVkIG9uIHRoZSB0aHJvd24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgICAgICAgIGh5ZHJhdGVkRXJyb3IgPSBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBoeWRyYXRlIHdvcmtmbG93IHJ1biBlcnJvcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcih0aGlzLnJ1bklkLCBoeWRyYXRlZEVycm9yLCB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHJ1bi5lcnJvckNvZGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSdW4gbm90IGNvbXBsZXRlZCB5ZXQg4oCUIHNsZWVwIGFuZCBwb2xsIGFnYWluLlxuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvcih0aGlzLnJ1bklkLCBydW4uc3RhdHVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLmlzKGVycm9yKSkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDFfMDAwKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvci5pcyhlcnJvcikgJiZcbiAgICAgICAgICBub3RGb3VuZFJldHJpZXMgPCBOT1RfRk9VTkRfTUFYX1JFVFJJRVNcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVsYXkgPSBOT1RfRk9VTkRfREVMQVlTW25vdEZvdW5kUmV0cmllc10hO1xuICAgICAgICAgIG5vdEZvdW5kUmV0cmllcysrO1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgYFJ1bmAgb2JqZWN0IGZvciBhIGdpdmVuIHJ1biBJRC5cbiAqXG4gKiBAcGFyYW0gcnVuSWQgLSBUaGUgd29ya2Zsb3cgcnVuIElEIG9idGFpbmVkIGZyb20ge0BsaW5rIHN0YXJ0fS5cbiAqIEByZXR1cm5zIEEgYFJ1bmAgb2JqZWN0LlxuICogQHRocm93cyBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IgaWYgdGhlIHJ1biBJRCBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW48VFJlc3VsdD4ocnVuSWQ6IHN0cmluZyk6IFJ1bjxUUmVzdWx0PiB7XG4gIHJldHVybiBuZXcgUnVuKHJ1bklkKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,KAAK,EAGV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAyCzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,MAAM,EACN,GAAG,EACH,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,GACN,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAsE5B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GACnB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAqkCrC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,KAAK,EAGV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AA4CzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,MAAM,EACN,GAAG,EACH,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,GACN,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AA+F5B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GACnB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAymCrC"}