@pipeline-builder/pipeline-data 4.3.3 → 4.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/crud-service.d.ts +7 -0
- package/lib/api/crud-service.js +14 -3
- package/lib/api/pipeline-step-resolution.d.ts +111 -0
- package/lib/api/pipeline-step-resolution.js +163 -0
- package/lib/api/plugin-consumption-policy.d.ts +8 -2
- package/lib/api/plugin-consumption-policy.js +20 -3
- package/lib/api/plugin-resolution.d.ts +26 -9
- package/lib/api/plugin-resolution.js +51 -33
- package/lib/api/reporting/analytics-queries.d.ts +6 -4
- package/lib/api/reporting/analytics-queries.js +11 -11
- package/lib/api/reporting/deploy-rollup.d.ts +2 -0
- package/lib/api/reporting/deploy-rollup.js +5 -1
- package/lib/api/reporting/failure-classifier.d.ts +2 -6
- package/lib/api/reporting/failure-classifier.js +22 -1
- package/lib/api/reporting/ingest.js +73 -16
- package/lib/api/reporting/plugin-exposure.d.ts +261 -15
- package/lib/api/reporting/plugin-exposure.js +423 -38
- package/lib/api/reporting/stakeholder/compose.d.ts +1 -1
- package/lib/api/reporting/stakeholder/compose.js +30 -1
- package/lib/api/reporting/stakeholder/store.d.ts +16 -2
- package/lib/api/reporting/stakeholder/store.js +17 -6
- package/lib/api/reporting/types.d.ts +80 -1
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/reporting-service.d.ts +11 -4
- package/lib/api/reporting-service.js +106 -43
- package/lib/api/soft-delete-sweep.d.ts +8 -18
- package/lib/api/soft-delete-sweep.js +35 -5
- package/lib/api/version-references.d.ts +80 -0
- package/lib/api/version-references.js +135 -0
- package/lib/core/query-filters.d.ts +3 -3
- package/lib/core/query-filters.js +1 -1
- package/lib/database/drizzle-schema.d.ts +1238 -143
- package/lib/database/drizzle-schema.js +6 -3
- package/lib/database/index.d.ts +1 -1
- package/lib/database/index.js +2 -2
- package/lib/database/schema/ecosystem.d.ts +53 -0
- package/lib/database/schema/ecosystem.js +14 -3
- package/lib/database/schema/pipeline.d.ts +38 -0
- package/lib/database/schema/pipeline.js +20 -2
- package/lib/database/schema/plugin.d.ts +265 -0
- package/lib/database/schema/plugin.js +34 -3
- package/lib/database/schema/reporting-analytics.d.ts +786 -4
- package/lib/database/schema/reporting-analytics.js +111 -5
- package/lib/index.d.ts +5 -3
- package/lib/index.js +5 -3
- package/lib/testing/exports.json +24 -0
- package/package.json +4 -3
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
*/
|
|
50
50
|
import { and, eq, gte, inArray, lt, sql } from 'drizzle-orm';
|
|
51
51
|
import { FAILURE_CATEGORY_LABELS, isTeamActionable } from './failure-classifier.js';
|
|
52
|
+
import { liveExposurePredicate } from './plugin-exposure.js';
|
|
52
53
|
import { schema } from '../../database/drizzle-schema.js';
|
|
53
54
|
import { withTenantTxRead } from '../../database/tenancy.js';
|
|
54
55
|
/** The org predicate: one org, or a rollup set. */
|
|
@@ -405,10 +406,7 @@ export async function getPluginVulnerabilities(scope, limit = 50) {
|
|
|
405
406
|
FROM plugin_vuln_exposure v
|
|
406
407
|
LEFT JOIN pipelines p ON p.id::text = v.pipeline_id
|
|
407
408
|
WHERE v.org_id ${scope.orgIds?.length ? sql `= ANY(${scope.orgIds})` : sql `= ${scope.orgId}`}
|
|
408
|
-
AND v
|
|
409
|
-
-- An acceptance past its deadline is not an acceptance.
|
|
410
|
-
AND (v.triage_state NOT IN ('accepted', 'false_positive')
|
|
411
|
-
OR (v.triage_state = 'accepted' AND v.accepted_until IS NOT NULL AND v.accepted_until <= ${now}))
|
|
409
|
+
AND ${liveExposurePredicate(now, 'v')}
|
|
412
410
|
ORDER BY v.critical_count DESC, v.high_count DESC
|
|
413
411
|
LIMIT ${limit}
|
|
414
412
|
`));
|
|
@@ -561,19 +559,21 @@ export async function getUntrackedPipelines(scope) {
|
|
|
561
559
|
* NOW. A Critical that was open last Tuesday and is fixed today is not something to
|
|
562
560
|
* put in front of a manager, and `fixed_at` is what says so.
|
|
563
561
|
*
|
|
564
|
-
*
|
|
565
|
-
*
|
|
566
|
-
*
|
|
567
|
-
*
|
|
562
|
+
* The SAME live predicate as the vulnerability section (`liveExposurePredicate`):
|
|
563
|
+
* an acceptance still in force and a false positive are excluded — someone with
|
|
564
|
+
* the authority to decide has done so in writing — while an acceptance PAST its
|
|
565
|
+
* deadline counts again, because that is what the deadline was for. The two
|
|
566
|
+
* readers once disagreed (this one kept false positives and dropped expired
|
|
567
|
+
* acceptances), so the panel and the needs-attention list contradicted each other.
|
|
568
568
|
*/
|
|
569
569
|
export async function getVulnerablePipelines(scope) {
|
|
570
|
+
const now = new Date();
|
|
570
571
|
const rows = await withTenantTxRead((tx) => tx.execute(sql `
|
|
571
572
|
SELECT DISTINCT pipeline_id
|
|
572
573
|
FROM plugin_vuln_exposure
|
|
573
574
|
WHERE org_id ${scope.orgIds?.length ? sql `= ANY(${scope.orgIds})` : sql `= ${scope.orgId}`}
|
|
574
|
-
AND fixed_at IS NULL
|
|
575
575
|
AND critical_count > 0
|
|
576
|
-
AND
|
|
576
|
+
AND ${liveExposurePredicate(now)}
|
|
577
577
|
`));
|
|
578
578
|
return rowsOf(rows).map((r) => String(r.pipeline_id));
|
|
579
579
|
}
|
|
@@ -624,4 +624,4 @@ function isoOrNull(v) {
|
|
|
624
624
|
const d = v instanceof Date ? v : new Date(String(v));
|
|
625
625
|
return Number.isNaN(d.getTime()) ? null : d.toISOString();
|
|
626
626
|
}
|
|
627
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXF1ZXJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9hbmFseXRpY3MtcXVlcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVc3RCxtREFBbUQ7QUFDbkQsU0FBUyxZQUFZLENBQUMsR0FBa0MsRUFBRSxLQUFxQjtJQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUM1QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBWSxFQUFFLEtBQUssQ0FBQyxLQUFjLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBbUJEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFxQixFQUFFLEtBQUssR0FBRyxFQUFFO0lBQzFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBOzs7Ozs7Ozs7O3VCQVVyQyxL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QUN0RSxTQUFTLE1BQU0sQ0FBQyxNQUFlO0lBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQXdDLENBQUM7SUFDM0UsTUFBTSxJQUFJLEdBQUksTUFBNkIsRUFBRSxJQUFJLENBQUM7SUFDbEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFzQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0UsQ0FBQztBQUVELHNFQUFzRTtBQUN0RSxTQUFTLEdBQUcsQ0FBQyxDQUFVO0lBQ3JCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLENBQVU7SUFDM0IsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBxdWVyaWVzIHRoZSBiZXNwb2tlIHJlcG9ydCBzZWN0aW9ucyByZWFkLlxuICpcbiAqIEFsbCBvZiB0aGVtIGdvIHRocm91Z2ggYGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzYCwgYGRvcmFfZGVwbG95bWVudHNgLFxuICogYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCBvciBgcGx1Z2luX3Z1bG5fZXhwb3N1cmVgIOKAlCBuZXZlciByYXdcbiAqIGBwaXBlbGluZV9ldmVudHNgLiBUaGF0IGlzIHRoZSB3aG9sZSBwb2ludCBvZiB0aG9zZSB0YWJsZXM6IGEgcXVhcnRlcmx5IHJlcG9ydFxuICogb3ZlciBhIGJ1c3kgb3JnIGNvc3RzIGEgZmV3IGh1bmRyZWQgcm93cywgYW5kIGtlZXBzIHdvcmtpbmcgYWZ0ZXIgcmV0ZW50aW9uIGhhc1xuICogc3dlcHQgdGhlIGV2ZW50cy5cbiAqXG4gKiBUV08gUlVMRVMgRVZFUlkgUVVFUlkgSEVSRSBGT0xMT1dTOlxuICpcbiAqICAtIE5PVEhJTkcgSVMgUEVSLVBFUlNPTi4gRXZlcnkgYWdncmVnYXRlIGlzIHBlciBwaXBlbGluZSwgcGVyIHN0YWdlLCBwZXJcbiAqICAgIGNhdGVnb3J5IG9yIHBlciBlbnZpcm9ubWVudC4gVGhlIHNlY3Rpb24gcmVnaXN0cnkgcmVmdXNlcyBhIHBlci1wZXJzb24gaWQgYXRcbiAqICAgIHJlZ2lzdHJhdGlvbjsgdGhlc2UgcXVlcmllcyBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyB0byByZWdpc3Rlci5cbiAqICAtIEEgWkVSTyBBTkQgQSBCTElORCBTUE9UIEFSRSBESUZGRVJFTlQuIFdoZXJlIGEgbnVtYmVyIGNhbiBiZSBhYnNlbnQgZm9yIGxhY2tcbiAqICAgIG9mIGRhdGEgcmF0aGVyIHRoYW4gbGFjayBvZiBhY3Rpdml0eSwgdGhlIHNoYXBlIGNhcnJpZXMgdGhhdCAoYG51bGxgLCBhXG4gKiAgICBgY292ZXJhZ2VgIGNvdW50LCBhbiBleHBsaWNpdCByZWFzb24pIGluc3RlYWQgb2YgY29sbGFwc2luZyB0byAwLlxuICpcbiAqIFJFQURTIEdPIFRPIFRIRSBSRVBMSUNBIFdIRU4gT05FIEVYSVNUUy4gRXZlcnkgcXVlcnkgYmVsb3cgcnVucyB0aHJvdWdoXG4gKiBgd2l0aFRlbmFudFR4UmVhZGAsIHRoZSByZWFkLW9ubHkgdmFyaWFudCBvZiBgd2l0aFRlbmFudFR4YC4gSXQgc2V0cyB0aGVcbiAqIGlkZW50aWNhbCBSTFMgR1VDcywgYWRkcyBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAsIGFuZCBmYWxscyBiYWNrIHRvIHRoZVxuICogcHJpbWFyeSBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZXJlIGlzIG5vIHJlcGxpY2EsIHRoZSBraWxsIHN3aXRjaCBpcyBvZmYsXG4gKiByZXBsYXkgbGFnIGlzIGJleW9uZCBpdHMgdGhyZXNob2xkLCB0aGUgcmVxdWVzdCBoYXMgYWxyZWFkeSB3cml0dGVuLCBvciB0aGVyZVxuICogaXMgbm8gdGVuYW50IGNvbnRleHQg4oCUIHNvIHRoaXMgaXMgYSBuby1vcCB1bnRpbCBgREJfUkVBRF9IT1NUYCBpcyBjb25maWd1cmVkLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgV0FTIFRIRSBGSVJTVCBUTyBPUFQgSU4uIFRocmVlIGNvbmRpdGlvbnMgZGVjaWRlIHdoZXRoZXIgYVxuICogcXVlcnkgbWF5IGxlYXZlIHRoZSBwcmltYXJ5LCBhbmQgdGhpcyBmaWxlIHNhdGlzZmllcyBhbGwgdGhyZWUgYnlcbiAqIGNvbnN0cnVjdGlvbiDigJQgc28gdGhleSBhcmUgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gY2l0ZWQsIG5vdyB0aGF0IHRoZSBwbGFuXG4gKiB0aGF0IGludHJvZHVjZWQgdGhlbSBpcyByZXRpcmVkOlxuICpcbiAqICAgLSBOb3RoaW5nIGhlcmUgd3JpdGVzLiBUaGlydGVlbiBhZ2dyZWdhdGUgU0VMRUNUcywgbm8gSU5TRVJULCBubyBVUERBVEUsIG5vXG4gKiAgICAgYFNFTEVDVCDigKYgRk9SIFVQREFURWAsIG5vIGFkdmlzb3J5IGxvY2sg4oCUIHNvIG5vbmUgb2YgdGhlIGZvdXIgY2FsbCBzaXRlc1xuICogICAgIHRoZSBQaGFzZSAwYSBhdWRpdCBmb3VuZCBoaWRpbmcgYmVoaW5kIHJlYWQtbG9va2luZyBjb2RlLlxuICogICAtIE5vdGhpbmcgaGVyZSBmZWVkcyBhbiBBVVRIT1JJWkFUSU9OIGRlY2lzaW9uLiBUaGVzZSBhcmUgZGFzaGJvYXJkXG4gKiAgICAgYWdncmVnYXRlczsgYSBzdGFsZSBwZXJtaXNzaW9uIGNoZWNrIGlzIGEgc2VjdXJpdHkgYnVnLCBhIHN0YWxlIGNoYXJ0IGlzXG4gKiAgICAgYSBzdGFsZSBjaGFydC5cbiAqICAgLSBOb2JvZHkgaXMgYWJvdXQgdG8gQUNUIG9uIHRoZSByZXN1bHQuIEEgdXNlciB3aG8ganVzdCBjcmVhdGVkIGEgcGlwZWxpbmVcbiAqICAgICBsb29rcyBmb3IgaXQgaW4gYSBsaXN0LCBub3QgaW4gYSAzMC1kYXkgZmFpbHVyZS1yYXRlIHJvbGx1cC5cbiAqXG4gKiBBbmQgaXQgaXMgdGhlIGJlc3Qgb2ZmbG9hZCBjYW5kaWRhdGUgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBpcyBzYWZlOiB0aGVzZVxuICogYXJlIHRoZSBoZWF2aWVzdCBxdWVyaWVzIGluIHRoZSBwYWNrYWdlLCBzY2FubmluZyB0aW1lIHJhbmdlcyByYXRoZXIgdGhhblxuICogZmV0Y2hpbmcgcm93cyBieSBpZC5cbiAqXG4gKiBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAgYXBwbGllcyBvbiB0aGUgUFJJTUFSWSBwYXRoIHRvbywgc28gaWYgYSB3cml0ZVxuICogaXMgZXZlciBhZGRlZCBiZWxvdyBpdCBmYWlscyBoZXJlLCBsb3VkbHksIHJhdGhlciB0aGFuIGF0IHdoaWNoZXZlciB0YXJnZXRcbiAqIHRoZSByZWFkIGhhcHBlbmVkIHRvIGxhbmQgb24uXG4gKi9cblxuaW1wb3J0IHsgYW5kLCBlcSwgZ3RlLCBpbkFycmF5LCBsdCwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgRkFJTFVSRV9DQVRFR09SWV9MQUJFTFMsIGlzVGVhbUFjdGlvbmFibGUgfSBmcm9tICcuL2ZhaWx1cmUtY2xhc3NpZmllci5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZhaWx1cmVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeFJlYWQgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIFRoZSB3aW5kb3cgYW5kIG9yZyBzY29wZSBldmVyeSBxdWVyeSB0YWtlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzU2NvcGUge1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogYFtzZWxmLCAuLi5kZXNjZW5kYW50c11gIGZvciBhIHJvbGx1cDsgdW5kZWZpbmVkID0gdGhpcyBvcmcgb25seS4gKi9cbiAgb3JnSWRzPzogc3RyaW5nW107XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbn1cblxuLyoqIFRoZSBvcmcgcHJlZGljYXRlOiBvbmUgb3JnLCBvciBhIHJvbGx1cCBzZXQuICovXG5mdW5jdGlvbiBvcmdQcmVkaWNhdGUoY29sOiBQYXJhbWV0ZXJzPHR5cGVvZiBpbkFycmF5PlswXSwgc2NvcGU6IEFuYWx5dGljc1Njb3BlKSB7XG4gIHJldHVybiBzY29wZS5vcmdJZHMgJiYgc2NvcGUub3JnSWRzLmxlbmd0aCA+IDBcbiAgICA/IGluQXJyYXkoY29sLCBzY29wZS5vcmdJZHMpXG4gICAgOiBlcShjb2wgYXMgbmV2ZXIsIHNjb3BlLm9yZ0lkIGFzIG5ldmVyKTtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSdzIGxpbmUgaW4gdGhlIGJyZWFrZG93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVCcmVha2Rvd25Sb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcnVuczogbnVtYmVyO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIHN1Y2Nlc3NQY3Q6IG51bWJlciB8IG51bGw7XG4gIHA5NU1zOiBudW1iZXIgfCBudWxsO1xuICBkZXBsb3lzOiBudW1iZXI7XG4gIC8qKiBUaGUgbW9zdCByZWNlbnQgZmFpbHVyZSdzIGRheSBhbmQgc3RhZ2UsIGZvciBcIndoYXQgdG8gbG9vayBhdCBmaXJzdFwiLiAqL1xuICBsYXN0RmFpbHVyZUF0OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0RmFpbHVyZVN0YWdlOiBzdHJpbmcgfCBudWxsO1xuICBidWlsZFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItcGlwZWxpbmUgZGVsaXZlcnksIHdvcnN0IGZpcnN0LlxuICpcbiAqIFdPUlNUIEZJUlNULCBhbmQgY2FwcGVkLCBiZWNhdXNlIHRoZSBwb2ludCBvZiB0aGUgc2VjdGlvbiBpcyBcIndoZXJlIHNob3VsZFxuICogYXR0ZW50aW9uIGdvXCIuIEEgbGlzdCBzb3J0ZWQgYnkgbmFtZSwgb3IgYW4gdW5ib3VuZGVkIG9uZSwgaXMgYSBkYXRhIGR1bXA6IHRoZVxuICogbGVhZCBzdGlsbCBoYXMgdG8gZmluZCB0aGUgcHJvYmxlbSwgd2hpY2ggaXMgdGhlIHdvcmsgdGhlIHJlcG9ydCB3YXMgc3VwcG9zZWQgdG9cbiAqIGRvLiBUaWVzIGJyZWFrIG9uIHZvbHVtZSwgc28gYSA1MCUtc3VjY2VzcyBwaXBlbGluZSB0aGF0IHJhbiB0d2ljZSBkb2VzIG5vdFxuICogb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gKlxuICogYHN1Y2Nlc3NQY3RgIGlzIE5VTEwgZm9yIGEgcGlwZWxpbmUgd2l0aCBubyBydW5zIGluIHRoZSB3aW5kb3cg4oCUIG5vdCAwLiBBXG4gKiBwaXBlbGluZSBub2JvZHkgcmFuIGlzIG5vdCBhIHBpcGVsaW5lIHRoYXQgZmFpbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVCcmVha2Rvd24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDEwKTogUHJvbWlzZTxQaXBlbGluZUJyZWFrZG93blJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCB0b3RhbHMgQVMgKFxuICAgICAgU0VMRUNUXG4gICAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICAgIFNVTShyLnJ1bnMpOjppbnQgQVMgcnVucyxcbiAgICAgICAgU1VNKHIuc3VjY2VlZGVkKTo6aW50IEFTIHN1Y2NlZWRlZCxcbiAgICAgICAgU1VNKHIuZmFpbGVkKTo6aW50IEFTIGZhaWxlZCxcbiAgICAgICAgTUFYKHIucDk1X21zKTo6aW50IEFTIHA5NV9tcyxcbiAgICAgICAgU1VNKHIuYnVpbGRfc2Vjb25kcyk6OmludCBBUyBidWlsZF9zZWNvbmRzXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgLS0gVGhlIHBpcGVsaW5lLWxldmVsIGdyYWluIG9ubHk6IHN1bW1pbmcgdGhlIHN0YWdlIHJvd3MgdG9vIHdvdWxkIGNvdW50XG4gICAgICAgIC0tIGV2ZXJ5IHJ1biBvbmNlIHBlciBzdGFnZS5cbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSByLnBpcGVsaW5lX2lkXG4gICAgKSxcbiAgICBkZXBsb3lzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgQ09VTlQoKik6OmludCBBUyBkZXBsb3lzXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdWNjZWVkZWQgPSB0cnVlXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICksXG4gICAgbGFzdF9mYWlsIEFTIChcbiAgICAgIC0tIFRoZSBtb3N0IHJlY2VudCBmYWlsaW5nIFNUQUdFIHJvdyBwZXIgcGlwZWxpbmU6IHdoYXQgdG8gbG9vayBhdCBmaXJzdC5cbiAgICAgIFNFTEVDVCBESVNUSU5DVCBPTiAocGlwZWxpbmVfaWQpIHBpcGVsaW5lX2lkLCBkYXksIHN0YWdlX25hbWVcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN0YWdlX25hbWUgPD4gJycgQU5EIGZhaWxlZCA+IDBcbiAgICAgIE9SREVSIEJZIHBpcGVsaW5lX2lkLCBkYXkgREVTQywgZmFpbGVkIERFU0NcbiAgICApXG4gICAgU0VMRUNUXG4gICAgICB0LnBpcGVsaW5lX2lkLFxuICAgICAgcC5waXBlbGluZV9uYW1lLFxuICAgICAgcC5wcm9qZWN0LFxuICAgICAgdC5ydW5zLCB0LnN1Y2NlZWRlZCwgdC5mYWlsZWQsIHQucDk1X21zLCB0LmJ1aWxkX3NlY29uZHMsXG4gICAgICBDT0FMRVNDRShkLmRlcGxveXMsIDApIEFTIGRlcGxveXMsXG4gICAgICBmLmRheSBBUyBsYXN0X2ZhaWx1cmVfYXQsXG4gICAgICBmLnN0YWdlX25hbWUgQVMgbGFzdF9mYWlsdXJlX3N0YWdlLFxuICAgICAgQ0FTRSBXSEVOIHQucnVucyA+IDAgVEhFTiBST1VORCgodC5zdWNjZWVkZWQ6Om51bWVyaWMgLyB0LnJ1bnMpICogMTAwLCAxKSBFTFNFIE5VTEwgRU5EIEFTIHN1Y2Nlc3NfcGN0XG4gICAgRlJPTSB0b3RhbHMgdFxuICAgIExFRlQgSk9JTiBkZXBsb3lzIGQgT04gZC5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gbGFzdF9mYWlsIGYgT04gZi5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHQucGlwZWxpbmVfaWRcbiAgICAtLSBXb3JzdCBmaXJzdDogbG93ZXN0IHN1Y2Nlc3MgcmF0ZSwgdGhlbiBtb3N0IHJ1bnMsIHNvIGEgNTAlIHBpcGVsaW5lIHRoYXQgcmFuXG4gICAgLS0gdHdpY2UgZG9lcyBub3Qgb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gICAgT1JERVIgQlkgc3VjY2Vzc19wY3QgQVNDIE5VTExTIExBU1QsIHQucnVucyBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcHJvamVjdDogKHIucHJvamVjdCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHJ1bnM6IG51bShyLnJ1bnMpLFxuICAgIHN1Y2NlZWRlZDogbnVtKHIuc3VjY2VlZGVkKSxcbiAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgc3VjY2Vzc1BjdDogci5zdWNjZXNzX3BjdCA9PT0gbnVsbCA/IG51bGwgOiBOdW1iZXIoci5zdWNjZXNzX3BjdCksXG4gICAgcDk1TXM6IHIucDk1X21zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA5NV9tcyksXG4gICAgZGVwbG95czogbnVtKHIuZGVwbG95cyksXG4gICAgbGFzdEZhaWx1cmVBdDogaXNvT3JOdWxsKHIubGFzdF9mYWlsdXJlX2F0KSxcbiAgICBsYXN0RmFpbHVyZVN0YWdlOiAoci5sYXN0X2ZhaWx1cmVfc3RhZ2UgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBidWlsZFNlY29uZHM6IG51bShyLmJ1aWxkX3NlY29uZHMpLFxuICB9KSk7XG59XG5cbi8qKiBPbmUgZmFpbHVyZSBjYXRlZ29yeSdzIHNoYXJlIG9mIHRoZSBwZXJpb2QuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhaWx1cmVDYXRlZ29yeVJvdyB7XG4gIGNhdGVnb3J5OiBGYWlsdXJlQ2F0ZWdvcnk7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSB0ZWFtIGNhbiBhY3Qgb24gaXQsIG9yIGl0IGhhcHBlbmVkIHRvIHRoZW0uICovXG4gIHRlYW1BY3Rpb25hYmxlOiBib29sZWFuO1xuICAvKiogQ2hhbmdlIHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGluIGZhaWx1cmVzLiAqL1xuICBjaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgcGlwZWxpbmVzIGl0IGhpdCBoYXJkZXN0LiAqL1xuICB0b3BQaXBlbGluZXM6IEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT47XG59XG5cbi8qKlxuICogRmFpbHVyZXMgYnkgY2F0ZWdvcnksIHdpdGggdGhlIHByZXZpb3VzIHBlcmlvZCdzIGNvdW50cyBmb3IgdGhlIHRyZW5kLlxuICpcbiAqIFNQTElUUyBBQ1RJT05BQkxFIEZST00gTk9ULiBBIHdlZWsgd2hvc2UgZmFpbHVyZXMgd2VyZSBhbGwgY2xvdWQgdGhyb3R0bGluZyBpcyBhXG4gKiBkaWZmZXJlbnQgY29udmVyc2F0aW9uIGZyb20gb25lIHdob3NlIGZhaWx1cmVzIHdlcmUgYWxsIGJyb2tlbiB0ZXN0cywgYW5kXG4gKiBwcmVzZW50aW5nIHRoZW0gaW4gb25lIHJhbmtlZCBsaXN0IGludml0ZXMgZXhhY3RseSB0aGUgd3JvbmcgY29uY2x1c2lvbiDigJQgYSB0ZWFtXG4gKiBiZWluZyBhc2tlZCB0byBmaXggYW4gQVdTIGNhcGFjaXR5IHByb2JsZW0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGYWlsdXJlQW5hbHlzaXMoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcHJldmlvdXM/OiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9LFxuKTogUHJvbWlzZTx7IGNhdGVnb3JpZXM6IEZhaWx1cmVDYXRlZ29yeVJvd1tdOyB0b3RhbDogbnVtYmVyOyBhY3Rpb25hYmxlVG90YWw6IG51bWJlciB9PiB7XG4gIGNvbnN0IGNvdW50cyA9IGF3YWl0IGNhdGVnb3J5Q291bnRzKHNjb3BlKTtcbiAgY29uc3QgcHJpb3IgPSBwcmV2aW91cyA/IGF3YWl0IGNhdGVnb3J5Q291bnRzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0pIDogbnVsbDtcbiAgY29uc3QgdG90YWwgPSBbLi4uY291bnRzLnZhbHVlcygpXS5yZWR1Y2UoKHMsIHYpID0+IHMgKyB2LmNvdW50LCAwKTtcbiAgY29uc3QgdG9wQnlDYXRlZ29yeSA9IGF3YWl0IHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoc2NvcGUpO1xuXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4uY291bnRzLmVudHJpZXMoKV1cbiAgICAubWFwKChbY2F0ZWdvcnksIHZdKSA9PiAoe1xuICAgICAgY2F0ZWdvcnksXG4gICAgICBsYWJlbDogRkFJTFVSRV9DQVRFR09SWV9MQUJFTFNbY2F0ZWdvcnldID8/IGNhdGVnb3J5LFxuICAgICAgY291bnQ6IHYuY291bnQsXG4gICAgICBzaGFyZVBjdDogdG90YWwgPiAwID8gTnVtYmVyKCgodi5jb3VudCAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgICAgdGVhbUFjdGlvbmFibGU6IGlzVGVhbUFjdGlvbmFibGUoY2F0ZWdvcnkpLFxuICAgICAgY2hhbmdlOiBwcmlvciA/IHYuY291bnQgLSAocHJpb3IuZ2V0KGNhdGVnb3J5KT8uY291bnQgPz8gMCkgOiBudWxsLFxuICAgICAgdG9wUGlwZWxpbmVzOiB0b3BCeUNhdGVnb3J5LmdldChjYXRlZ29yeSkgPz8gW10sXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuY291bnQgLSBhLmNvdW50KTtcblxuICByZXR1cm4ge1xuICAgIGNhdGVnb3JpZXMsXG4gICAgdG90YWwsXG4gICAgYWN0aW9uYWJsZVRvdGFsOiBjYXRlZ29yaWVzLmZpbHRlcigoYykgPT4gYy50ZWFtQWN0aW9uYWJsZSkucmVkdWNlKChzLCBjKSA9PiBzICsgYy5jb3VudCwgMCksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhdGVnb3J5Q291bnRzKHNjb3BlOiBBbmFseXRpY3NTY29wZSk6IFByb21pc2U8TWFwPEZhaWx1cmVDYXRlZ29yeSwgeyBjb3VudDogbnVtYmVyIH0+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGtleSBBUyBjYXRlZ29yeSwgU1VNKHZhbHVlOjppbnQpOjppbnQgQVMgY291bnRcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHIsIGpzb25iX2VhY2goci5mYWlsdXJlc19ieV9jYXRlZ29yeSlcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkga2V5XG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxGYWlsdXJlQ2F0ZWdvcnksIHsgY291bnQ6IG51bWJlciB9PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSBvdXQuc2V0KHIuY2F0ZWdvcnkgYXMgRmFpbHVyZUNhdGVnb3J5LCB7IGNvdW50OiBudW0oci5jb3VudCkgfSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGVyQ2F0ZWdvcnkgPSAzLFxuKTogUHJvbWlzZTxNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+Pj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBjYXRlZ29yeSwgcGlwZWxpbmVfaWQsIHBpcGVsaW5lX25hbWUsIGNvdW50IEZST00gKFxuICAgICAgU0VMRUNUXG4gICAgICAgIGUua2V5IEFTIGNhdGVnb3J5LFxuICAgICAgICByLnBpcGVsaW5lX2lkLFxuICAgICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICAgIFNVTShlLnZhbHVlOjppbnQpOjppbnQgQVMgY291bnQsXG4gICAgICAgIFJPV19OVU1CRVIoKSBPVkVSIChQQVJUSVRJT04gQlkgZS5rZXkgT1JERVIgQlkgU1VNKGUudmFsdWU6OmludCkgREVTQykgQVMgcm5cbiAgICAgIC0tIENST1NTIEpPSU4gTEFURVJBTCwgbm90IGEgY29tbWEgam9pbi4gV2l0aCBGUk9NIGEsIGYoYS54KSBlIExFRlQgSk9JTiBiLFxuICAgICAgLS0gdGhlIExFRlQgSk9JTiBiaW5kcyB0byBlIGFsb25lIGFuZCByIGZhbGxzIG91dCBvZiBzY29wZSBpbiBpdHMgT04gY2xhdXNlXG4gICAgICAtLSAoXCJpbnZhbGlkIHJlZmVyZW5jZSB0byBGUk9NLWNsYXVzZSBlbnRyeVwiKS4gVGhlIGV4cGxpY2l0IGxhdGVyYWwga2VlcHMgYWxsXG4gICAgICAtLSB0aHJlZSBpbiBvbmUgam9pbiB0cmVlLlxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwcyByXG4gICAgICBDUk9TUyBKT0lOIExBVEVSQUwganNvbmJfZWFjaChyLmZhaWx1cmVzX2J5X2NhdGVnb3J5KSBlXG4gICAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBlLmtleSwgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lXG4gICAgKSByYW5rZWRcbiAgICBXSEVSRSBybiA8PSAke3BlckNhdGVnb3J5fVxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qga2V5ID0gci5jYXRlZ29yeSBhcyBGYWlsdXJlQ2F0ZWdvcnk7XG4gICAgY29uc3QgbGlzdCA9IG91dC5nZXQoa2V5KSA/PyBbXTtcbiAgICBsaXN0LnB1c2goe1xuICAgICAgcGlwZWxpbmVJZDogU3RyaW5nKHIucGlwZWxpbmVfaWQpLFxuICAgICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBjb3VudDogbnVtKHIuY291bnQpLFxuICAgIH0pO1xuICAgIG91dC5zZXQoa2V5LCBsaXN0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogT25lIHN0YWdlJ3MgdGltaW5nLCBmb3IgdGhlIGRyaWxsLWRvd24uICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlUGVyZm9ybWFuY2VSb3cge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgcnVuczogbnVtYmVyO1xuICBwNTBNczogbnVtYmVyIHwgbnVsbDtcbiAgcDk1TXM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBDaGFuZ2UgaW4gcDk1IHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGFzIGEgcGVyY2VudGFnZS4gKi9cbiAgcDk1Q2hhbmdlUGN0OiBudW1iZXIgfCBudWxsO1xuICBmYWlsZWQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItc3RhZ2UgdGltaW5ncyBmb3Igb25lIHBpcGVsaW5lLCBzbG93ZXN0IGZpcnN0LlxuICpcbiAqIFRoZSBzZWN0aW9uIGEgbGVhZCBvcGVucyBhZnRlciB0aGUgYnJlYWtkb3duIHNheXMgYSBwaXBlbGluZSBnb3Qgc2xvd2VyOiBcIndoaWNoXG4gKiBzdGFnZVwiIGlzIHRoZSBuZXh0IHF1ZXN0aW9uLCBhbmQgYW5zd2VyaW5nIGl0IGZyb20gcmF3IGV2ZW50cyB3b3VsZCBtZWFuIGFcbiAqIHNlY29uZCBzY2FuIG9mIHRoZSBzYW1lIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN0YWdlUGVyZm9ybWFuY2UoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBwcmV2aW91cz86IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPFN0YWdlUGVyZm9ybWFuY2VSb3dbXT4ge1xuICBjb25zdCBjdXJyZW50ID0gYXdhaXQgc3RhZ2VSb3dzKHNjb3BlLCBwaXBlbGluZUlkKTtcbiAgY29uc3QgcHJpb3I6IE1hcDxzdHJpbmcsIHsgcDk1TXM6IG51bWJlciB8IG51bGwgfT4gPSBwcmV2aW91c1xuICAgID8gbmV3IE1hcCgoYXdhaXQgc3RhZ2VSb3dzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0sIHBpcGVsaW5lSWQpKS5tYXAoKHMpID0+IFtzLnN0YWdlTmFtZSwgc10pKVxuICAgIDogbmV3IE1hcCgpO1xuICByZXR1cm4gY3VycmVudC5tYXAoKHMpID0+IHtcbiAgICBjb25zdCBiZWZvcmUgPSBwcmlvci5nZXQocy5zdGFnZU5hbWUpPy5wOTVNcyA/PyBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcDk1Q2hhbmdlUGN0OiBiZWZvcmUgJiYgYmVmb3JlID4gMCAmJiBzLnA5NU1zICE9PSBudWxsXG4gICAgICAgID8gTnVtYmVyKCgoKHMucDk1TXMgLSBiZWZvcmUpIC8gYmVmb3JlKSAqIDEwMCkudG9GaXhlZCgxKSlcbiAgICAgICAgOiBudWxsLFxuICAgIH07XG4gIH0pLnNvcnQoKGEsIGIpID0+IChiLnA5NU1zID8/IDApIC0gKGEucDk1TXMgPz8gMCkpO1xufVxuXG5pbnRlcmZhY2UgU3RhZ2VSb3cgeyBzdGFnZU5hbWU6IHN0cmluZzsgcnVuczogbnVtYmVyOyBwNTBNczogbnVtYmVyIHwgbnVsbDsgcDk1TXM6IG51bWJlciB8IG51bGw7IGZhaWxlZDogbnVtYmVyIH1cblxuYXN5bmMgZnVuY3Rpb24gc3RhZ2VSb3dzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgcGlwZWxpbmVJZDogc3RyaW5nKTogUHJvbWlzZTxTdGFnZVJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguc2VsZWN0KHtcbiAgICBzdGFnZU5hbWU6IHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5zdGFnZU5hbWUsXG4gICAgcnVuczogc3FsPG51bWJlcj5gU1VNKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnJ1bnN9KTo6aW50YCxcbiAgICBmYWlsZWQ6IHNxbDxudW1iZXI+YFNVTSgke3NjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5mYWlsZWR9KTo6aW50YCxcbiAgICAvLyBNQVggb2YgdGhlIGRhaWx5IHA5NXMsIG5vdCBhbiBhdmVyYWdlIG9mIHBlcmNlbnRpbGVzOiBhdmVyYWdpbmdcbiAgICAvLyBwZXJjZW50aWxlcyBpcyBub3QgYSBwZXJjZW50aWxlIG9mIGFueXRoaW5nLCBhbmQgdGhlIHdvcnN0IGRheSBpcyB0aGVcbiAgICAvLyBudW1iZXIgc29tZWJvZHkgd291bGQgYWN0IG9uLlxuICAgIHA1ME1zOiBzcWw8bnVtYmVyIHwgbnVsbD5gTUFYKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnA1ME1zfSk6OmludGAsXG4gICAgcDk1TXM6IHNxbDxudW1iZXIgfCBudWxsPmBNQVgoJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucDk1TXN9KTo6aW50YCxcbiAgfSkuZnJvbShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXApXG4gICAgLndoZXJlKGFuZChcbiAgICAgIG9yZ1ByZWRpY2F0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAub3JnSWQsIHNjb3BlKSxcbiAgICAgIGVxKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5waXBlbGluZUlkLCBwaXBlbGluZUlkKSxcbiAgICAgIGd0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS5mcm9tKSksXG4gICAgICBsdChzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS50bykpLFxuICAgICAgc3FsYCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZX0gPD4gJydgLFxuICAgICkpXG4gICAgLmdyb3VwQnkoc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZSkpO1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgU3RhZ2VSb3c+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pikge1xuICAgIG1hcC5zZXQoU3RyaW5nKHIuc3RhZ2VOYW1lKSwge1xuICAgICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZU5hbWUpLFxuICAgICAgcnVuczogbnVtKHIucnVucyksXG4gICAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgICBwNTBNczogci5wNTBNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wNTBNcyksXG4gICAgICBwOTVNczogci5wOTVNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wOTVNcyksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5tYXAudmFsdWVzKCldO1xufVxuXG4vKiogQnVpbGQgdGltZSBieSBwcm9qZWN0IGFuZCBwaXBlbGluZS4gTm8gbW9uZXkgYW55d2hlcmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUm93IHtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWxkU2Vjb25kczogbnVtYmVyO1xuICBydW5zOiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hlcmUgdGhlIGJ1aWxkIHRpbWUgd2VudC5cbiAqXG4gKiBTRUNPTkRTLCBOT1QgRE9MTEFSUy4gQSBjb3N0IGZpZ3VyZSBuZWVkcyB0aGUgaW5zdGFuY2UgdHlwZXMsIHRoZSBzcG90L29uLWRlbWFuZFxuICogbWl4IGFuZCB0aGUgYWNjb3VudCdzIG93biBkaXNjb3VudHMsIG5vbmUgb2Ygd2hpY2ggdGhpcyBwbGF0Zm9ybSBrbm93cyDigJQgc28gYVxuICogZG9sbGFyIG51bWJlciBoZXJlIHdvdWxkIGJlIGEgZ3Vlc3MgcHJlc2VudGVkIGFzIGFuIGludm9pY2UuIEJ1aWxkIHRpbWUgaXMgdGhlXG4gKiB0aGluZyBhY3R1YWxseSBtZWFzdXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlc291cmNlQ29uc3VtcHRpb24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDIwKTogUHJvbWlzZTx7XG4gIHBpcGVsaW5lczogUmVzb3VyY2VSb3dbXTtcbiAgdG90YWxCdWlsZFNlY29uZHM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHAucHJvamVjdCxcbiAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICBTVU0oci5idWlsZF9zZWNvbmRzKTo6aW50IEFTIGJ1aWxkX3NlY29uZHMsXG4gICAgICBTVU0oci5ydW5zKTo6aW50IEFTIHJ1bnNcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkgcC5wcm9qZWN0LCByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWVcbiAgICBPUkRFUiBCWSBidWlsZF9zZWNvbmRzIERFU0NcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIGNvbnN0IGxpc3QgPSByb3dzT2Yocm93cyk7XG4gIGNvbnN0IHRvdGFsID0gbGlzdC5yZWR1Y2UoKHMsIHIpID0+IHMgKyBudW0oci5idWlsZF9zZWNvbmRzKSwgMCk7XG4gIHJldHVybiB7XG4gICAgdG90YWxCdWlsZFNlY29uZHM6IHRvdGFsLFxuICAgIHBpcGVsaW5lczogbGlzdC5tYXAoKHIpID0+ICh7XG4gICAgICBwcm9qZWN0OiAoci5wcm9qZWN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIGJ1aWxkU2Vjb25kczogbnVtKHIuYnVpbGRfc2Vjb25kcyksXG4gICAgICBydW5zOiBudW0oci5ydW5zKSxcbiAgICAgIHNoYXJlUGN0OiB0b3RhbCA+IDAgPyBOdW1iZXIoKChudW0oci5idWlsZF9zZWNvbmRzKSAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgIH0pKSxcbiAgfTtcbn1cblxuLyoqIE9uZSBjb21taXQncyBqb3VybmV5IGFjcm9zcyBlbnZpcm9ubWVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21vdGlvblJvdyB7XG4gIGNvbW1pdFNoYTogc3RyaW5nO1xuICAvKiogRW52aXJvbm1lbnQg4oaSIHdoZW4gaXQgbGFuZGVkIHRoZXJlLCBpbiB0aGUgb3JkZXIgaXQgcmVhY2hlZCB0aGVtLiAqL1xuICBzdG9wczogQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBzdHJpbmc7IGhvdXJzRnJvbVByZXZpb3VzOiBudW1iZXIgfCBudWxsIH0+O1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBjb21taXQgcmVhY2hlZCBhIG5vbi1wcm9kdWN0aW9uIGVudmlyb25tZW50IGFuZCBzdG9wcGVkLiAqL1xuICBzdHVjazogYm9vbGVhbjtcbiAgZnVydGhlc3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGVyZSBjb21taXRzIGdvdCB0bywgYW5kIHdoZXJlIHRoZXkgc3RvcHBlZC5cbiAqXG4gKiBcIlN0dWNrXCIgaXMgdGhlIG51bWJlciB3b3J0aCByZWFkaW5nLiBBIGNvbW1pdCB0aGF0IHJlYWNoZWQgc3RhZ2luZyBmb3VyIGRheXMgYWdvXG4gKiBhbmQgbmV2ZXIgd2VudCBmdXJ0aGVyIGlzIHdvcmsgdGhhdCBpcyBmaW5pc2hlZCBhbmQgbm90IGRlbGl2ZXJlZCDigJQgd2hpY2ggZG9lc1xuICogbm90IGFwcGVhciBpbiBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgc3VjY2VzcyByYXRlIG9yIGxlYWQgdGltZSwgYmVjYXVzZSBieSBldmVyeVxuICogb25lIG9mIHRob3NlIG1lYXN1cmVzIG5vdGhpbmcgaGFwcGVuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9tb3Rpb25WaWV3KFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIHByb2R1Y3Rpb25FbnYgPSAncHJvZHVjdGlvbicsXG4gIGxpbWl0ID0gMjUsXG4pOiBQcm9taXNlPHsgY29tbWl0czogUHJvbW90aW9uUm93W107IHN0dWNrQ291bnQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGNvbW1pdF9zaGEsIGVudmlyb25tZW50LCBNSU4oZGVwbG95ZWRfYXQpIEFTIGRlcGxveWVkX2F0XG4gICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgc3VjY2VlZGVkID0gdHJ1ZVxuICAgICAgQU5EIGNvbW1pdF9zaGEgSVMgTk9UIE5VTExcbiAgICBHUk9VUCBCWSBjb21taXRfc2hhLCBlbnZpcm9ubWVudFxuICAgIE9SREVSIEJZIE1JTihkZXBsb3llZF9hdCkgREVTQ1xuICBgKSk7XG5cbiAgY29uc3QgYnlDb21taXQgPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBEYXRlIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qgc2hhID0gU3RyaW5nKHIuY29tbWl0X3NoYSk7XG4gICAgY29uc3QgbGlzdCA9IGJ5Q29tbWl0LmdldChzaGEpID8/IFtdO1xuICAgIGxpc3QucHVzaCh7IGVudmlyb25tZW50OiBTdHJpbmcoci5lbnZpcm9ubWVudCksIGRlcGxveWVkQXQ6IG5ldyBEYXRlKFN0cmluZyhyLmRlcGxveWVkX2F0KSkgfSk7XG4gICAgYnlDb21taXQuc2V0KHNoYSwgbGlzdCk7XG4gIH1cblxuICBjb25zdCBjb21taXRzOiBQcm9tb3Rpb25Sb3dbXSA9IFsuLi5ieUNvbW1pdC5lbnRyaWVzKCldLm1hcCgoW2NvbW1pdFNoYSwgcmF3XSkgPT4ge1xuICAgIGNvbnN0IG9yZGVyZWQgPSBbLi4ucmF3XS5zb3J0KChhLCBiKSA9PiBhLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gYi5kZXBsb3llZEF0LmdldFRpbWUoKSk7XG4gICAgY29uc3Qgc3RvcHMgPSBvcmRlcmVkLm1hcCgoc3RvcCwgaSkgPT4gKHtcbiAgICAgIGVudmlyb25tZW50OiBzdG9wLmVudmlyb25tZW50LFxuICAgICAgZGVwbG95ZWRBdDogc3RvcC5kZXBsb3llZEF0LnRvSVNPU3RyaW5nKCksXG4gICAgICBob3Vyc0Zyb21QcmV2aW91czogaSA9PT0gMFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBOdW1iZXIoKChzdG9wLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gKG9yZGVyZWRbaSAtIDFdIGFzIHsgZGVwbG95ZWRBdDogRGF0ZSB9KS5kZXBsb3llZEF0LmdldFRpbWUoKSkgLyAzNjAwXzAwMCkudG9GaXhlZCgxKSksXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1cnRoZXN0ID0gb3JkZXJlZFtvcmRlcmVkLmxlbmd0aCAtIDFdPy5lbnZpcm9ubWVudCA/PyAnJztcbiAgICByZXR1cm4geyBjb21taXRTaGEsIHN0b3BzLCBmdXJ0aGVzdCwgc3R1Y2s6IGZ1cnRoZXN0ICE9PSBwcm9kdWN0aW9uRW52IH07XG4gIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFMYXN0ID0gYS5zdG9wc1thLnN0b3BzLmxlbmd0aCAtIDFdPy5kZXBsb3llZEF0ID8/ICcnO1xuICAgICAgY29uc3QgYkxhc3QgPSBiLnN0b3BzW2Iuc3RvcHMubGVuZ3RoIC0gMV0/LmRlcGxveWVkQXQgPz8gJyc7XG4gICAgICByZXR1cm4gYkxhc3QubG9jYWxlQ29tcGFyZShhTGFzdCk7XG4gICAgfSlcbiAgICAuc2xpY2UoMCwgbGltaXQpO1xuXG4gIHJldHVybiB7IGNvbW1pdHMsIHN0dWNrQ291bnQ6IGNvbW1pdHMuZmlsdGVyKChjKSA9PiBjLnN0dWNrKS5sZW5ndGggfTtcbn1cblxuLyoqIE91dGRhdGVkIHBsdWdpbiB1c2FnZSwgcGVyIHBpcGVsaW5lIGFuZCBzdGVwLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRkYXRlZFBsdWdpblJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIGluVXNlOiBzdHJpbmcgfCBudWxsO1xuICBsYXRlc3Q6IHN0cmluZyB8IG51bGw7XG4gIGdhcDogc3RyaW5nIHwgbnVsbDtcbiAgd2l0aGluUG9saWN5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdoaWNoIHBpcGVsaW5lcyBhcmUgYmVoaW5kIG9uIGEgcGx1Z2luLCB3b3JzdCBnYXAgZmlyc3QuXG4gKlxuICogUmVhZHMgdGhlIERFQ0xBUkVEIHNpZGUgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApLiBBIHBpcGVsaW5lJ3MgZGVjbGFyZWRcbiAqIHJhbmdlIGFuZCB3aGF0IGl0IGxhc3QgYWN0dWFsbHkgcmFuIGNhbiBkaXNhZ3JlZSDigJQgd2hpY2ggaXMgd2h5IHRoZSB2dWxuZXJhYmlsaXR5XG4gKiBzZWN0aW9uIGJlbG93IHJlYWRzIHRoZSBkZXBsb3llZCBzaWRlIGFuZCBzYXlzIHdoaWNoIGl0IGlzIHNob3dpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPdXRkYXRlZFBsdWdpbnMoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDUwKTogUHJvbWlzZTx7XG4gIHJvd3M6IE91dGRhdGVkUGx1Z2luUm93W107XG4gIGJlaGluZFBpcGVsaW5lczogbnVtYmVyO1xuICBtYWpvckJlaGluZDogbnVtYmVyO1xufT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lLCByLnN0YWdlX25hbWUsIHIuc3RlcF9uYW1lLFxuICAgICAgQ09BTEVTQ0Uoci5wbHVnaW5fcHVibGlzaGVyIHx8ICcvJywgJycpIHx8IHIucGx1Z2luX25hbWUgQVMgcGx1Z2luLFxuICAgICAgci5yZXNvbHZlZF92ZXJzaW9uLCByLmxhdGVzdF92ZXJzaW9uLCByLnZlcnNpb25fZ2FwLCByLndpdGhpbl9wb2xpY3lcbiAgICBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIChyLnZlcnNpb25fZ2FwIElOICgnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnKSBPUiByLndpdGhpbl9wb2xpY3kgPSBmYWxzZSlcbiAgICBPUkRFUiBCWSBDQVNFIHIudmVyc2lvbl9nYXAgV0hFTiAnbWFqb3InIFRIRU4gMCBXSEVOICdtaW5vcicgVEhFTiAxIFdIRU4gJ3BhdGNoJyBUSEVOIDIgRUxTRSAzIEVORCxcbiAgICAgICAgICAgICByLnBpcGVsaW5lX2lkXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZV9uYW1lKSxcbiAgICBzdGVwTmFtZTogU3RyaW5nKHIuc3RlcF9uYW1lKSxcbiAgICBwbHVnaW46IFN0cmluZyhyLnBsdWdpbiksXG4gICAgaW5Vc2U6IChyLnJlc29sdmVkX3ZlcnNpb24gYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBsYXRlc3Q6IChyLmxhdGVzdF92ZXJzaW9uIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgZ2FwOiAoci52ZXJzaW9uX2dhcCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHdpdGhpblBvbGljeTogci53aXRoaW5fcG9saWN5ICE9PSBmYWxzZSxcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIHJvd3M6IGxpc3QsXG4gICAgYmVoaW5kUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIG1ham9yQmVoaW5kOiBsaXN0LmZpbHRlcigocikgPT4gci5nYXAgPT09ICdtYWpvcicpLmxlbmd0aCxcbiAgfTtcbn1cblxuLyoqIEEgcGlwZWxpbmUncyBleHBvc3VyZSB0byBhIHZ1bG5lcmFibGUgcGx1Z2luIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5lcmFiaWxpdHlSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgLyoqIGBkZXBsb3llZGAgPSB3aGF0IGFjdHVhbGx5IHJhbjsgYGRlY2xhcmVkYCA9IHdoYXQgdGhlIGNvbmZpZyBhc2tzIGZvci4gKi9cbiAgc291cmNlOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgZmluZGluZ3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgZmxhZ2dlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGx1Z2luIHZ1bG5lcmFiaWxpdGllcywgcGVyIHBpcGVsaW5lLCBDcml0aWNhbHMgZmlyc3QuXG4gKlxuICogU0FZUyBXSEVUSEVSIElUIElTIERFQ0xBUkVEIE9SIERFUExPWUVELiBBIHBpcGVsaW5lIHdob3NlIGNvbmZpZyB3YXMgdXBkYXRlZCB0byBhXG4gKiBmaXhlZCB2ZXJzaW9uIGJ1dCB3aGljaCBoYXMgbm90IHJlLXN5bnRoZWQgaXMgc3RpbGwgcnVubmluZyB0aGUgdnVsbmVyYWJsZSBpbWFnZSxcbiAqIGFuZCBhIHJlcG9ydCB0aGF0IGNvbGxhcHNlZCB0aGUgdHdvIHdvdWxkIHRlbGwgYSBtYW5hZ2VyIHRoZSBwcm9ibGVtIGlzIHNvbHZlZFxuICogd2hpbGUgdGhlIG9sZCBpbWFnZSBrZWVwcyBydW5uaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luVnVsbmVyYWJpbGl0aWVzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgbGltaXQgPSA1MCk6IFByb21pc2U8e1xuICByb3dzOiBWdWxuZXJhYmlsaXR5Um93W107XG4gIGV4cG9zZWRQaXBlbGluZXM6IG51bWJlcjtcbiAgY3JpdGljYWxQaXBlbGluZXM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHYucGlwZWxpbmVfaWQsIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgIENPQUxFU0NFKHYucGx1Z2luX3B1Ymxpc2hlciB8fCAnLycsICcnKSB8fCB2LnBsdWdpbl9uYW1lIEFTIHBsdWdpbixcbiAgICAgIHYucGx1Z2luX3ZlcnNpb24sIHYuc291cmNlLCB2LmNyaXRpY2FsX2NvdW50LCB2LmhpZ2hfY291bnQsIHYudG9wX2ZpbmRpbmdzLCB2LmZsYWdnZWRfYXRcbiAgICBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIHZcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHYucGlwZWxpbmVfaWRcbiAgICBXSEVSRSB2Lm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHYuZml4ZWRfYXQgSVMgTlVMTFxuICAgICAgLS0gQW4gYWNjZXB0YW5jZSBwYXN0IGl0cyBkZWFkbGluZSBpcyBub3QgYW4gYWNjZXB0YW5jZS5cbiAgICAgIEFORCAodi50cmlhZ2Vfc3RhdGUgTk9UIElOICgnYWNjZXB0ZWQnLCAnZmFsc2VfcG9zaXRpdmUnKVxuICAgICAgICAgICBPUiAodi50cmlhZ2Vfc3RhdGUgPSAnYWNjZXB0ZWQnIEFORCB2LmFjY2VwdGVkX3VudGlsIElTIE5PVCBOVUxMIEFORCB2LmFjY2VwdGVkX3VudGlsIDw9ICR7bm93fSkpXG4gICAgT1JERVIgQlkgdi5jcml0aWNhbF9jb3VudCBERVNDLCB2LmhpZ2hfY291bnQgREVTQ1xuICAgIExJTUlUICR7bGltaXR9XG4gIGApKTtcbiAgY29uc3QgbGlzdCA9IHJvd3NPZihyb3dzKS5tYXAoKHIpID0+ICh7XG4gICAgcGlwZWxpbmVJZDogU3RyaW5nKHIucGlwZWxpbmVfaWQpLFxuICAgIHBpcGVsaW5lTmFtZTogKHIucGlwZWxpbmVfbmFtZSBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHBsdWdpbjogU3RyaW5nKHIucGx1Z2luKSxcbiAgICB2ZXJzaW9uOiBTdHJpbmcoci5wbHVnaW5fdmVyc2lvbiksXG4gICAgc291cmNlOiBTdHJpbmcoci5zb3VyY2UpLFxuICAgIGNyaXRpY2FsOiBudW0oci5jcml0aWNhbF9jb3VudCksXG4gICAgaGlnaDogbnVtKHIuaGlnaF9jb3VudCksXG4gICAgZmluZGluZ3M6IChyLnRvcF9maW5kaW5ncyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pID8/IFtdLFxuICAgIGZsYWdnZWRBdDogaXNvT3JOdWxsKHIuZmxhZ2dlZF9hdCkgPz8gbmV3IERhdGUoMCkudG9JU09TdHJpbmcoKSxcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIHJvd3M6IGxpc3QsXG4gICAgZXhwb3NlZFBpcGVsaW5lczogbmV3IFNldChsaXN0Lm1hcCgocikgPT4gci5waXBlbGluZUlkKSkuc2l6ZSxcbiAgICBjcml0aWNhbFBpcGVsaW5lczogbmV3IFNldChsaXN0LmZpbHRlcigocikgPT4gci5jcml0aWNhbCA+IDApLm1hcCgocikgPT4gci5waXBlbGluZUlkKSkuc2l6ZSxcbiAgfTtcbn1cblxuLyoqIEFkb3B0aW9uIGFuZCBkZXBsb3ktdHJhY2tpbmcgY292ZXJhZ2Ugd2l0aGluIHRoZSByZXBvcnRlZCBzY29wZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRvcHRpb25TdW1tYXJ5IHtcbiAgYWN0aXZlUGlwZWxpbmVzOiBudW1iZXI7XG4gIHRvdGFsUGlwZWxpbmVzOiBudW1iZXI7XG4gIC8qKiBQaXBlbGluZXMgdGhhdCBwcm9kdWNlZCBhIGRlcGxveSByb3cg4oCUIGkuZS4gb25lcyBET1JBIGNhbiBzZWUuICovXG4gIGRlcGxveVRyYWNrZWRQaXBlbGluZXM6IG51bWJlcjtcbiAgLyoqIEJ5IGBjcmVhdGlvbl9zb3VyY2VgLCBmb3IgXCJhcmUgdGhlIGdvbGRlbiBwYXRocyBiZWluZyB1c2VkXCIuICovXG4gIGJ5U291cmNlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAvKiogVGVhbXMgaW4gdGhlIHJvbGx1cCB0aGF0IGhhZCBhY3Rpdml0eS4gMSBmb3IgYSBzaW5nbGUtb3JnIHJlcG9ydC4gKi9cbiAgYWN0aXZlVGVhbXM6IG51bWJlcjtcbiAgLyoqIE9ubHkgd2hlbiB0aGUgb3JnIGNvbmZpZ3VyZWQgdGhlIGFzc3VtcHRpb24uIE5ldmVyIHBsYXRmb3JtLXN1cHBsaWVkLiAqL1xuICBlc3RpbWF0ZWRNaW51dGVzU2F2ZWQ6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogQWRvcHRpb24sIGNvdmVyYWdlIGFuZCBjcmVhdGlvbiBzb3VyY2UuXG4gKlxuICogYGRlcGxveVRyYWNrZWRQaXBlbGluZXNgIGlzIHRoZSBob25lc3QgZGVub21pbmF0b3IgZm9yIGV2ZXJ5dGhpbmcgRE9SQSBzYXlzOiBhXG4gKiBwaXBlbGluZSB0aGF0IGhhcyBub3QgcmUtc3ludGhlZCB3aXRoIGRlcGxveSB0YWdzIHByb2R1Y2VzIG5vIGRlcGxveSByb3dzLCBzbyBpdFxuICogaXMgaW52aXNpYmxlIHRvIGRlcGxveW1lbnQgZnJlcXVlbmN5IOKAlCBhbmQgcmVwb3J0aW5nIFwiNCBkZXBsb3lzXCIgd2l0aG91dCBzYXlpbmdcbiAqIHRoYXQgMjAgb2YgMzAgcGlwZWxpbmVzIGNhbm5vdCBiZSBzZWVuIGlzIHRoZSBzaW5nbGUgbW9zdCBtaXNsZWFkaW5nIHRoaW5nIHRoaXNcbiAqIGZlYXR1cmUgY291bGQgZG8uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBZG9wdGlvbihzY29wZTogQW5hbHl0aWNzU2NvcGUsIHRpbWVTYXZlZE1pbnV0ZXM/OiBudW1iZXIgfCBudWxsKTogUHJvbWlzZTxBZG9wdGlvblN1bW1hcnk+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBXSVRIIHNjb3BlZCBBUyAoXG4gICAgICBTRUxFQ1QgaWQ6OnRleHQgQVMgaWQsIG9yZ19pZCwgY3JlYXRpb25fc291cmNlXG4gICAgICBGUk9NIHBpcGVsaW5lc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkZWxldGVkX2F0IElTIE5VTExcbiAgICApLFxuICAgIGFjdGl2ZSBBUyAoXG4gICAgICBTRUxFQ1QgRElTVElOQ1QgcGlwZWxpbmVfaWQsIG9yZ19pZFxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgc3RhZ2VfbmFtZSA9ICcnIEFORCBydW5zID4gMFxuICAgICksXG4gICAgdHJhY2tlZCBBUyAoXG4gICAgICBTRUxFQ1QgRElTVElOQ1QgcGlwZWxpbmVfaWRcbiAgICAgIEZST00gZG9yYV9kZXBsb3ltZW50c1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkZXBsb3llZF9hdCA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGVwbG95ZWRfYXQgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICApXG4gICAgU0VMRUNUXG4gICAgICAoU0VMRUNUIENPVU5UKCopIEZST00gc2NvcGVkKTo6aW50IEFTIHRvdGFsX3BpcGVsaW5lcyxcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBhY3RpdmUpOjppbnQgQVMgYWN0aXZlX3BpcGVsaW5lcyxcbiAgICAgIChTRUxFQ1QgQ09VTlQoRElTVElOQ1Qgb3JnX2lkKSBGUk9NIGFjdGl2ZSk6OmludCBBUyBhY3RpdmVfdGVhbXMsXG4gICAgICAoU0VMRUNUIENPVU5UKCopIEZST00gdHJhY2tlZCk6OmludCBBUyBkZXBsb3lfdHJhY2tlZCxcbiAgICAgIChTRUxFQ1QgQ09BTEVTQ0UoanNvbmJfb2JqZWN0X2FnZyhDT0FMRVNDRShjcmVhdGlvbl9zb3VyY2UsICd1bmtub3duJyksIG4pLCAne30nOjpqc29uYilcbiAgICAgICAgIEZST00gKFNFTEVDVCBjcmVhdGlvbl9zb3VyY2UsIENPVU5UKCopOjppbnQgQVMgbiBGUk9NIHNjb3BlZCBHUk9VUCBCWSBjcmVhdGlvbl9zb3VyY2UpIHNcbiAgICAgICkgQVMgYnlfc291cmNlXG4gIGApKTtcbiAgY29uc3QgciA9IHJvd3NPZihyb3dzKVswXSA/PyB7fTtcbiAgY29uc3QgY3JlYXRlZCA9IG51bShyLnRvdGFsX3BpcGVsaW5lcyk7XG4gIHJldHVybiB7XG4gICAgdG90YWxQaXBlbGluZXM6IGNyZWF0ZWQsXG4gICAgYWN0aXZlUGlwZWxpbmVzOiBudW0oci5hY3RpdmVfcGlwZWxpbmVzKSxcbiAgICBhY3RpdmVUZWFtczogTWF0aC5tYXgoMSwgbnVtKHIuYWN0aXZlX3RlYW1zKSksXG4gICAgZGVwbG95VHJhY2tlZFBpcGVsaW5lczogbnVtKHIuZGVwbG95X3RyYWNrZWQpLFxuICAgIGJ5U291cmNlOiAoci5ieV9zb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPikgPz8ge30sXG4gICAgLy8gT25seSB3aGVuIHRoZSBPUkcgY29uZmlndXJlZCB0aGUgYXNzdW1wdGlvbiDigJQgYSBwbGF0Zm9ybS1zdXBwbGllZCBudW1iZXJcbiAgICAvLyBoZXJlIHdvdWxkIGJlIHRoZSBwbGF0Zm9ybSBtYXJraW5nIGl0cyBvd24gaG9tZXdvcmsuXG4gICAgZXN0aW1hdGVkTWludXRlc1NhdmVkOiB0aW1lU2F2ZWRNaW51dGVzICYmIHRpbWVTYXZlZE1pbnV0ZXMgPiAwID8gY3JlYXRlZCAqIHRpbWVTYXZlZE1pbnV0ZXMgOiBudWxsLFxuICB9O1xufVxuXG4vKiogT25lIHBpcGVsaW5lJ3MgZmFpbHVyZSBzdHJlYWsgYW5kIGxhc3Qgc3VjY2Vzc2Z1bCBkYXkuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RyZWFrUm93IHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICAvKipcbiAgICogRmFpbHVyZXMgaW4gdGhlIHRyYWlsaW5nIHJ1biBvZiBkYXlzIG9uIHdoaWNoIE5PVEhJTkcgc3VjY2VlZGVkLlxuICAgKlxuICAgKiBBIExPV0VSIEJPVU5ELCBhbmQgZGVsaWJlcmF0ZWx5IHNvLiBUaGUgcm9sbHVwIGlzIHBlciBkYXksIHNvIHdpdGhpbiB0aGUgbW9zdFxuICAgKiByZWNlbnQgZGF5IHRoYXQgZGlkIGhhdmUgYSBzdWNjZXNzIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlIGZhaWx1cmVzXG4gICAqIGNhbWUgYmVmb3JlIG9yIGFmdGVyIGl0IOKAlCB0aGF0IGRheSBpcyBleGNsdWRlZCByYXRoZXIgdGhhbiBndWVzc2VkIGF0LiBXaGF0XG4gICAqIHN1cnZpdmVzIGlzIGEgcnVuIG9mIGZhaWx1cmVzIHdpdGggbm8gc3VjY2VzcyBhbnl3aGVyZSBiZXR3ZWVuIHRoZW0sIHdoaWNoIGlzXG4gICAqIGV4YWN0bHkgdGhlIGNsYWltIHRoZSBmaW5kaW5nIG1ha2VzLlxuICAgKi9cbiAgY29uc2VjdXRpdmVGYWlsdXJlczogbnVtYmVyO1xuICAvKiogVGhlIGxhc3QgZGF5IHdpdGggYXQgbGVhc3Qgb25lIHN1Y2Nlc3MsIG9yIG51bGwgd2l0aGluIHRoZSBsb29rYmFjay4gKi9cbiAgbGFzdFN1Y2Nlc3NBdDogRGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogRmFpbHVyZSBzdHJlYWtzIGFuZCBsYXN0LXN1Y2Nlc3MgZGF0ZXMsIGZvciB0aGUgbmVlZHMtYXR0ZW50aW9uIHJ1bGVzLlxuICpcbiAqIFJlYWRzIHRoZSBkYWlseSByb2xsdXAsIG5vdCBgcGlwZWxpbmVfZXZlbnRzYCDigJQgdGhlIHNhbWUgcmVhc29uIGFzIGV2ZXJ5dGhpbmdcbiAqIGVsc2UgaGVyZTogYSBzdHJlYWsgdGhhdCBlbmRlZCB0aHJlZSB3ZWVrcyBhZ28gbXVzdCBzdGlsbCBiZSByZWFkYWJsZSBhZnRlclxuICogcmV0ZW50aW9uIGhhcyBzd2VwdCB0aGUgZXZlbnRzIHRoYXQgcHJvZHVjZWQgaXQuXG4gKlxuICogYGxvb2tiYWNrRGF5c2AgZXh0ZW5kcyBQQVNUIHRoZSB3aW5kb3cgb24gcHVycG9zZS4gXCJMYXN0IHN1Y2NlZWRlZCAxMiBkYXlzIGFnb1wiXG4gKiBpcyB0aGUgZmluZGluZyBhIHdlZWtseSByZXBvcnQgbW9zdCBuZWVkcywgYW5kIGEgcXVlcnkgYm91bmRlZCBieSBhIDctZGF5IHdpbmRvd1xuICogY291bGQgbmV2ZXIgcHJvZHVjZSBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBpcGVsaW5lU3RyZWFrcyhcbiAgc2NvcGU6IEFuYWx5dGljc1Njb3BlLFxuICBsb29rYmFja0RheXMgPSA5MCxcbik6IFByb21pc2U8UGlwZWxpbmVTdHJlYWtSb3dbXT4ge1xuICBjb25zdCBzaW5jZSA9IG5ldyBEYXRlKG5ldyBEYXRlKHNjb3BlLnRvKS5nZXRUaW1lKCkgLSBsb29rYmFja0RheXMgKiA4Nl80MDBfMDAwKS50b0lTT1N0cmluZygpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggZGF5cyBBUyAoXG4gICAgICBTRUxFQ1QgcGlwZWxpbmVfaWQsIGRheSxcbiAgICAgICAgICAgICBTVU0oc3VjY2VlZGVkKTo6aW50IEFTIHN1Y2NlZWRlZCxcbiAgICAgICAgICAgICBTVU0oZmFpbGVkKTo6aW50ICAgIEFTIGZhaWxlZFxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzaW5jZX06OnRpbWVzdGFtcHR6IEFORCBkYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgIEdST1VQIEJZIHBpcGVsaW5lX2lkLCBkYXlcbiAgICApLFxuICAgIGxhc3Rfb2sgQVMgKFxuICAgICAgU0VMRUNUIHBpcGVsaW5lX2lkLCBNQVgoZGF5KSBBUyBsYXN0X3N1Y2Nlc3NfZGF5XG4gICAgICBGUk9NIGRheXMgV0hFUkUgc3VjY2VlZGVkID4gMFxuICAgICAgR1JPVVAgQlkgcGlwZWxpbmVfaWRcbiAgICApXG4gICAgU0VMRUNUIGQucGlwZWxpbmVfaWQsXG4gICAgICAgICAgIGwubGFzdF9zdWNjZXNzX2RheSxcbiAgICAgICAgICAgQ09BTEVTQ0UoU1VNKGQuZmFpbGVkKSBGSUxURVIgKFxuICAgICAgICAgICAgIFdIRVJFIGwubGFzdF9zdWNjZXNzX2RheSBJUyBOVUxMIE9SIGQuZGF5ID4gbC5sYXN0X3N1Y2Nlc3NfZGF5XG4gICAgICAgICAgICksIDApOjppbnQgQVMgc3RyZWFrXG4gICAgRlJPTSBkYXlzIGRcbiAgICBMRUZUIEpPSU4gbGFzdF9vayBsIE9OIGwucGlwZWxpbmVfaWQgPSBkLnBpcGVsaW5lX2lkXG4gICAgR1JPVVAgQlkgZC5waXBlbGluZV9pZCwgbC5sYXN0X3N1Y2Nlc3NfZGF5XG4gIGApKTtcbiAgcmV0dXJuIHJvd3NPZihyb3dzKS5tYXAoKHIpID0+ICh7XG4gICAgcGlwZWxpbmVJZDogU3RyaW5nKHIucGlwZWxpbmVfaWQpLFxuICAgIGNvbnNlY3V0aXZlRmFpbHVyZXM6IG51bShyLnN0cmVhayksXG4gICAgbGFzdFN1Y2Nlc3NBdDogci5sYXN0X3N1Y2Nlc3NfZGF5ID8gbmV3IERhdGUoU3RyaW5nKHIubGFzdF9zdWNjZXNzX2RheSkpIDogbnVsbCxcbiAgfSkpO1xufVxuXG4vKipcbiAqIFBpcGVsaW5lcyB0aGF0IFJBTiBpbiB0aGUgd2luZG93IGJ1dCBwcm9kdWNlZCBubyBkZXBsb3kgcm93cy5cbiAqXG4gKiBBIG1lYXN1cmVtZW50IGdhcCwgbm90IGEgZmFpbHVyZSwgYW5kIHRoZSByZWFzb24gYSBkZXBsb3ltZW50LWZyZXF1ZW5jeSBudW1iZXIgY2FuXG4gKiBiZSBxdWlldGx5IHdyb25nOiBhIHBpcGVsaW5lIHdob3NlIHN5bnRoIHByZWRhdGVzIHRoZSBgcGIuZGVwbG95c2AgdGFncyBkZXBsb3lzXG4gKiBwZXJmZWN0bHkgd2VsbCBhbmQgaXMgaW52aXNpYmxlIHRvIGV2ZXJ5IERPUkEgYWdncmVnYXRlLiBOb3RoaW5nIGVsc2UgaW4gdGhlXG4gKiByZXBvcnQgd291bGQgc2F5IHNvLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VW50cmFja2VkUGlwZWxpbmVzKHNjb3BlOiBBbmFseXRpY3NTY29wZSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBXSVRIIGFjdGl2ZSBBUyAoXG4gICAgICBTRUxFQ1QgcGlwZWxpbmVfaWRcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN0YWdlX25hbWUgPSAnJ1xuICAgICAgR1JPVVAgQlkgcGlwZWxpbmVfaWRcbiAgICAgIEhBVklORyBTVU0ocnVucykgPiAwXG4gICAgKSxcbiAgICB0cmFja2VkIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlcGxveWVkX2F0ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkZXBsb3llZF9hdCA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgIClcbiAgICBTRUxFQ1QgYS5waXBlbGluZV9pZCBGUk9NIGFjdGl2ZSBhXG4gICAgV0hFUkUgTk9UIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSB0cmFja2VkIHQgV0hFUkUgdC5waXBlbGluZV9pZCA9IGEucGlwZWxpbmVfaWQpXG4gIGApKTtcbiAgcmV0dXJuIHJvd3NPZihyb3dzKS5tYXAoKHIpID0+IFN0cmluZyhyLnBpcGVsaW5lX2lkKSk7XG59XG5cbi8qKlxuICogUGlwZWxpbmVzIHJ1bm5pbmcgYSBwbHVnaW4gdmVyc2lvbiB3aXRoIGFuIE9QRU4gQ3JpdGljYWwgZXhwb3N1cmUuXG4gKlxuICogUG9pbnQtaW4tdGltZSwgbm90IHdpbmRvd2VkOiB3aGF0IG1hdHRlcnMgaXMgd2hldGhlciB0aGUgcGlwZWxpbmUgaXMgcnVubmluZyBvbmVcbiAqIE5PVy4gQSBDcml0aWNhbCB0aGF0IHdhcyBvcGVuIGxhc3QgVHVlc2RheSBhbmQgaXMgZml4ZWQgdG9kYXkgaXMgbm90IHNvbWV0aGluZyB0b1xuICogcHV0IGluIGZyb250IG9mIGEgbWFuYWdlciwgYW5kIGBmaXhlZF9hdGAgaXMgd2hhdCBzYXlzIHNvLlxuICpcbiAqIEFuIEFDQ0VQVEVEIGV4cG9zdXJlIGlzIGV4Y2x1ZGVkLiBTb21lb25lIHdpdGggdGhlIGF1dGhvcml0eSB0byBhY2NlcHQgYSByaXNrIGhhc1xuICogYWxyZWFkeSBkZWNpZGVkIGFib3V0IGl0IGluIHdyaXRpbmcsIHdpdGggYSByZWFzb24gYW5kIGEgZGVhZGxpbmU7IHJlLXJhaXNpbmcgaXRcbiAqIHdlZWtseSBpcyBob3cgYSByZXBvcnQgdGVhY2hlcyBpdHMgcmVhZGVyIHRvIHNraXAgYSBzZWN0aW9uLiBUaGUgbGFwc2Ugb2YgdGhhdFxuICogYWNjZXB0YW5jZSBpcyBhIHNlcGFyYXRlIGZpbmRpbmcgKGBsYXBzZWRBY2NlcHRhbmNlc2ApLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VnVsbmVyYWJsZVBpcGVsaW5lcyhzY29wZTogQW5hbHl0aWNzU2NvcGUpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkXG4gICAgRlJPTSBwbHVnaW5fdnVsbl9leHBvc3VyZVxuICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIGZpeGVkX2F0IElTIE5VTExcbiAgICAgIEFORCBjcml0aWNhbF9jb3VudCA+IDBcbiAgICAgIEFORCB0cmlhZ2Vfc3RhdGUgPD4gJ2FjY2VwdGVkJ1xuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiBTdHJpbmcoci5waXBlbGluZV9pZCkpO1xufVxuXG4vKipcbiAqIFdoZW4gZWFjaCBwaXBlbGluZSBpbiB0aGUgd2luZG93IHdhcyBsYXN0IGNoYW5nZWQuXG4gKlxuICogYHBpcGVsaW5lcy51cGRhdGVkX2F0YCwgbm90IGFuIGF1ZGl0IHF1ZXJ5OiB0aGUgYXVkaXQgdHJhaWwgbGl2ZXMgaW4gYW5vdGhlciBzdG9yZVxuICogd2l0aCBpdHMgb3duIHJldGVudGlvbiwgYW5kIHRoZSBvbmUgZmFjdCB0aGlzIG5lZWRzIOKAlCBcIndhcyB0aGlzIHRvdWNoZWQgc2hvcnRseVxuICogYmVmb3JlIGl0IGJyb2tlXCIg4oCUIGlzIGFscmVhZHkgb24gdGhlIHJvdywgZHVyYWJseSwgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhlXG4gKiBjaGFuZ2Ugd2FzIG1hZGUgaW4uXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHN0YXRlZCByYXRoZXIgdGhhbiBoaWRkZW46IGB1cGRhdGVkX2F0YCBtb3ZlcyBmb3IgQU5ZIHdyaXRlLFxuICogaW5jbHVkaW5nIGEgcmVuYW1lLiBTbyB0aGUgZmluZGluZyBzYXlzIFwiYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZVwiLCB3aGljaCBpc1xuICogdHJ1ZSBvZiBhIHJlbmFtZSB0b28sIGFuZCBkb2VzIG5vdCBjbGFpbSB0byBuYW1lIHRoZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaXBlbGluZUNvbmZpZ0NoYW5nZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBEYXRlPj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgdXBkYXRlZF9hdFxuICAgIEZST00gcGlwZWxpbmVzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICBBTkQgdXBkYXRlZF9hdCBJUyBOT1QgTlVMTFxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8c3RyaW5nLCBEYXRlPigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3QgYXQgPSByLnVwZGF0ZWRfYXQgPyBuZXcgRGF0ZShTdHJpbmcoci51cGRhdGVkX2F0KSkgOiBudWxsO1xuICAgIGlmIChhdCAmJiAhTnVtYmVyLmlzTmFOKGF0LmdldFRpbWUoKSkpIG91dC5zZXQoU3RyaW5nKHIuaWQpLCBhdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLy8g4pSA4pSAIEhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSb3dzIGZyb20gYSByYXcgYGV4ZWN1dGVgLCB3aGljaGV2ZXIgc2hhcGUgdGhlIGRyaXZlciByZXR1cm5lZC4gKi9cbmZ1bmN0aW9uIHJvd3NPZihyZXN1bHQ6IHVua25vd24pOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4gcmVzdWx0IGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgY29uc3Qgcm93cyA9IChyZXN1bHQgYXMgeyByb3dzPzogdW5rbm93biB9KT8ucm93cztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cykgPyByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA6IFtdO1xufVxuXG4vKiogQSBjb3VudCBmcm9tIGEgZHJpdmVyIHRoYXQgbWF5IGhhbmQgYmFjayBhIHN0cmluZyBmb3IgYSBiaWdpbnQuICovXG5mdW5jdGlvbiBudW0odjogdW5rbm93bik6IG51bWJlciB7XG4gIGNvbnN0IG4gPSB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogTnVtYmVyKHYgPz8gMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogMDtcbn1cblxuZnVuY3Rpb24gaXNvT3JOdWxsKHY6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCF2KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZCA9IHYgaW5zdGFuY2VvZiBEYXRlID8gdiA6IG5ldyBEYXRlKFN0cmluZyh2KSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZC5nZXRUaW1lKCkpID8gbnVsbCA6IGQudG9JU09TdHJpbmcoKTtcbn1cbiJdfQ==
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXF1ZXJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9hbmFseXRpY3MtcXVlcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVc3RCxtREFBbUQ7QUFDbkQsU0FBUyxZQUFZLENBQUMsR0FBa0MsRUFBRSxLQUFxQjtJQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUM1QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBWSxFQUFFLEtBQUssQ0FBQyxLQUFjLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBbUJEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFxQixFQUFFLEtBQUssR0FBRyxFQUFFO0lBQzFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVB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QUFFLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBxdWVyaWVzIHRoZSBiZXNwb2tlIHJlcG9ydCBzZWN0aW9ucyByZWFkLlxuICpcbiAqIEFsbCBvZiB0aGVtIGdvIHRocm91Z2ggYGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzYCwgYGRvcmFfZGVwbG95bWVudHNgLFxuICogYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCBvciBgcGx1Z2luX3Z1bG5fZXhwb3N1cmVgIOKAlCBuZXZlciByYXdcbiAqIGBwaXBlbGluZV9ldmVudHNgLiBUaGF0IGlzIHRoZSB3aG9sZSBwb2ludCBvZiB0aG9zZSB0YWJsZXM6IGEgcXVhcnRlcmx5IHJlcG9ydFxuICogb3ZlciBhIGJ1c3kgb3JnIGNvc3RzIGEgZmV3IGh1bmRyZWQgcm93cywgYW5kIGtlZXBzIHdvcmtpbmcgYWZ0ZXIgcmV0ZW50aW9uIGhhc1xuICogc3dlcHQgdGhlIGV2ZW50cy5cbiAqXG4gKiBUV08gUlVMRVMgRVZFUlkgUVVFUlkgSEVSRSBGT0xMT1dTOlxuICpcbiAqICAtIE5PVEhJTkcgSVMgUEVSLVBFUlNPTi4gRXZlcnkgYWdncmVnYXRlIGlzIHBlciBwaXBlbGluZSwgcGVyIHN0YWdlLCBwZXJcbiAqICAgIGNhdGVnb3J5IG9yIHBlciBlbnZpcm9ubWVudC4gVGhlIHNlY3Rpb24gcmVnaXN0cnkgcmVmdXNlcyBhIHBlci1wZXJzb24gaWQgYXRcbiAqICAgIHJlZ2lzdHJhdGlvbjsgdGhlc2UgcXVlcmllcyBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyB0byByZWdpc3Rlci5cbiAqICAtIEEgWkVSTyBBTkQgQSBCTElORCBTUE9UIEFSRSBESUZGRVJFTlQuIFdoZXJlIGEgbnVtYmVyIGNhbiBiZSBhYnNlbnQgZm9yIGxhY2tcbiAqICAgIG9mIGRhdGEgcmF0aGVyIHRoYW4gbGFjayBvZiBhY3Rpdml0eSwgdGhlIHNoYXBlIGNhcnJpZXMgdGhhdCAoYG51bGxgLCBhXG4gKiAgICBgY292ZXJhZ2VgIGNvdW50LCBhbiBleHBsaWNpdCByZWFzb24pIGluc3RlYWQgb2YgY29sbGFwc2luZyB0byAwLlxuICpcbiAqIFJFQURTIEdPIFRPIFRIRSBSRVBMSUNBIFdIRU4gT05FIEVYSVNUUy4gRXZlcnkgcXVlcnkgYmVsb3cgcnVucyB0aHJvdWdoXG4gKiBgd2l0aFRlbmFudFR4UmVhZGAsIHRoZSByZWFkLW9ubHkgdmFyaWFudCBvZiBgd2l0aFRlbmFudFR4YC4gSXQgc2V0cyB0aGVcbiAqIGlkZW50aWNhbCBSTFMgR1VDcywgYWRkcyBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAsIGFuZCBmYWxscyBiYWNrIHRvIHRoZVxuICogcHJpbWFyeSBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZXJlIGlzIG5vIHJlcGxpY2EsIHRoZSBraWxsIHN3aXRjaCBpcyBvZmYsXG4gKiByZXBsYXkgbGFnIGlzIGJleW9uZCBpdHMgdGhyZXNob2xkLCB0aGUgcmVxdWVzdCBoYXMgYWxyZWFkeSB3cml0dGVuLCBvciB0aGVyZVxuICogaXMgbm8gdGVuYW50IGNvbnRleHQg4oCUIHNvIHRoaXMgaXMgYSBuby1vcCB1bnRpbCBgREJfUkVBRF9IT1NUYCBpcyBjb25maWd1cmVkLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgV0FTIFRIRSBGSVJTVCBUTyBPUFQgSU4uIFRocmVlIGNvbmRpdGlvbnMgZGVjaWRlIHdoZXRoZXIgYVxuICogcXVlcnkgbWF5IGxlYXZlIHRoZSBwcmltYXJ5LCBhbmQgdGhpcyBmaWxlIHNhdGlzZmllcyBhbGwgdGhyZWUgYnlcbiAqIGNvbnN0cnVjdGlvbiDigJQgc28gdGhleSBhcmUgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gY2l0ZWQsIG5vdyB0aGF0IHRoZSBwbGFuXG4gKiB0aGF0IGludHJvZHVjZWQgdGhlbSBpcyByZXRpcmVkOlxuICpcbiAqICAgLSBOb3RoaW5nIGhlcmUgd3JpdGVzLiBUaGlydGVlbiBhZ2dyZWdhdGUgU0VMRUNUcywgbm8gSU5TRVJULCBubyBVUERBVEUsIG5vXG4gKiAgICAgYFNFTEVDVCDigKYgRk9SIFVQREFURWAsIG5vIGFkdmlzb3J5IGxvY2sg4oCUIHNvIG5vbmUgb2YgdGhlIGZvdXIgY2FsbCBzaXRlc1xuICogICAgIHRoZSBQaGFzZSAwYSBhdWRpdCBmb3VuZCBoaWRpbmcgYmVoaW5kIHJlYWQtbG9va2luZyBjb2RlLlxuICogICAtIE5vdGhpbmcgaGVyZSBmZWVkcyBhbiBBVVRIT1JJWkFUSU9OIGRlY2lzaW9uLiBUaGVzZSBhcmUgZGFzaGJvYXJkXG4gKiAgICAgYWdncmVnYXRlczsgYSBzdGFsZSBwZXJtaXNzaW9uIGNoZWNrIGlzIGEgc2VjdXJpdHkgYnVnLCBhIHN0YWxlIGNoYXJ0IGlzXG4gKiAgICAgYSBzdGFsZSBjaGFydC5cbiAqICAgLSBOb2JvZHkgaXMgYWJvdXQgdG8gQUNUIG9uIHRoZSByZXN1bHQuIEEgdXNlciB3aG8ganVzdCBjcmVhdGVkIGEgcGlwZWxpbmVcbiAqICAgICBsb29rcyBmb3IgaXQgaW4gYSBsaXN0LCBub3QgaW4gYSAzMC1kYXkgZmFpbHVyZS1yYXRlIHJvbGx1cC5cbiAqXG4gKiBBbmQgaXQgaXMgdGhlIGJlc3Qgb2ZmbG9hZCBjYW5kaWRhdGUgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBpcyBzYWZlOiB0aGVzZVxuICogYXJlIHRoZSBoZWF2aWVzdCBxdWVyaWVzIGluIHRoZSBwYWNrYWdlLCBzY2FubmluZyB0aW1lIHJhbmdlcyByYXRoZXIgdGhhblxuICogZmV0Y2hpbmcgcm93cyBieSBpZC5cbiAqXG4gKiBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAgYXBwbGllcyBvbiB0aGUgUFJJTUFSWSBwYXRoIHRvbywgc28gaWYgYSB3cml0ZVxuICogaXMgZXZlciBhZGRlZCBiZWxvdyBpdCBmYWlscyBoZXJlLCBsb3VkbHksIHJhdGhlciB0aGFuIGF0IHdoaWNoZXZlciB0YXJnZXRcbiAqIHRoZSByZWFkIGhhcHBlbmVkIHRvIGxhbmQgb24uXG4gKi9cblxuaW1wb3J0IHsgYW5kLCBlcSwgZ3RlLCBpbkFycmF5LCBsdCwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgRkFJTFVSRV9DQVRFR09SWV9MQUJFTFMsIGlzVGVhbUFjdGlvbmFibGUgfSBmcm9tICcuL2ZhaWx1cmUtY2xhc3NpZmllci5qcyc7XG5pbXBvcnQgeyBsaXZlRXhwb3N1cmVQcmVkaWNhdGUgfSBmcm9tICcuL3BsdWdpbi1leHBvc3VyZS5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZhaWx1cmVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeFJlYWQgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIFRoZSB3aW5kb3cgYW5kIG9yZyBzY29wZSBldmVyeSBxdWVyeSB0YWtlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzU2NvcGUge1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogYFtzZWxmLCAuLi5kZXNjZW5kYW50c11gIGZvciBhIHJvbGx1cDsgdW5kZWZpbmVkID0gdGhpcyBvcmcgb25seS4gKi9cbiAgb3JnSWRzPzogc3RyaW5nW107XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbn1cblxuLyoqIFRoZSBvcmcgcHJlZGljYXRlOiBvbmUgb3JnLCBvciBhIHJvbGx1cCBzZXQuICovXG5mdW5jdGlvbiBvcmdQcmVkaWNhdGUoY29sOiBQYXJhbWV0ZXJzPHR5cGVvZiBpbkFycmF5PlswXSwgc2NvcGU6IEFuYWx5dGljc1Njb3BlKSB7XG4gIHJldHVybiBzY29wZS5vcmdJZHMgJiYgc2NvcGUub3JnSWRzLmxlbmd0aCA+IDBcbiAgICA/IGluQXJyYXkoY29sLCBzY29wZS5vcmdJZHMpXG4gICAgOiBlcShjb2wgYXMgbmV2ZXIsIHNjb3BlLm9yZ0lkIGFzIG5ldmVyKTtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSdzIGxpbmUgaW4gdGhlIGJyZWFrZG93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVCcmVha2Rvd25Sb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcnVuczogbnVtYmVyO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIHN1Y2Nlc3NQY3Q6IG51bWJlciB8IG51bGw7XG4gIHA5NU1zOiBudW1iZXIgfCBudWxsO1xuICBkZXBsb3lzOiBudW1iZXI7XG4gIC8qKiBUaGUgbW9zdCByZWNlbnQgZmFpbHVyZSdzIGRheSBhbmQgc3RhZ2UsIGZvciBcIndoYXQgdG8gbG9vayBhdCBmaXJzdFwiLiAqL1xuICBsYXN0RmFpbHVyZUF0OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0RmFpbHVyZVN0YWdlOiBzdHJpbmcgfCBudWxsO1xuICBidWlsZFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItcGlwZWxpbmUgZGVsaXZlcnksIHdvcnN0IGZpcnN0LlxuICpcbiAqIFdPUlNUIEZJUlNULCBhbmQgY2FwcGVkLCBiZWNhdXNlIHRoZSBwb2ludCBvZiB0aGUgc2VjdGlvbiBpcyBcIndoZXJlIHNob3VsZFxuICogYXR0ZW50aW9uIGdvXCIuIEEgbGlzdCBzb3J0ZWQgYnkgbmFtZSwgb3IgYW4gdW5ib3VuZGVkIG9uZSwgaXMgYSBkYXRhIGR1bXA6IHRoZVxuICogbGVhZCBzdGlsbCBoYXMgdG8gZmluZCB0aGUgcHJvYmxlbSwgd2hpY2ggaXMgdGhlIHdvcmsgdGhlIHJlcG9ydCB3YXMgc3VwcG9zZWQgdG9cbiAqIGRvLiBUaWVzIGJyZWFrIG9uIHZvbHVtZSwgc28gYSA1MCUtc3VjY2VzcyBwaXBlbGluZSB0aGF0IHJhbiB0d2ljZSBkb2VzIG5vdFxuICogb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gKlxuICogYHN1Y2Nlc3NQY3RgIGlzIE5VTEwgZm9yIGEgcGlwZWxpbmUgd2l0aCBubyBydW5zIGluIHRoZSB3aW5kb3cg4oCUIG5vdCAwLiBBXG4gKiBwaXBlbGluZSBub2JvZHkgcmFuIGlzIG5vdCBhIHBpcGVsaW5lIHRoYXQgZmFpbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVCcmVha2Rvd24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDEwKTogUHJvbWlzZTxQaXBlbGluZUJyZWFrZG93blJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCB0b3RhbHMgQVMgKFxuICAgICAgU0VMRUNUXG4gICAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICAgIFNVTShyLnJ1bnMpOjppbnQgQVMgcnVucyxcbiAgICAgICAgU1VNKHIuc3VjY2VlZGVkKTo6aW50IEFTIHN1Y2NlZWRlZCxcbiAgICAgICAgU1VNKHIuZmFpbGVkKTo6aW50IEFTIGZhaWxlZCxcbiAgICAgICAgTUFYKHIucDk1X21zKTo6aW50IEFTIHA5NV9tcyxcbiAgICAgICAgU1VNKHIuYnVpbGRfc2Vjb25kcyk6OmludCBBUyBidWlsZF9zZWNvbmRzXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgLS0gVGhlIHBpcGVsaW5lLWxldmVsIGdyYWluIG9ubHk6IHN1bW1pbmcgdGhlIHN0YWdlIHJvd3MgdG9vIHdvdWxkIGNvdW50XG4gICAgICAgIC0tIGV2ZXJ5IHJ1biBvbmNlIHBlciBzdGFnZS5cbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSByLnBpcGVsaW5lX2lkXG4gICAgKSxcbiAgICBkZXBsb3lzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgQ09VTlQoKik6OmludCBBUyBkZXBsb3lzXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdWNjZWVkZWQgPSB0cnVlXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICksXG4gICAgbGFzdF9mYWlsIEFTIChcbiAgICAgIC0tIFRoZSBtb3N0IHJlY2VudCBmYWlsaW5nIFNUQUdFIHJvdyBwZXIgcGlwZWxpbmU6IHdoYXQgdG8gbG9vayBhdCBmaXJzdC5cbiAgICAgIFNFTEVDVCBESVNUSU5DVCBPTiAocGlwZWxpbmVfaWQpIHBpcGVsaW5lX2lkLCBkYXksIHN0YWdlX25hbWVcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN0YWdlX25hbWUgPD4gJycgQU5EIGZhaWxlZCA+IDBcbiAgICAgIE9SREVSIEJZIHBpcGVsaW5lX2lkLCBkYXkgREVTQywgZmFpbGVkIERFU0NcbiAgICApXG4gICAgU0VMRUNUXG4gICAgICB0LnBpcGVsaW5lX2lkLFxuICAgICAgcC5waXBlbGluZV9uYW1lLFxuICAgICAgcC5wcm9qZWN0LFxuICAgICAgdC5ydW5zLCB0LnN1Y2NlZWRlZCwgdC5mYWlsZWQsIHQucDk1X21zLCB0LmJ1aWxkX3NlY29uZHMsXG4gICAgICBDT0FMRVNDRShkLmRlcGxveXMsIDApIEFTIGRlcGxveXMsXG4gICAgICBmLmRheSBBUyBsYXN0X2ZhaWx1cmVfYXQsXG4gICAgICBmLnN0YWdlX25hbWUgQVMgbGFzdF9mYWlsdXJlX3N0YWdlLFxuICAgICAgQ0FTRSBXSEVOIHQucnVucyA+IDAgVEhFTiBST1VORCgodC5zdWNjZWVkZWQ6Om51bWVyaWMgLyB0LnJ1bnMpICogMTAwLCAxKSBFTFNFIE5VTEwgRU5EIEFTIHN1Y2Nlc3NfcGN0XG4gICAgRlJPTSB0b3RhbHMgdFxuICAgIExFRlQgSk9JTiBkZXBsb3lzIGQgT04gZC5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gbGFzdF9mYWlsIGYgT04gZi5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHQucGlwZWxpbmVfaWRcbiAgICAtLSBXb3JzdCBmaXJzdDogbG93ZXN0IHN1Y2Nlc3MgcmF0ZSwgdGhlbiBtb3N0IHJ1bnMsIHNvIGEgNTAlIHBpcGVsaW5lIHRoYXQgcmFuXG4gICAgLS0gdHdpY2UgZG9lcyBub3Qgb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gICAgT1JERVIgQlkgc3VjY2Vzc19wY3QgQVNDIE5VTExTIExBU1QsIHQucnVucyBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcHJvamVjdDogKHIucHJvamVjdCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHJ1bnM6IG51bShyLnJ1bnMpLFxuICAgIHN1Y2NlZWRlZDogbnVtKHIuc3VjY2VlZGVkKSxcbiAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgc3VjY2Vzc1BjdDogci5zdWNjZXNzX3BjdCA9PT0gbnVsbCA/IG51bGwgOiBOdW1iZXIoci5zdWNjZXNzX3BjdCksXG4gICAgcDk1TXM6IHIucDk1X21zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA5NV9tcyksXG4gICAgZGVwbG95czogbnVtKHIuZGVwbG95cyksXG4gICAgbGFzdEZhaWx1cmVBdDogaXNvT3JOdWxsKHIubGFzdF9mYWlsdXJlX2F0KSxcbiAgICBsYXN0RmFpbHVyZVN0YWdlOiAoci5sYXN0X2ZhaWx1cmVfc3RhZ2UgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBidWlsZFNlY29uZHM6IG51bShyLmJ1aWxkX3NlY29uZHMpLFxuICB9KSk7XG59XG5cbi8qKiBPbmUgZmFpbHVyZSBjYXRlZ29yeSdzIHNoYXJlIG9mIHRoZSBwZXJpb2QuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhaWx1cmVDYXRlZ29yeVJvdyB7XG4gIGNhdGVnb3J5OiBGYWlsdXJlQ2F0ZWdvcnk7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSB0ZWFtIGNhbiBhY3Qgb24gaXQsIG9yIGl0IGhhcHBlbmVkIHRvIHRoZW0uICovXG4gIHRlYW1BY3Rpb25hYmxlOiBib29sZWFuO1xuICAvKiogQ2hhbmdlIHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGluIGZhaWx1cmVzLiAqL1xuICBjaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgcGlwZWxpbmVzIGl0IGhpdCBoYXJkZXN0LiAqL1xuICB0b3BQaXBlbGluZXM6IEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT47XG59XG5cbi8qKlxuICogRmFpbHVyZXMgYnkgY2F0ZWdvcnksIHdpdGggdGhlIHByZXZpb3VzIHBlcmlvZCdzIGNvdW50cyBmb3IgdGhlIHRyZW5kLlxuICpcbiAqIFNQTElUUyBBQ1RJT05BQkxFIEZST00gTk9ULiBBIHdlZWsgd2hvc2UgZmFpbHVyZXMgd2VyZSBhbGwgY2xvdWQgdGhyb3R0bGluZyBpcyBhXG4gKiBkaWZmZXJlbnQgY29udmVyc2F0aW9uIGZyb20gb25lIHdob3NlIGZhaWx1cmVzIHdlcmUgYWxsIGJyb2tlbiB0ZXN0cywgYW5kXG4gKiBwcmVzZW50aW5nIHRoZW0gaW4gb25lIHJhbmtlZCBsaXN0IGludml0ZXMgZXhhY3RseSB0aGUgd3JvbmcgY29uY2x1c2lvbiDigJQgYSB0ZWFtXG4gKiBiZWluZyBhc2tlZCB0byBmaXggYW4gQVdTIGNhcGFjaXR5IHByb2JsZW0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGYWlsdXJlQW5hbHlzaXMoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcHJldmlvdXM/OiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9LFxuKTogUHJvbWlzZTx7IGNhdGVnb3JpZXM6IEZhaWx1cmVDYXRlZ29yeVJvd1tdOyB0b3RhbDogbnVtYmVyOyBhY3Rpb25hYmxlVG90YWw6IG51bWJlciB9PiB7XG4gIGNvbnN0IGNvdW50cyA9IGF3YWl0IGNhdGVnb3J5Q291bnRzKHNjb3BlKTtcbiAgY29uc3QgcHJpb3IgPSBwcmV2aW91cyA/IGF3YWl0IGNhdGVnb3J5Q291bnRzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0pIDogbnVsbDtcbiAgY29uc3QgdG90YWwgPSBbLi4uY291bnRzLnZhbHVlcygpXS5yZWR1Y2UoKHMsIHYpID0+IHMgKyB2LmNvdW50LCAwKTtcbiAgY29uc3QgdG9wQnlDYXRlZ29yeSA9IGF3YWl0IHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoc2NvcGUpO1xuXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4uY291bnRzLmVudHJpZXMoKV1cbiAgICAubWFwKChbY2F0ZWdvcnksIHZdKSA9PiAoe1xuICAgICAgY2F0ZWdvcnksXG4gICAgICBsYWJlbDogRkFJTFVSRV9DQVRFR09SWV9MQUJFTFNbY2F0ZWdvcnldID8/IGNhdGVnb3J5LFxuICAgICAgY291bnQ6IHYuY291bnQsXG4gICAgICBzaGFyZVBjdDogdG90YWwgPiAwID8gTnVtYmVyKCgodi5jb3VudCAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgICAgdGVhbUFjdGlvbmFibGU6IGlzVGVhbUFjdGlvbmFibGUoY2F0ZWdvcnkpLFxuICAgICAgY2hhbmdlOiBwcmlvciA/IHYuY291bnQgLSAocHJpb3IuZ2V0KGNhdGVnb3J5KT8uY291bnQgPz8gMCkgOiBudWxsLFxuICAgICAgdG9wUGlwZWxpbmVzOiB0b3BCeUNhdGVnb3J5LmdldChjYXRlZ29yeSkgPz8gW10sXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuY291bnQgLSBhLmNvdW50KTtcblxuICByZXR1cm4ge1xuICAgIGNhdGVnb3JpZXMsXG4gICAgdG90YWwsXG4gICAgYWN0aW9uYWJsZVRvdGFsOiBjYXRlZ29yaWVzLmZpbHRlcigoYykgPT4gYy50ZWFtQWN0aW9uYWJsZSkucmVkdWNlKChzLCBjKSA9PiBzICsgYy5jb3VudCwgMCksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhdGVnb3J5Q291bnRzKHNjb3BlOiBBbmFseXRpY3NTY29wZSk6IFByb21pc2U8TWFwPEZhaWx1cmVDYXRlZ29yeSwgeyBjb3VudDogbnVtYmVyIH0+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGtleSBBUyBjYXRlZ29yeSwgU1VNKHZhbHVlOjppbnQpOjppbnQgQVMgY291bnRcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHIsIGpzb25iX2VhY2goci5mYWlsdXJlc19ieV9jYXRlZ29yeSlcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkga2V5XG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxGYWlsdXJlQ2F0ZWdvcnksIHsgY291bnQ6IG51bWJlciB9PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSBvdXQuc2V0KHIuY2F0ZWdvcnkgYXMgRmFpbHVyZUNhdGVnb3J5LCB7IGNvdW50OiBudW0oci5jb3VudCkgfSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGVyQ2F0ZWdvcnkgPSAzLFxuKTogUHJvbWlzZTxNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+Pj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBjYXRlZ29yeSwgcGlwZWxpbmVfaWQsIHBpcGVsaW5lX25hbWUsIGNvdW50IEZST00gKFxuICAgICAgU0VMRUNUXG4gICAgICAgIGUua2V5IEFTIGNhdGVnb3J5LFxuICAgICAgICByLnBpcGVsaW5lX2lkLFxuICAgICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICAgIFNVTShlLnZhbHVlOjppbnQpOjppbnQgQVMgY291bnQsXG4gICAgICAgIFJPV19OVU1CRVIoKSBPVkVSIChQQVJUSVRJT04gQlkgZS5rZXkgT1JERVIgQlkgU1VNKGUudmFsdWU6OmludCkgREVTQykgQVMgcm5cbiAgICAgIC0tIENST1NTIEpPSU4gTEFURVJBTCwgbm90IGEgY29tbWEgam9pbi4gV2l0aCBGUk9NIGEsIGYoYS54KSBlIExFRlQgSk9JTiBiLFxuICAgICAgLS0gdGhlIExFRlQgSk9JTiBiaW5kcyB0byBlIGFsb25lIGFuZCByIGZhbGxzIG91dCBvZiBzY29wZSBpbiBpdHMgT04gY2xhdXNlXG4gICAgICAtLSAoXCJpbnZhbGlkIHJlZmVyZW5jZSB0byBGUk9NLWNsYXVzZSBlbnRyeVwiKS4gVGhlIGV4cGxpY2l0IGxhdGVyYWwga2VlcHMgYWxsXG4gICAgICAtLSB0aHJlZSBpbiBvbmUgam9pbiB0cmVlLlxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwcyByXG4gICAgICBDUk9TUyBKT0lOIExBVEVSQUwganNvbmJfZWFjaChyLmZhaWx1cmVzX2J5X2NhdGVnb3J5KSBlXG4gICAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBlLmtleSwgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lXG4gICAgKSByYW5rZWRcbiAgICBXSEVSRSBybiA8PSAke3BlckNhdGVnb3J5fVxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qga2V5ID0gci5jYXRlZ29yeSBhcyBGYWlsdXJlQ2F0ZWdvcnk7XG4gICAgY29uc3QgbGlzdCA9IG91dC5nZXQoa2V5KSA/PyBbXTtcbiAgICBsaXN0LnB1c2goe1xuICAgICAgcGlwZWxpbmVJZDogU3RyaW5nKHIucGlwZWxpbmVfaWQpLFxuICAgICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBjb3VudDogbnVtKHIuY291bnQpLFxuICAgIH0pO1xuICAgIG91dC5zZXQoa2V5LCBsaXN0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogT25lIHN0YWdlJ3MgdGltaW5nLCBmb3IgdGhlIGRyaWxsLWRvd24uICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlUGVyZm9ybWFuY2VSb3cge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgcnVuczogbnVtYmVyO1xuICBwNTBNczogbnVtYmVyIHwgbnVsbDtcbiAgcDk1TXM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBDaGFuZ2UgaW4gcDk1IHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGFzIGEgcGVyY2VudGFnZS4gKi9cbiAgcDk1Q2hhbmdlUGN0OiBudW1iZXIgfCBudWxsO1xuICBmYWlsZWQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItc3RhZ2UgdGltaW5ncyBmb3Igb25lIHBpcGVsaW5lLCBzbG93ZXN0IGZpcnN0LlxuICpcbiAqIFRoZSBzZWN0aW9uIGEgbGVhZCBvcGVucyBhZnRlciB0aGUgYnJlYWtkb3duIHNheXMgYSBwaXBlbGluZSBnb3Qgc2xvd2VyOiBcIndoaWNoXG4gKiBzdGFnZVwiIGlzIHRoZSBuZXh0IHF1ZXN0aW9uLCBhbmQgYW5zd2VyaW5nIGl0IGZyb20gcmF3IGV2ZW50cyB3b3VsZCBtZWFuIGFcbiAqIHNlY29uZCBzY2FuIG9mIHRoZSBzYW1lIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN0YWdlUGVyZm9ybWFuY2UoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBwcmV2aW91cz86IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPFN0YWdlUGVyZm9ybWFuY2VSb3dbXT4ge1xuICBjb25zdCBjdXJyZW50ID0gYXdhaXQgc3RhZ2VSb3dzKHNjb3BlLCBwaXBlbGluZUlkKTtcbiAgY29uc3QgcHJpb3I6IE1hcDxzdHJpbmcsIHsgcDk1TXM6IG51bWJlciB8IG51bGwgfT4gPSBwcmV2aW91c1xuICAgID8gbmV3IE1hcCgoYXdhaXQgc3RhZ2VSb3dzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0sIHBpcGVsaW5lSWQpKS5tYXAoKHMpID0+IFtzLnN0YWdlTmFtZSwgc10pKVxuICAgIDogbmV3IE1hcCgpO1xuICByZXR1cm4gY3VycmVudC5tYXAoKHMpID0+IHtcbiAgICBjb25zdCBiZWZvcmUgPSBwcmlvci5nZXQocy5zdGFnZU5hbWUpPy5wOTVNcyA/PyBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcDk1Q2hhbmdlUGN0OiBiZWZvcmUgJiYgYmVmb3JlID4gMCAmJiBzLnA5NU1zICE9PSBudWxsXG4gICAgICAgID8gTnVtYmVyKCgoKHMucDk1TXMgLSBiZWZvcmUpIC8gYmVmb3JlKSAqIDEwMCkudG9GaXhlZCgxKSlcbiAgICAgICAgOiBudWxsLFxuICAgIH07XG4gIH0pLnNvcnQoKGEsIGIpID0+IChiLnA5NU1zID8/IDApIC0gKGEucDk1TXMgPz8gMCkpO1xufVxuXG5pbnRlcmZhY2UgU3RhZ2VSb3cgeyBzdGFnZU5hbWU6IHN0cmluZzsgcnVuczogbnVtYmVyOyBwNTBNczogbnVtYmVyIHwgbnVsbDsgcDk1TXM6IG51bWJlciB8IG51bGw7IGZhaWxlZDogbnVtYmVyIH1cblxuYXN5bmMgZnVuY3Rpb24gc3RhZ2VSb3dzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgcGlwZWxpbmVJZDogc3RyaW5nKTogUHJvbWlzZTxTdGFnZVJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguc2VsZWN0KHtcbiAgICBzdGFnZU5hbWU6IHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5zdGFnZU5hbWUsXG4gICAgcnVuczogc3FsPG51bWJlcj5gU1VNKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnJ1bnN9KTo6aW50YCxcbiAgICBmYWlsZWQ6IHNxbDxudW1iZXI+YFNVTSgke3NjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5mYWlsZWR9KTo6aW50YCxcbiAgICAvLyBNQVggb2YgdGhlIGRhaWx5IHA5NXMsIG5vdCBhbiBhdmVyYWdlIG9mIHBlcmNlbnRpbGVzOiBhdmVyYWdpbmdcbiAgICAvLyBwZXJjZW50aWxlcyBpcyBub3QgYSBwZXJjZW50aWxlIG9mIGFueXRoaW5nLCBhbmQgdGhlIHdvcnN0IGRheSBpcyB0aGVcbiAgICAvLyBudW1iZXIgc29tZWJvZHkgd291bGQgYWN0IG9uLlxuICAgIHA1ME1zOiBzcWw8bnVtYmVyIHwgbnVsbD5gTUFYKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnA1ME1zfSk6OmludGAsXG4gICAgcDk1TXM6IHNxbDxudW1iZXIgfCBudWxsPmBNQVgoJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucDk1TXN9KTo6aW50YCxcbiAgfSkuZnJvbShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXApXG4gICAgLndoZXJlKGFuZChcbiAgICAgIG9yZ1ByZWRpY2F0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAub3JnSWQsIHNjb3BlKSxcbiAgICAgIGVxKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5waXBlbGluZUlkLCBwaXBlbGluZUlkKSxcbiAgICAgIGd0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS5mcm9tKSksXG4gICAgICBsdChzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS50bykpLFxuICAgICAgc3FsYCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZX0gPD4gJydgLFxuICAgICkpXG4gICAgLmdyb3VwQnkoc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZSkpO1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgU3RhZ2VSb3c+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pikge1xuICAgIG1hcC5zZXQoU3RyaW5nKHIuc3RhZ2VOYW1lKSwge1xuICAgICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZU5hbWUpLFxuICAgICAgcnVuczogbnVtKHIucnVucyksXG4gICAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgICBwNTBNczogci5wNTBNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wNTBNcyksXG4gICAgICBwOTVNczogci5wOTVNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wOTVNcyksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5tYXAudmFsdWVzKCldO1xufVxuXG4vKiogQnVpbGQgdGltZSBieSBwcm9qZWN0IGFuZCBwaXBlbGluZS4gTm8gbW9uZXkgYW55d2hlcmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUm93IHtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWxkU2Vjb25kczogbnVtYmVyO1xuICBydW5zOiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hlcmUgdGhlIGJ1aWxkIHRpbWUgd2VudC5cbiAqXG4gKiBTRUNPTkRTLCBOT1QgRE9MTEFSUy4gQSBjb3N0IGZpZ3VyZSBuZWVkcyB0aGUgaW5zdGFuY2UgdHlwZXMsIHRoZSBzcG90L29uLWRlbWFuZFxuICogbWl4IGFuZCB0aGUgYWNjb3VudCdzIG93biBkaXNjb3VudHMsIG5vbmUgb2Ygd2hpY2ggdGhpcyBwbGF0Zm9ybSBrbm93cyDigJQgc28gYVxuICogZG9sbGFyIG51bWJlciBoZXJlIHdvdWxkIGJlIGEgZ3Vlc3MgcHJlc2VudGVkIGFzIGFuIGludm9pY2UuIEJ1aWxkIHRpbWUgaXMgdGhlXG4gKiB0aGluZyBhY3R1YWxseSBtZWFzdXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlc291cmNlQ29uc3VtcHRpb24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDIwKTogUHJvbWlzZTx7XG4gIHBpcGVsaW5lczogUmVzb3VyY2VSb3dbXTtcbiAgdG90YWxCdWlsZFNlY29uZHM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHAucHJvamVjdCxcbiAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICBTVU0oci5idWlsZF9zZWNvbmRzKTo6aW50IEFTIGJ1aWxkX3NlY29uZHMsXG4gICAgICBTVU0oci5ydW5zKTo6aW50IEFTIHJ1bnNcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkgcC5wcm9qZWN0LCByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWVcbiAgICBPUkRFUiBCWSBidWlsZF9zZWNvbmRzIERFU0NcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIGNvbnN0IGxpc3QgPSByb3dzT2Yocm93cyk7XG4gIGNvbnN0IHRvdGFsID0gbGlzdC5yZWR1Y2UoKHMsIHIpID0+IHMgKyBudW0oci5idWlsZF9zZWNvbmRzKSwgMCk7XG4gIHJldHVybiB7XG4gICAgdG90YWxCdWlsZFNlY29uZHM6IHRvdGFsLFxuICAgIHBpcGVsaW5lczogbGlzdC5tYXAoKHIpID0+ICh7XG4gICAgICBwcm9qZWN0OiAoci5wcm9qZWN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIGJ1aWxkU2Vjb25kczogbnVtKHIuYnVpbGRfc2Vjb25kcyksXG4gICAgICBydW5zOiBudW0oci5ydW5zKSxcbiAgICAgIHNoYXJlUGN0OiB0b3RhbCA+IDAgPyBOdW1iZXIoKChudW0oci5idWlsZF9zZWNvbmRzKSAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgIH0pKSxcbiAgfTtcbn1cblxuLyoqIE9uZSBjb21taXQncyBqb3VybmV5IGFjcm9zcyBlbnZpcm9ubWVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21vdGlvblJvdyB7XG4gIGNvbW1pdFNoYTogc3RyaW5nO1xuICAvKiogRW52aXJvbm1lbnQg4oaSIHdoZW4gaXQgbGFuZGVkIHRoZXJlLCBpbiB0aGUgb3JkZXIgaXQgcmVhY2hlZCB0aGVtLiAqL1xuICBzdG9wczogQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBzdHJpbmc7IGhvdXJzRnJvbVByZXZpb3VzOiBudW1iZXIgfCBudWxsIH0+O1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBjb21taXQgcmVhY2hlZCBhIG5vbi1wcm9kdWN0aW9uIGVudmlyb25tZW50IGFuZCBzdG9wcGVkLiAqL1xuICBzdHVjazogYm9vbGVhbjtcbiAgZnVydGhlc3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGVyZSBjb21taXRzIGdvdCB0bywgYW5kIHdoZXJlIHRoZXkgc3RvcHBlZC5cbiAqXG4gKiBcIlN0dWNrXCIgaXMgdGhlIG51bWJlciB3b3J0aCByZWFkaW5nLiBBIGNvbW1pdCB0aGF0IHJlYWNoZWQgc3RhZ2luZyBmb3VyIGRheXMgYWdvXG4gKiBhbmQgbmV2ZXIgd2VudCBmdXJ0aGVyIGlzIHdvcmsgdGhhdCBpcyBmaW5pc2hlZCBhbmQgbm90IGRlbGl2ZXJlZCDigJQgd2hpY2ggZG9lc1xuICogbm90IGFwcGVhciBpbiBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgc3VjY2VzcyByYXRlIG9yIGxlYWQgdGltZSwgYmVjYXVzZSBieSBldmVyeVxuICogb25lIG9mIHRob3NlIG1lYXN1cmVzIG5vdGhpbmcgaGFwcGVuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9tb3Rpb25WaWV3KFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIHByb2R1Y3Rpb25FbnYgPSAncHJvZHVjdGlvbicsXG4gIGxpbWl0ID0gMjUsXG4pOiBQcm9taXNlPHsgY29tbWl0czogUHJvbW90aW9uUm93W107IHN0dWNrQ291bnQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGNvbW1pdF9zaGEsIGVudmlyb25tZW50LCBNSU4oZGVwbG95ZWRfYXQpIEFTIGRlcGxveWVkX2F0XG4gICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgc3VjY2VlZGVkID0gdHJ1ZVxuICAgICAgQU5EIGNvbW1pdF9zaGEgSVMgTk9UIE5VTExcbiAgICBHUk9VUCBCWSBjb21taXRfc2hhLCBlbnZpcm9ubWVudFxuICAgIE9SREVSIEJZIE1JTihkZXBsb3llZF9hdCkgREVTQ1xuICBgKSk7XG5cbiAgY29uc3QgYnlDb21taXQgPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBEYXRlIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qgc2hhID0gU3RyaW5nKHIuY29tbWl0X3NoYSk7XG4gICAgY29uc3QgbGlzdCA9IGJ5Q29tbWl0LmdldChzaGEpID8/IFtdO1xuICAgIGxpc3QucHVzaCh7IGVudmlyb25tZW50OiBTdHJpbmcoci5lbnZpcm9ubWVudCksIGRlcGxveWVkQXQ6IG5ldyBEYXRlKFN0cmluZyhyLmRlcGxveWVkX2F0KSkgfSk7XG4gICAgYnlDb21taXQuc2V0KHNoYSwgbGlzdCk7XG4gIH1cblxuICBjb25zdCBjb21taXRzOiBQcm9tb3Rpb25Sb3dbXSA9IFsuLi5ieUNvbW1pdC5lbnRyaWVzKCldLm1hcCgoW2NvbW1pdFNoYSwgcmF3XSkgPT4ge1xuICAgIGNvbnN0IG9yZGVyZWQgPSBbLi4ucmF3XS5zb3J0KChhLCBiKSA9PiBhLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gYi5kZXBsb3llZEF0LmdldFRpbWUoKSk7XG4gICAgY29uc3Qgc3RvcHMgPSBvcmRlcmVkLm1hcCgoc3RvcCwgaSkgPT4gKHtcbiAgICAgIGVudmlyb25tZW50OiBzdG9wLmVudmlyb25tZW50LFxuICAgICAgZGVwbG95ZWRBdDogc3RvcC5kZXBsb3llZEF0LnRvSVNPU3RyaW5nKCksXG4gICAgICBob3Vyc0Zyb21QcmV2aW91czogaSA9PT0gMFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBOdW1iZXIoKChzdG9wLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gKG9yZGVyZWRbaSAtIDFdIGFzIHsgZGVwbG95ZWRBdDogRGF0ZSB9KS5kZXBsb3llZEF0LmdldFRpbWUoKSkgLyAzNjAwXzAwMCkudG9GaXhlZCgxKSksXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1cnRoZXN0ID0gb3JkZXJlZFtvcmRlcmVkLmxlbmd0aCAtIDFdPy5lbnZpcm9ubWVudCA/PyAnJztcbiAgICByZXR1cm4geyBjb21taXRTaGEsIHN0b3BzLCBmdXJ0aGVzdCwgc3R1Y2s6IGZ1cnRoZXN0ICE9PSBwcm9kdWN0aW9uRW52IH07XG4gIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFMYXN0ID0gYS5zdG9wc1thLnN0b3BzLmxlbmd0aCAtIDFdPy5kZXBsb3llZEF0ID8/ICcnO1xuICAgICAgY29uc3QgYkxhc3QgPSBiLnN0b3BzW2Iuc3RvcHMubGVuZ3RoIC0gMV0/LmRlcGxveWVkQXQgPz8gJyc7XG4gICAgICByZXR1cm4gYkxhc3QubG9jYWxlQ29tcGFyZShhTGFzdCk7XG4gICAgfSlcbiAgICAuc2xpY2UoMCwgbGltaXQpO1xuXG4gIHJldHVybiB7IGNvbW1pdHMsIHN0dWNrQ291bnQ6IGNvbW1pdHMuZmlsdGVyKChjKSA9PiBjLnN0dWNrKS5sZW5ndGggfTtcbn1cblxuLyoqIE91dGRhdGVkIHBsdWdpbiB1c2FnZSwgcGVyIHBpcGVsaW5lIGFuZCBzdGVwLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRkYXRlZFBsdWdpblJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIGluVXNlOiBzdHJpbmcgfCBudWxsO1xuICBsYXRlc3Q6IHN0cmluZyB8IG51bGw7XG4gIGdhcDogc3RyaW5nIHwgbnVsbDtcbiAgd2l0aGluUG9saWN5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdoaWNoIHBpcGVsaW5lcyBhcmUgYmVoaW5kIG9uIGEgcGx1Z2luLCB3b3JzdCBnYXAgZmlyc3QuXG4gKlxuICogUmVhZHMgdGhlIERFQ0xBUkVEIHNpZGUgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApLiBBIHBpcGVsaW5lJ3MgZGVjbGFyZWRcbiAqIHJhbmdlIGFuZCB3aGF0IGl0IGxhc3QgYWN0dWFsbHkgcmFuIGNhbiBkaXNhZ3JlZSDigJQgd2hpY2ggaXMgd2h5IHRoZSB2dWxuZXJhYmlsaXR5XG4gKiBzZWN0aW9uIGJlbG93IHJlYWRzIHRoZSBkZXBsb3llZCBzaWRlIGFuZCBzYXlzIHdoaWNoIGl0IGlzIHNob3dpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPdXRkYXRlZFBsdWdpbnMoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDUwKTogUHJvbWlzZTx7XG4gIHJvd3M6IE91dGRhdGVkUGx1Z2luUm93W107XG4gIGJlaGluZFBpcGVsaW5lczogbnVtYmVyO1xuICBtYWpvckJlaGluZDogbnVtYmVyO1xufT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lLCByLnN0YWdlX25hbWUsIHIuc3RlcF9uYW1lLFxuICAgICAgQ09BTEVTQ0Uoci5wbHVnaW5fcHVibGlzaGVyIHx8ICcvJywgJycpIHx8IHIucGx1Z2luX25hbWUgQVMgcGx1Z2luLFxuICAgICAgci5yZXNvbHZlZF92ZXJzaW9uLCByLmxhdGVzdF92ZXJzaW9uLCByLnZlcnNpb25fZ2FwLCByLndpdGhpbl9wb2xpY3lcbiAgICBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIChyLnZlcnNpb25fZ2FwIElOICgnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnKSBPUiByLndpdGhpbl9wb2xpY3kgPSBmYWxzZSlcbiAgICBPUkRFUiBCWSBDQVNFIHIudmVyc2lvbl9nYXAgV0hFTiAnbWFqb3InIFRIRU4gMCBXSEVOICdtaW5vcicgVEhFTiAxIFdIRU4gJ3BhdGNoJyBUSEVOIDIgRUxTRSAzIEVORCxcbiAgICAgICAgICAgICByLnBpcGVsaW5lX2lkXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZV9uYW1lKSxcbiAgICBzdGVwTmFtZTogU3RyaW5nKHIuc3RlcF9uYW1lKSxcbiAgICBwbHVnaW46IFN0cmluZyhyLnBsdWdpbiksXG4gICAgaW5Vc2U6IChyLnJlc29sdmVkX3ZlcnNpb24gYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBsYXRlc3Q6IChyLmxhdGVzdF92ZXJzaW9uIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgZ2FwOiAoci52ZXJzaW9uX2dhcCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHdpdGhpblBvbGljeTogci53aXRoaW5fcG9saWN5ICE9PSBmYWxzZSxcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIHJvd3M6IGxpc3QsXG4gICAgYmVoaW5kUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIG1ham9yQmVoaW5kOiBsaXN0LmZpbHRlcigocikgPT4gci5nYXAgPT09ICdtYWpvcicpLmxlbmd0aCxcbiAgfTtcbn1cblxuLyoqIEEgcGlwZWxpbmUncyBleHBvc3VyZSB0byBhIHZ1bG5lcmFibGUgcGx1Z2luIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5lcmFiaWxpdHlSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgLyoqIGBkZXBsb3llZGAgPSB3aGF0IGFjdHVhbGx5IHJhbjsgYGRlY2xhcmVkYCA9IHdoYXQgdGhlIGNvbmZpZyBhc2tzIGZvci4gKi9cbiAgc291cmNlOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgZmluZGluZ3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgZmxhZ2dlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGx1Z2luIHZ1bG5lcmFiaWxpdGllcywgcGVyIHBpcGVsaW5lLCBDcml0aWNhbHMgZmlyc3QuXG4gKlxuICogU0FZUyBXSEVUSEVSIElUIElTIERFQ0xBUkVEIE9SIERFUExPWUVELiBBIHBpcGVsaW5lIHdob3NlIGNvbmZpZyB3YXMgdXBkYXRlZCB0byBhXG4gKiBmaXhlZCB2ZXJzaW9uIGJ1dCB3aGljaCBoYXMgbm90IHJlLXN5bnRoZWQgaXMgc3RpbGwgcnVubmluZyB0aGUgdnVsbmVyYWJsZSBpbWFnZSxcbiAqIGFuZCBhIHJlcG9ydCB0aGF0IGNvbGxhcHNlZCB0aGUgdHdvIHdvdWxkIHRlbGwgYSBtYW5hZ2VyIHRoZSBwcm9ibGVtIGlzIHNvbHZlZFxuICogd2hpbGUgdGhlIG9sZCBpbWFnZSBrZWVwcyBydW5uaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luVnVsbmVyYWJpbGl0aWVzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgbGltaXQgPSA1MCk6IFByb21pc2U8e1xuICByb3dzOiBWdWxuZXJhYmlsaXR5Um93W107XG4gIGV4cG9zZWRQaXBlbGluZXM6IG51bWJlcjtcbiAgY3JpdGljYWxQaXBlbGluZXM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHYucGlwZWxpbmVfaWQsIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgIENPQUxFU0NFKHYucGx1Z2luX3B1Ymxpc2hlciB8fCAnLycsICcnKSB8fCB2LnBsdWdpbl9uYW1lIEFTIHBsdWdpbixcbiAgICAgIHYucGx1Z2luX3ZlcnNpb24sIHYuc291cmNlLCB2LmNyaXRpY2FsX2NvdW50LCB2LmhpZ2hfY291bnQsIHYudG9wX2ZpbmRpbmdzLCB2LmZsYWdnZWRfYXRcbiAgICBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIHZcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHYucGlwZWxpbmVfaWRcbiAgICBXSEVSRSB2Lm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EICR7bGl2ZUV4cG9zdXJlUHJlZGljYXRlKG5vdywgJ3YnKX1cbiAgICBPUkRFUiBCWSB2LmNyaXRpY2FsX2NvdW50IERFU0MsIHYuaGlnaF9jb3VudCBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcGx1Z2luOiBTdHJpbmcoci5wbHVnaW4pLFxuICAgIHZlcnNpb246IFN0cmluZyhyLnBsdWdpbl92ZXJzaW9uKSxcbiAgICBzb3VyY2U6IFN0cmluZyhyLnNvdXJjZSksXG4gICAgY3JpdGljYWw6IG51bShyLmNyaXRpY2FsX2NvdW50KSxcbiAgICBoaWdoOiBudW0oci5oaWdoX2NvdW50KSxcbiAgICBmaW5kaW5nczogKHIudG9wX2ZpbmRpbmdzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikgPz8gW10sXG4gICAgZmxhZ2dlZEF0OiBpc29Pck51bGwoci5mbGFnZ2VkX2F0KSA/PyBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICB9KSk7XG4gIHJldHVybiB7XG4gICAgcm93czogbGlzdCxcbiAgICBleHBvc2VkUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIGNyaXRpY2FsUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QuZmlsdGVyKChyKSA9PiByLmNyaXRpY2FsID4gMCkubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICB9O1xufVxuXG4vKiogQWRvcHRpb24gYW5kIGRlcGxveS10cmFja2luZyBjb3ZlcmFnZSB3aXRoaW4gdGhlIHJlcG9ydGVkIHNjb3BlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZG9wdGlvblN1bW1hcnkge1xuICBhY3RpdmVQaXBlbGluZXM6IG51bWJlcjtcbiAgdG90YWxQaXBlbGluZXM6IG51bWJlcjtcbiAgLyoqIFBpcGVsaW5lcyB0aGF0IHByb2R1Y2VkIGEgZGVwbG95IHJvdyDigJQgaS5lLiBvbmVzIERPUkEgY2FuIHNlZS4gKi9cbiAgZGVwbG95VHJhY2tlZFBpcGVsaW5lczogbnVtYmVyO1xuICAvKiogQnkgYGNyZWF0aW9uX3NvdXJjZWAsIGZvciBcImFyZSB0aGUgZ29sZGVuIHBhdGhzIGJlaW5nIHVzZWRcIi4gKi9cbiAgYnlTb3VyY2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIC8qKiBUZWFtcyBpbiB0aGUgcm9sbHVwIHRoYXQgaGFkIGFjdGl2aXR5LiAxIGZvciBhIHNpbmdsZS1vcmcgcmVwb3J0LiAqL1xuICBhY3RpdmVUZWFtczogbnVtYmVyO1xuICAvKiogT25seSB3aGVuIHRoZSBvcmcgY29uZmlndXJlZCB0aGUgYXNzdW1wdGlvbi4gTmV2ZXIgcGxhdGZvcm0tc3VwcGxpZWQuICovXG4gIGVzdGltYXRlZE1pbnV0ZXNTYXZlZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBZG9wdGlvbiwgY292ZXJhZ2UgYW5kIGNyZWF0aW9uIHNvdXJjZS5cbiAqXG4gKiBgZGVwbG95VHJhY2tlZFBpcGVsaW5lc2AgaXMgdGhlIGhvbmVzdCBkZW5vbWluYXRvciBmb3IgZXZlcnl0aGluZyBET1JBIHNheXM6IGFcbiAqIHBpcGVsaW5lIHRoYXQgaGFzIG5vdCByZS1zeW50aGVkIHdpdGggZGVwbG95IHRhZ3MgcHJvZHVjZXMgbm8gZGVwbG95IHJvd3MsIHNvIGl0XG4gKiBpcyBpbnZpc2libGUgdG8gZGVwbG95bWVudCBmcmVxdWVuY3kg4oCUIGFuZCByZXBvcnRpbmcgXCI0IGRlcGxveXNcIiB3aXRob3V0IHNheWluZ1xuICogdGhhdCAyMCBvZiAzMCBwaXBlbGluZXMgY2Fubm90IGJlIHNlZW4gaXMgdGhlIHNpbmdsZSBtb3N0IG1pc2xlYWRpbmcgdGhpbmcgdGhpc1xuICogZmVhdHVyZSBjb3VsZCBkby5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFkb3B0aW9uKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgdGltZVNhdmVkTWludXRlcz86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPEFkb3B0aW9uU3VtbWFyeT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggc2NvcGVkIEFTIChcbiAgICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgb3JnX2lkLCBjcmVhdGlvbl9zb3VyY2VcbiAgICAgIEZST00gcGlwZWxpbmVzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICksXG4gICAgYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZCwgb3JnX2lkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdGFnZV9uYW1lID0gJycgQU5EIHJ1bnMgPiAwXG4gICAgKSxcbiAgICB0cmFja2VkIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlcGxveWVkX2F0ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkZXBsb3llZF9hdCA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgIClcbiAgICBTRUxFQ1RcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBzY29wZWQpOjppbnQgQVMgdG90YWxfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIGFjdGl2ZSk6OmludCBBUyBhY3RpdmVfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVChESVNUSU5DVCBvcmdfaWQpIEZST00gYWN0aXZlKTo6aW50IEFTIGFjdGl2ZV90ZWFtcyxcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSB0cmFja2VkKTo6aW50IEFTIGRlcGxveV90cmFja2VkLFxuICAgICAgKFNFTEVDVCBDT0FMRVNDRShqc29uYl9vYmplY3RfYWdnKENPQUxFU0NFKGNyZWF0aW9uX3NvdXJjZSwgJ3Vua25vd24nKSwgbiksICd7fSc6Ompzb25iKVxuICAgICAgICAgRlJPTSAoU0VMRUNUIGNyZWF0aW9uX3NvdXJjZSwgQ09VTlQoKik6OmludCBBUyBuIEZST00gc2NvcGVkIEdST1VQIEJZIGNyZWF0aW9uX3NvdXJjZSkgc1xuICAgICAgKSBBUyBieV9zb3VyY2VcbiAgYCkpO1xuICBjb25zdCByID0gcm93c09mKHJvd3MpWzBdID8/IHt9O1xuICBjb25zdCBjcmVhdGVkID0gbnVtKHIudG90YWxfcGlwZWxpbmVzKTtcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFBpcGVsaW5lczogY3JlYXRlZCxcbiAgICBhY3RpdmVQaXBlbGluZXM6IG51bShyLmFjdGl2ZV9waXBlbGluZXMpLFxuICAgIGFjdGl2ZVRlYW1zOiBNYXRoLm1heCgxLCBudW0oci5hY3RpdmVfdGVhbXMpKSxcbiAgICBkZXBsb3lUcmFja2VkUGlwZWxpbmVzOiBudW0oci5kZXBsb3lfdHJhY2tlZCksXG4gICAgYnlTb3VyY2U6IChyLmJ5X3NvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA/PyB7fSxcbiAgICAvLyBPbmx5IHdoZW4gdGhlIE9SRyBjb25maWd1cmVkIHRoZSBhc3N1bXB0aW9uIOKAlCBhIHBsYXRmb3JtLXN1cHBsaWVkIG51bWJlclxuICAgIC8vIGhlcmUgd291bGQgYmUgdGhlIHBsYXRmb3JtIG1hcmtpbmcgaXRzIG93biBob21ld29yay5cbiAgICBlc3RpbWF0ZWRNaW51dGVzU2F2ZWQ6IHRpbWVTYXZlZE1pbnV0ZXMgJiYgdGltZVNhdmVkTWludXRlcyA+IDAgPyBjcmVhdGVkICogdGltZVNhdmVkTWludXRlcyA6IG51bGwsXG4gIH07XG59XG5cbi8qKiBPbmUgcGlwZWxpbmUncyBmYWlsdXJlIHN0cmVhayBhbmQgbGFzdCBzdWNjZXNzZnVsIGRheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdHJlYWtSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYWlsdXJlcyBpbiB0aGUgdHJhaWxpbmcgcnVuIG9mIGRheXMgb24gd2hpY2ggTk9USElORyBzdWNjZWVkZWQuXG4gICAqXG4gICAqIEEgTE9XRVIgQk9VTkQsIGFuZCBkZWxpYmVyYXRlbHkgc28uIFRoZSByb2xsdXAgaXMgcGVyIGRheSwgc28gd2l0aGluIHRoZSBtb3N0XG4gICAqIHJlY2VudCBkYXkgdGhhdCBkaWQgaGF2ZSBhIHN1Y2Nlc3MgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgd2hldGhlciB0aGUgZmFpbHVyZXNcbiAgICogY2FtZSBiZWZvcmUgb3IgYWZ0ZXIgaXQg4oCUIHRoYXQgZGF5IGlzIGV4Y2x1ZGVkIHJhdGhlciB0aGFuIGd1ZXNzZWQgYXQuIFdoYXRcbiAgICogc3Vydml2ZXMgaXMgYSBydW4gb2YgZmFpbHVyZXMgd2l0aCBubyBzdWNjZXNzIGFueXdoZXJlIGJldHdlZW4gdGhlbSwgd2hpY2ggaXNcbiAgICogZXhhY3RseSB0aGUgY2xhaW0gdGhlIGZpbmRpbmcgbWFrZXMuXG4gICAqL1xuICBjb25zZWN1dGl2ZUZhaWx1cmVzOiBudW1iZXI7XG4gIC8qKiBUaGUgbGFzdCBkYXkgd2l0aCBhdCBsZWFzdCBvbmUgc3VjY2Vzcywgb3IgbnVsbCB3aXRoaW4gdGhlIGxvb2tiYWNrLiAqL1xuICBsYXN0U3VjY2Vzc0F0OiBEYXRlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBGYWlsdXJlIHN0cmVha3MgYW5kIGxhc3Qtc3VjY2VzcyBkYXRlcywgZm9yIHRoZSBuZWVkcy1hdHRlbnRpb24gcnVsZXMuXG4gKlxuICogUmVhZHMgdGhlIGRhaWx5IHJvbGx1cCwgbm90IGBwaXBlbGluZV9ldmVudHNgIOKAlCB0aGUgc2FtZSByZWFzb24gYXMgZXZlcnl0aGluZ1xuICogZWxzZSBoZXJlOiBhIHN0cmVhayB0aGF0IGVuZGVkIHRocmVlIHdlZWtzIGFnbyBtdXN0IHN0aWxsIGJlIHJlYWRhYmxlIGFmdGVyXG4gKiByZXRlbnRpb24gaGFzIHN3ZXB0IHRoZSBldmVudHMgdGhhdCBwcm9kdWNlZCBpdC5cbiAqXG4gKiBgbG9va2JhY2tEYXlzYCBleHRlbmRzIFBBU1QgdGhlIHdpbmRvdyBvbiBwdXJwb3NlLiBcIkxhc3Qgc3VjY2VlZGVkIDEyIGRheXMgYWdvXCJcbiAqIGlzIHRoZSBmaW5kaW5nIGEgd2Vla2x5IHJlcG9ydCBtb3N0IG5lZWRzLCBhbmQgYSBxdWVyeSBib3VuZGVkIGJ5IGEgNy1kYXkgd2luZG93XG4gKiBjb3VsZCBuZXZlciBwcm9kdWNlIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVTdHJlYWtzKFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIGxvb2tiYWNrRGF5cyA9IDkwLFxuKTogUHJvbWlzZTxQaXBlbGluZVN0cmVha1Jvd1tdPiB7XG4gIGNvbnN0IHNpbmNlID0gbmV3IERhdGUobmV3IERhdGUoc2NvcGUudG8pLmdldFRpbWUoKSAtIGxvb2tiYWNrRGF5cyAqIDg2XzQwMF8wMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCBkYXlzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgZGF5LFxuICAgICAgICAgICAgIFNVTShzdWNjZWVkZWQpOjppbnQgQVMgc3VjY2VlZGVkLFxuICAgICAgICAgICAgIFNVTShmYWlsZWQpOjppbnQgICAgQVMgZmFpbGVkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3NpbmNlfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgR1JPVVAgQlkgcGlwZWxpbmVfaWQsIGRheVxuICAgICksXG4gICAgbGFzdF9vayBBUyAoXG4gICAgICBTRUxFQ1QgcGlwZWxpbmVfaWQsIE1BWChkYXkpIEFTIGxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgIEZST00gZGF5cyBXSEVSRSBzdWNjZWVkZWQgPiAwXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgIClcbiAgICBTRUxFQ1QgZC5waXBlbGluZV9pZCxcbiAgICAgICAgICAgbC5sYXN0X3N1Y2Nlc3NfZGF5LFxuICAgICAgICAgICBDT0FMRVNDRShTVU0oZC5mYWlsZWQpIEZJTFRFUiAoXG4gICAgICAgICAgICAgV0hFUkUgbC5sYXN0X3N1Y2Nlc3NfZGF5IElTIE5VTEwgT1IgZC5kYXkgPiBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgICAgICAgKSwgMCk6OmludCBBUyBzdHJlYWtcbiAgICBGUk9NIGRheXMgZFxuICAgIExFRlQgSk9JTiBsYXN0X29rIGwgT04gbC5waXBlbGluZV9pZCA9IGQucGlwZWxpbmVfaWRcbiAgICBHUk9VUCBCWSBkLnBpcGVsaW5lX2lkLCBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgY29uc2VjdXRpdmVGYWlsdXJlczogbnVtKHIuc3RyZWFrKSxcbiAgICBsYXN0U3VjY2Vzc0F0OiByLmxhc3Rfc3VjY2Vzc19kYXkgPyBuZXcgRGF0ZShTdHJpbmcoci5sYXN0X3N1Y2Nlc3NfZGF5KSkgOiBudWxsLFxuICB9KSk7XG59XG5cbi8qKlxuICogUGlwZWxpbmVzIHRoYXQgUkFOIGluIHRoZSB3aW5kb3cgYnV0IHByb2R1Y2VkIG5vIGRlcGxveSByb3dzLlxuICpcbiAqIEEgbWVhc3VyZW1lbnQgZ2FwLCBub3QgYSBmYWlsdXJlLCBhbmQgdGhlIHJlYXNvbiBhIGRlcGxveW1lbnQtZnJlcXVlbmN5IG51bWJlciBjYW5cbiAqIGJlIHF1aWV0bHkgd3Jvbmc6IGEgcGlwZWxpbmUgd2hvc2Ugc3ludGggcHJlZGF0ZXMgdGhlIGBwYi5kZXBsb3lzYCB0YWdzIGRlcGxveXNcbiAqIHBlcmZlY3RseSB3ZWxsIGFuZCBpcyBpbnZpc2libGUgdG8gZXZlcnkgRE9SQSBhZ2dyZWdhdGUuIE5vdGhpbmcgZWxzZSBpbiB0aGVcbiAqIHJlcG9ydCB3b3VsZCBzYXkgc28uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVbnRyYWNrZWRQaXBlbGluZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICAgSEFWSU5HIFNVTShydW5zKSA+IDBcbiAgICApLFxuICAgIHRyYWNrZWQgQVMgKFxuICAgICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgKVxuICAgIFNFTEVDVCBhLnBpcGVsaW5lX2lkIEZST00gYWN0aXZlIGFcbiAgICBXSEVSRSBOT1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHRyYWNrZWQgdCBXSEVSRSB0LnBpcGVsaW5lX2lkID0gYS5waXBlbGluZV9pZClcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gU3RyaW5nKHIucGlwZWxpbmVfaWQpKTtcbn1cblxuLyoqXG4gKiBQaXBlbGluZXMgcnVubmluZyBhIHBsdWdpbiB2ZXJzaW9uIHdpdGggYW4gT1BFTiBDcml0aWNhbCBleHBvc3VyZS5cbiAqXG4gKiBQb2ludC1pbi10aW1lLCBub3Qgd2luZG93ZWQ6IHdoYXQgbWF0dGVycyBpcyB3aGV0aGVyIHRoZSBwaXBlbGluZSBpcyBydW5uaW5nIG9uZVxuICogTk9XLiBBIENyaXRpY2FsIHRoYXQgd2FzIG9wZW4gbGFzdCBUdWVzZGF5IGFuZCBpcyBmaXhlZCB0b2RheSBpcyBub3Qgc29tZXRoaW5nIHRvXG4gKiBwdXQgaW4gZnJvbnQgb2YgYSBtYW5hZ2VyLCBhbmQgYGZpeGVkX2F0YCBpcyB3aGF0IHNheXMgc28uXG4gKlxuICogVGhlIFNBTUUgbGl2ZSBwcmVkaWNhdGUgYXMgdGhlIHZ1bG5lcmFiaWxpdHkgc2VjdGlvbiAoYGxpdmVFeHBvc3VyZVByZWRpY2F0ZWApOlxuICogYW4gYWNjZXB0YW5jZSBzdGlsbCBpbiBmb3JjZSBhbmQgYSBmYWxzZSBwb3NpdGl2ZSBhcmUgZXhjbHVkZWQg4oCUIHNvbWVvbmUgd2l0aFxuICogdGhlIGF1dGhvcml0eSB0byBkZWNpZGUgaGFzIGRvbmUgc28gaW4gd3JpdGluZyDigJQgd2hpbGUgYW4gYWNjZXB0YW5jZSBQQVNUIGl0c1xuICogZGVhZGxpbmUgY291bnRzIGFnYWluLCBiZWNhdXNlIHRoYXQgaXMgd2hhdCB0aGUgZGVhZGxpbmUgd2FzIGZvci4gVGhlIHR3b1xuICogcmVhZGVycyBvbmNlIGRpc2FncmVlZCAodGhpcyBvbmUga2VwdCBmYWxzZSBwb3NpdGl2ZXMgYW5kIGRyb3BwZWQgZXhwaXJlZFxuICogYWNjZXB0YW5jZXMpLCBzbyB0aGUgcGFuZWwgYW5kIHRoZSBuZWVkcy1hdHRlbnRpb24gbGlzdCBjb250cmFkaWN0ZWQgZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZ1bG5lcmFibGVQaXBlbGluZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmVcbiAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgIEFORCBjcml0aWNhbF9jb3VudCA+IDBcbiAgICAgIEFORCAke2xpdmVFeHBvc3VyZVByZWRpY2F0ZShub3cpfVxuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiBTdHJpbmcoci5waXBlbGluZV9pZCkpO1xufVxuXG4vKipcbiAqIFdoZW4gZWFjaCBwaXBlbGluZSBpbiB0aGUgd2luZG93IHdhcyBsYXN0IGNoYW5nZWQuXG4gKlxuICogYHBpcGVsaW5lcy51cGRhdGVkX2F0YCwgbm90IGFuIGF1ZGl0IHF1ZXJ5OiB0aGUgYXVkaXQgdHJhaWwgbGl2ZXMgaW4gYW5vdGhlciBzdG9yZVxuICogd2l0aCBpdHMgb3duIHJldGVudGlvbiwgYW5kIHRoZSBvbmUgZmFjdCB0aGlzIG5lZWRzIOKAlCBcIndhcyB0aGlzIHRvdWNoZWQgc2hvcnRseVxuICogYmVmb3JlIGl0IGJyb2tlXCIg4oCUIGlzIGFscmVhZHkgb24gdGhlIHJvdywgZHVyYWJseSwgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhlXG4gKiBjaGFuZ2Ugd2FzIG1hZGUgaW4uXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHN0YXRlZCByYXRoZXIgdGhhbiBoaWRkZW46IGB1cGRhdGVkX2F0YCBtb3ZlcyBmb3IgQU5ZIHdyaXRlLFxuICogaW5jbHVkaW5nIGEgcmVuYW1lLiBTbyB0aGUgZmluZGluZyBzYXlzIFwiYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZVwiLCB3aGljaCBpc1xuICogdHJ1ZSBvZiBhIHJlbmFtZSB0b28sIGFuZCBkb2VzIG5vdCBjbGFpbSB0byBuYW1lIHRoZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaXBlbGluZUNvbmZpZ0NoYW5nZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBEYXRlPj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgdXBkYXRlZF9hdFxuICAgIEZST00gcGlwZWxpbmVzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICBBTkQgdXBkYXRlZF9hdCBJUyBOT1QgTlVMTFxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8c3RyaW5nLCBEYXRlPigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3QgYXQgPSByLnVwZGF0ZWRfYXQgPyBuZXcgRGF0ZShTdHJpbmcoci51cGRhdGVkX2F0KSkgOiBudWxsO1xuICAgIGlmIChhdCAmJiAhTnVtYmVyLmlzTmFOKGF0LmdldFRpbWUoKSkpIG91dC5zZXQoU3RyaW5nKHIuaWQpLCBhdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLy8g4pSA4pSAIEhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSb3dzIGZyb20gYSByYXcgYGV4ZWN1dGVgLCB3aGljaGV2ZXIgc2hhcGUgdGhlIGRyaXZlciByZXR1cm5lZC4gKi9cbmZ1bmN0aW9uIHJvd3NPZihyZXN1bHQ6IHVua25vd24pOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4gcmVzdWx0IGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgY29uc3Qgcm93cyA9IChyZXN1bHQgYXMgeyByb3dzPzogdW5rbm93biB9KT8ucm93cztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cykgPyByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA6IFtdO1xufVxuXG4vKiogQSBjb3VudCBmcm9tIGEgZHJpdmVyIHRoYXQgbWF5IGhhbmQgYmFjayBhIHN0cmluZyBmb3IgYSBiaWdpbnQuICovXG5mdW5jdGlvbiBudW0odjogdW5rbm93bik6IG51bWJlciB7XG4gIGNvbnN0IG4gPSB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogTnVtYmVyKHYgPz8gMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogMDtcbn1cblxuZnVuY3Rpb24gaXNvT3JOdWxsKHY6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCF2KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZCA9IHYgaW5zdGFuY2VvZiBEYXRlID8gdiA6IG5ldyBEYXRlKFN0cmluZyh2KSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZC5nZXRUaW1lKCkpID8gbnVsbCA6IGQudG9JU09TdHJpbmcoKTtcbn1cbiJdfQ==
|
|
@@ -14,6 +14,8 @@ export interface DeployCandidate {
|
|
|
14
14
|
completedAt?: Date | null;
|
|
15
15
|
startedAt?: Date | null;
|
|
16
16
|
createdAt?: Date | null;
|
|
17
|
+
/** The EventBridge event id of the row, when its producer had one. */
|
|
18
|
+
sourceEventId?: string | null;
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Is this row a deploy?
|
|
@@ -106,6 +106,7 @@ export async function upsertDeployments(rows) {
|
|
|
106
106
|
commitCount: row.commitCount ?? null,
|
|
107
107
|
commitSha: row.commitSha ?? null,
|
|
108
108
|
leadTimeGap: leadTimeGapOf(row),
|
|
109
|
+
sourceEventId: row.sourceEventId ?? null,
|
|
109
110
|
}];
|
|
110
111
|
});
|
|
111
112
|
if (values.length === 0)
|
|
@@ -128,6 +129,9 @@ export async function upsertDeployments(rows) {
|
|
|
128
129
|
// time and a reason it could not be resolved must never coexist.
|
|
129
130
|
leadTimeGap: sql `CASE WHEN COALESCE(excluded.earliest_commit_at, ${schema.doraDeployment.earliestCommitAt}) IS NOT NULL
|
|
130
131
|
THEN NULL ELSE excluded.lead_time_gap END`,
|
|
132
|
+
// The deploy event that last wrote the row, so the DORA number traces
|
|
133
|
+
// back to it; a producer without an id never blanks a recorded one.
|
|
134
|
+
sourceEventId: sql `COALESCE(excluded.source_event_id, ${schema.doraDeployment.sourceEventId})`,
|
|
131
135
|
updatedAt: new Date(),
|
|
132
136
|
},
|
|
133
137
|
})
|
|
@@ -200,4 +204,4 @@ export async function correlateIncident(orgId, environment, openedAt, windowHour
|
|
|
200
204
|
isNull(schema.doraDeployment.failedAt))));
|
|
201
205
|
return { executionId: deploy.executionId, confidence };
|
|
202
206
|
}
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXJvbGx1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL2RlcGxveS1yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFtQjdDLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdEQUFnRDtBQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUUvRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFvQjtJQUNoRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztXQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7V0FDakIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO1dBQ2pCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFrRTtJQUM5RixJQUFJLEdBQUcsQ0FBQyxlQUFlO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7SUFDekMsSUFBSSxRQUFRLEtBQUssVUFBVSxJQUFJLFFBQVEsS0FBSyxjQUFjLElBQUksUUFBUSxLQUFLLG9CQUFvQjtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ2pILE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxTQUFTLFlBQVksQ0FBQyxHQUFvQjtJQUN4QyxPQUFPLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxJQUFrRjtJQUVsRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFFbkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzNCLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFDckQsNkVBQTZFO1FBQzdFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsZ0JBQWdCO1FBQ2hCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQjtZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1QsT0FBTyxDQUFDO2dCQUNOLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFxQjtnQkFDdEMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFxQjtnQkFDdEMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO2dCQUMxQixVQUFVO2dCQUNWLFNBQVM7Z0JBQ1QsZ0JBQWdCO2dCQUNoQixlQUFlLEVBQUUsV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzlFLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3BDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUk7Z0JBQ2hDLFdBQVcsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO2FBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUVsQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUN0RixrQkFBa0IsQ0FBQztZQUNsQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztZQUM5RSxHQUFHLEVBQUU7Z0JBQ0gsU0FBUyxFQUFFLEdBQUcsQ0FBQSxvQkFBb0I7Z0JBQ2xDLFVBQVUsRUFBRSxHQUFHLENBQUEsc0JBQXNCO2dCQUNyQyxVQUFVLEVBQUUsR0FBRyxDQUFBLGtDQUFrQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRztnQkFDcEYsdUVBQXVFO2dCQUN2RSxpRUFBaUU7Z0JBQ2pFLGdCQUFnQixFQUFFLEdBQUcsQ0FBQSx5Q0FBeUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsR0FBRztnQkFDdkcsZUFBZSxFQUFFLEdBQUcsQ0FBQSx3Q0FBd0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUc7Z0JBQ3BHLFdBQVcsRUFBRSxHQUFHLENBQUEsbUNBQW1DLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHO2dCQUN2RixTQUFTLEVBQUUsR0FBRyxDQUFBLGlDQUFpQyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRztnQkFDakYsc0VBQXNFO2dCQUN0RSxpRUFBaUU7Z0JBQ2pFLFdBQVcsRUFBRSxHQUFHLENBQUEsbURBQW1ELE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO3NEQUM3RDtnQkFDNUMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2FBQ3RCO1NBQ0YsQ0FBQzthQUNELFNBQVMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFRLE1BQW9CLENBQUMsTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyw2RUFBNkUsRUFBRTtZQUN6RixPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDdEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxLQUFhLEVBQ2IsV0FBbUIsRUFDbkIsT0FBOEIsRUFDOUIsRUFBUSxFQUNSLFdBQW9CO0lBRXBCLE1BQU0sS0FBSyxHQUFHLFdBQVc7UUFDdkIsQ0FBQyxDQUFDLEdBQUcsQ0FDSCxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQ2xELEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFDbEQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUN2QztRQUNELENBQUMsQ0FBQyxHQUFHLENBQ0gsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUNsRCxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQ3ZDLENBQUM7SUFDSixnRkFBZ0Y7SUFDaEYsZ0ZBQWdGO0lBQ2hGLE1BQU0sR0FBRyxHQUFHLE9BQU8sS0FBSyxRQUFRO1FBQzlCLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUU7UUFDekMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQzlDLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQ2pFLEtBQUssQ0FBQyxPQUFPLEtBQUssVUFBVTtRQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsY0FBYyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLEtBQWEsRUFDYixXQUFtQixFQUNuQixRQUFjLEVBQ2QsV0FBbUI7SUFFbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUMxRSxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoRCxXQUFXLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXO1FBQzlDLFVBQVUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVU7S0FDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1NBQzNCLEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUN0QyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQ2xELEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFDekMsR0FBRyxDQUFBLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLE9BQU8sUUFBUSxFQUFFLEVBQ3ZELEdBQUcsQ0FBQSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxPQUFPLFdBQVcsRUFBRSxDQUMzRCxDQUFDO1NBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxPQUFPLENBQUM7U0FDdEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixNQUFNLE1BQU0sR0FBSSxJQUF5RCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFekIsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw0REFBNEQ7SUFDNUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUN4QyxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUV2RyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1NBQ3hELEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7U0FDckYsS0FBSyxDQUFDLEdBQUcsQ0FDUixFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUN6RCxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ2xELDJFQUEyRTtJQUMzRSx3RUFBd0U7SUFDeEUsMkNBQTJDO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNOLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogV3JpdGluZyBgZG9yYV9kZXBsb3ltZW50c2AgYXQgaW5nZXN0LlxuICpcbiAqIEV2ZXJ5IERPUkEgbnVtYmVyIHVzZWQgdG8gYmUgZGVyaXZlZCBieSBzY2FubmluZyBgcGlwZWxpbmVfZXZlbnRzYCBwZXIgcmVhZC5cbiAqIFR3byB0aGluZ3Mgd2VyZSB3cm9uZyB3aXRoIHRoYXQsIGFuZCBvbmx5IG9uZSBvZiB0aGVtIHdhcyBzcGVlZDpcbiAqXG4gKiAgMS4gTEVBRCBUSU1FIFdBUyBET1VCTEUtQ09VTlRFRCBJTiBXQUlUSU5HLiBBIGRlcGxveSBlbWl0cyBhIFNUQUdFIGV2ZW50IGFuZFxuICogICAgIGFuIEFDVElPTiBldmVudCwgYW5kIGJvdGggY2FycnkgdGhlIHNhbWUgcmVzb2x2ZWQgY29tbWl0IHJhbmdlLiBBbnlcbiAqICAgICBhZ2dyZWdhdGUgb3ZlciBldmVudHMgdGhlcmVmb3JlIGNvdW50ZWQgb25lIGRlcGxveSdzIGxlYWQgdGltZSB0d2ljZSB0aGVcbiAqICAgICBtb21lbnQgc29tZWJvZHkgYWRkZWQgdGhlIEFDVElPTiByb3dzIHRvIGEgcXVlcnkuIFN0b3JpbmcgaXQgb25jZSBwZXJcbiAqICAgICBleGVjdXRpb24gbWFrZXMgdGhhdCBtaXN0YWtlIHVuYXZhaWxhYmxlIHJhdGhlciB0aGFuIG1lcmVseSB1bm1hZGUuXG4gKiAgMi4gVEhFIE5VTUJFUlMgRElEIE5PVCBTVVJWSVZFIFJFVEVOVElPTi4gVGhlIHN3ZWVwIHB1cmdlcyByYXcgZXZlbnRzIGJ5XG4gKiAgICAgdGllciwgc28gYSBxdWFydGVybHkgcmVwb3J0IGNvdWxkIG5vdCBiZSByZWNvbXB1dGVkIG9uY2UgaXRzIGV2ZW50cyB3ZXJlXG4gKiAgICAgZ29uZSDigJQgd2hpY2ggaXMgZXhhY3RseSB3aGVuIHNvbWVvbmUgYXNrcyBhYm91dCBpdC5cbiAqXG4gKiBBIGRlcGxveSBpcyBhIFNUQUdFIGV2ZW50IGNhcnJ5aW5nIGFuIGBlbnZpcm9ubWVudGA6IHRoZSBzYW1lIHByZWRpY2F0ZSB0aGVcbiAqIERPUkEgcXVlcmllcyBoYXZlIGFsd2F5cyB1c2VkLCBub3cgYXBwbGllZCBvbmNlIGF0IHdyaXRlIHRpbWUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBlcnJvck1lc3NhZ2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBhbmQsIGVxLCBpc051bGwsIHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgTGVhZFRpbWVHYXAgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9zY2hlbWEvcmVwb3J0aW5nLWFuYWx5dGljcy5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdkZXBsb3ktcm9sbHVwJyk7XG5cbi8qKiBUaGUgZmllbGRzIG9mIGFuIGluc2VydGVkIGV2ZW50IHJvdyB0aGlzIG1vZHVsZSBuZWVkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95Q2FuZGlkYXRlIHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVJZDogc3RyaW5nIHwgbnVsbDtcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyB8IG51bGw7XG4gIGV2ZW50VHlwZTogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgc3RhZ2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBlbnZpcm9ubWVudDogc3RyaW5nIHwgbnVsbDtcbiAgY29tbWl0U2hhPzogc3RyaW5nIHwgbnVsbDtcbiAgY29tbWl0VGltZXN0YW1wPzogRGF0ZSB8IG51bGw7XG4gIGNvbW1pdENvdW50PzogbnVtYmVyIHwgbnVsbDtcbiAgY29tcGxldGVkQXQ/OiBEYXRlIHwgbnVsbDtcbiAgc3RhcnRlZEF0PzogRGF0ZSB8IG51bGw7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsO1xufVxuXG4vKiogU3RhdHVzZXMgYW4gZXZlbnQgdXNlcyBmb3IgXCJ0aGlzIGZpbmlzaGVkLCBhbmQgaXQgd29ya2VkXCIuICovXG5jb25zdCBTVUNDRUVERUQgPSBuZXcgU2V0KFsnU1VDQ0VFREVEJywgJ1NVQ0NFU1MnXSk7XG4vKiog4oCmYW5kIGZvciBcInRoaXMgZmluaXNoZWQsIGFuZCBpdCBkaWQgbm90XCIuICovXG5jb25zdCBGQUlMRUQgPSBuZXcgU2V0KFsnRkFJTEVEJywgJ0ZBSUxVUkUnLCAnQ0FOQ0VMRUQnLCAnQ0FOQ0VMTEVEJywgJ1NUT1BQRUQnLCAnVElNRURfT1VUJ10pO1xuXG4vKipcbiAqIElzIHRoaXMgcm93IGEgZGVwbG95P1xuICpcbiAqIEEgU1RBR0UgZXZlbnQgd2l0aCBhbiBlbnZpcm9ubWVudCwgaW4gYSB0ZXJtaW5hbCBzdGF0ZS4gYElOX1BST0dSRVNTYCByb3dzIGFyZVxuICogc2tpcHBlZCBkZWxpYmVyYXRlbHk6IGEgZGVwbG95IHRoYXQgaGFzIHN0YXJ0ZWQgaGFzIG5vIGR1cmF0aW9uLCBubyBvdXRjb21lIGFuZFxuICogbm8gcGxhY2UgaW4gYSBkZXBsb3ltZW50LWZyZXF1ZW5jeSBjb3VudCwgYW5kIHdyaXRpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICogaW4tZmxpZ2h0IGRlcGxveSBsb29rIGxpa2UgYSBzdWNjZXNzZnVsIG9uZSB1bnRpbCBpdHMgbmV4dCBldmVudCBsYW5kZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlcGxveUV2ZW50KHJvdzogRGVwbG95Q2FuZGlkYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiByb3cuZXZlbnRUeXBlID09PSAnU1RBR0UnXG4gICAgJiYgISFyb3cuZW52aXJvbm1lbnRcbiAgICAmJiAhIXJvdy5leGVjdXRpb25JZFxuICAgICYmIChTVUNDRUVERUQuaGFzKHJvdy5zdGF0dXMpIHx8IEZBSUxFRC5oYXMocm93LnN0YXR1cykpO1xufVxuXG4vKipcbiAqIFdoeSBsZWFkIHRpbWUgaXMgYWJzZW50IGZvciBhIGRlcGxveSB0aGF0IGhhcyBubyBjb21taXQgdGltZXN0YW1wLlxuICpcbiAqIGBub19jb21taXRfZGF0YWAgaXMgdGhlIGhvbmVzdCBkZWZhdWx0OiB0aGUgZm9yd2FyZGVyIHJlc29sdmVzIHRoZSBjb21taXQgcmFuZ2VcbiAqIGluLWFjY291bnQgYW5kIHJlcG9ydHMgdGhlIHJlYXNvbiBpdCBjb3VsZCBub3QsIHNvIGFueXRoaW5nIGVsc2UgaGVyZSB3b3VsZCBiZVxuICogdGhpcyBtb2R1bGUgZ3Vlc3NpbmcuIFRoZSByZWFzb24gaXQgRElEIHJlcG9ydCByaWRlcyBvbiB0aGUgZXZlbnQncyBgZGV0YWlsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlYWRUaW1lR2FwT2Yocm93OiBEZXBsb3lDYW5kaWRhdGUgJiB7IGRldGFpbD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB9KTogTGVhZFRpbWVHYXAgfCBudWxsIHtcbiAgaWYgKHJvdy5jb21taXRUaW1lc3RhbXApIHJldHVybiBudWxsO1xuICBjb25zdCByZXBvcnRlZCA9IHJvdy5kZXRhaWw/LmxlYWRUaW1lR2FwO1xuICBpZiAocmVwb3J0ZWQgPT09ICdub190b2tlbicgfHwgcmVwb3J0ZWQgPT09ICdyYXRlX2xpbWl0ZWQnIHx8IHJlcG9ydGVkID09PSAndW5zdXBwb3J0ZWRfc291cmNlJykgcmV0dXJuIHJlcG9ydGVkO1xuICByZXR1cm4gJ25vX2NvbW1pdF9kYXRhJztcbn1cblxuLyoqIFdoZW4gdGhlIGRlcGxveSBmaW5pc2hlZC4gRmFsbHMgYmFjayB0aHJvdWdoIHRoZSBldmVudCdzIG93biB0aW1lc3RhbXBzLiAqL1xuZnVuY3Rpb24gZGVwbG95ZWRBdE9mKHJvdzogRGVwbG95Q2FuZGlkYXRlKTogRGF0ZSB8IG51bGwge1xuICByZXR1cm4gcm93LmNvbXBsZXRlZEF0ID8/IHJvdy5zdGFydGVkQXQgPz8gcm93LmNyZWF0ZWRBdCA/PyBudWxsO1xufVxuXG4vKipcbiAqIFVwc2VydCB0aGUgZGVwbG95IHJvd3MgZm9yIGEgYmF0Y2ggb2YgZnJlc2hseS1pbnNlcnRlZCBldmVudHMuXG4gKlxuICogT05FIFJPVyBQRVIgKGV4ZWN1dGlvbiwgZW52aXJvbm1lbnQpLCBzbyBhIHJlZGVsaXZlcmVkIGV2ZW50IHJlZnJlc2hlcyB0aGUgcm93XG4gKiByYXRoZXIgdGhhbiBhZGRpbmcgYSBzZWNvbmQgZGVwbG95IOKAlCB0aGUgc2FtZSBhdC1sZWFzdC1vbmNlIHByb2JsZW0gdGhlIGV2ZW50XG4gKiBpbnNlcnQgc29sdmVzIHdpdGggaXRzIHBhcnRpYWwgdW5pcXVlIGluZGV4LlxuICpcbiAqIFRoZSBjb25mbGljdCB1cGRhdGUgZGVsaWJlcmF0ZWx5IGRvZXMgTk9UIHRvdWNoIGBmYWlsZWRfYXRgIC8gYHJlc3RvcmVkX2F0YDpcbiAqIHRob3NlIGFyZSBzZXQgYnkgdGhlIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VycyBhbmQgYnkgaW5jaWRlbnQgY29ycmVsYXRpb24sXG4gKiBhbmQgYSBsYXRlIHJlZGVsaXZlcnkgb2YgdGhlIG9yaWdpbmFsIGRlcGxveSBldmVudCBtdXN0IG5vdCBlcmFzZSBhIHJlY29yZGVkXG4gKiBwcm9kdWN0aW9uIGZhaWx1cmUuXG4gKlxuICogTmV2ZXIgdGhyb3dzLiBBbiBpbmdlc3QgYmF0Y2ggdGhhdCBsYW5kZWQgaXRzIGV2ZW50cyBoYXMgZG9uZSB0aGUgZHVyYWJsZSBwYXJ0XG4gKiBvZiBpdHMgam9iOyBmYWlsaW5nIHRoZSB3aG9sZSBiYXRjaCBiZWNhdXNlIGEgZGVyaXZlZCByb3cgY291bGQgbm90IGJlIHdyaXR0ZW5cbiAqIHdvdWxkIHR1cm4gYSByb2xsdXAgYnVnIGludG8gZGF0YSBsb3NzLCBhbmQgdGhlIGJhY2tmaWxsIGNhbiByZWJ1aWxkIHRoZXNlIGZyb21cbiAqIHRoZSBldmVudHMgd2hpbGUgdGhleSBleGlzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwc2VydERlcGxveW1lbnRzKFxuICByb3dzOiBSZWFkb25seUFycmF5PERlcGxveUNhbmRpZGF0ZSAmIHsgZGV0YWlsPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIH0+LFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgZGVwbG95cyA9IHJvd3MuZmlsdGVyKGlzRGVwbG95RXZlbnQpO1xuICBpZiAoZGVwbG95cy5sZW5ndGggPT09IDApIHJldHVybiAwO1xuXG4gIGNvbnN0IHZhbHVlcyA9IGRlcGxveXMuZmxhdE1hcCgocm93KSA9PiB7XG4gICAgY29uc3QgZGVwbG95ZWRBdCA9IGRlcGxveWVkQXRPZihyb3cpO1xuICAgIGlmICghZGVwbG95ZWRBdCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHN1Y2NlZWRlZCA9IFNVQ0NFRURFRC5oYXMocm93LnN0YXR1cyk7XG4gICAgY29uc3QgZWFybGllc3RDb21taXRBdCA9IHJvdy5jb21taXRUaW1lc3RhbXAgPz8gbnVsbDtcbiAgICAvLyBMZWFkIHRpbWUgaXMgY29tbWl0IOKGkiBkZXBsb3ksIGFuZCBvbmx5IHdoZW4gYm90aCBlbmRzIGFyZSByZWFsLiBBIG5lZ2F0aXZlXG4gICAgLy8gZ2FwIG1lYW5zIHRoZSB0d28gdGltZXN0YW1wcyBjYW1lIGZyb20gZGlmZmVyZW50IGNsb2NrczsgaXQgaXMgZHJvcHBlZFxuICAgIC8vIHJhdGhlciB0aGFuIGNsYW1wZWQgdG8gemVybywgYmVjYXVzZSBcIjAgc2Vjb25kc1wiIGlzIGEgY2xhaW0gYW5kIFwidW5rbm93blwiXG4gICAgLy8gaXMgdGhlIHRydXRoLlxuICAgIGNvbnN0IGxlYWRTZWNvbmRzID0gZWFybGllc3RDb21taXRBdFxuICAgICAgPyBNYXRoLnJvdW5kKChkZXBsb3llZEF0LmdldFRpbWUoKSAtIGVhcmxpZXN0Q29tbWl0QXQuZ2V0VGltZSgpKSAvIDEwMDApXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIFt7XG4gICAgICBvcmdJZDogcm93Lm9yZ0lkLFxuICAgICAgZXhlY3V0aW9uSWQ6IHJvdy5leGVjdXRpb25JZCBhcyBzdHJpbmcsXG4gICAgICBlbnZpcm9ubWVudDogcm93LmVudmlyb25tZW50IGFzIHN0cmluZyxcbiAgICAgIHBpcGVsaW5lSWQ6IHJvdy5waXBlbGluZUlkLFxuICAgICAgZGVwbG95ZWRBdCxcbiAgICAgIHN1Y2NlZWRlZCxcbiAgICAgIGVhcmxpZXN0Q29tbWl0QXQsXG4gICAgICBsZWFkVGltZVNlY29uZHM6IGxlYWRTZWNvbmRzICE9PSBudWxsICYmIGxlYWRTZWNvbmRzID49IDAgPyBsZWFkU2Vjb25kcyA6IG51bGwsXG4gICAgICBjb21taXRDb3VudDogcm93LmNvbW1pdENvdW50ID8/IG51bGwsXG4gICAgICBjb21taXRTaGE6IHJvdy5jb21taXRTaGEgPz8gbnVsbCxcbiAgICAgIGxlYWRUaW1lR2FwOiBsZWFkVGltZUdhcE9mKHJvdyksXG4gICAgfV07XG4gIH0pO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsYW5kZWQgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5pbnNlcnQoc2NoZW1hLmRvcmFEZXBsb3ltZW50KS52YWx1ZXModmFsdWVzKVxuICAgICAgLm9uQ29uZmxpY3REb1VwZGF0ZSh7XG4gICAgICAgIHRhcmdldDogW3NjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50XSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgc3VjY2VlZGVkOiBzcWxgZXhjbHVkZWQuc3VjY2VlZGVkYCxcbiAgICAgICAgICBkZXBsb3llZEF0OiBzcWxgZXhjbHVkZWQuZGVwbG95ZWRfYXRgLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5waXBlbGluZV9pZCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQucGlwZWxpbmVJZH0pYCxcbiAgICAgICAgICAvLyBBIGxhdGVyIGV2ZW50IG1heSByZXNvbHZlIGEgY29tbWl0IHJhbmdlIHRoZSBmaXJzdCBvbmUgY291bGQgbm90LCBzb1xuICAgICAgICAgIC8vIHRoZXNlIGZpbGwgaW4g4oCUIGJ1dCBuZXZlciBibGFuayBvdXQgd2hhdCB3YXMgYWxyZWFkeSBtZWFzdXJlZC5cbiAgICAgICAgICBlYXJsaWVzdENvbW1pdEF0OiBzcWxgQ09BTEVTQ0UoZXhjbHVkZWQuZWFybGllc3RfY29tbWl0X2F0LCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5lYXJsaWVzdENvbW1pdEF0fSlgLFxuICAgICAgICAgIGxlYWRUaW1lU2Vjb25kczogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmxlYWRfdGltZV9zZWNvbmRzLCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5sZWFkVGltZVNlY29uZHN9KWAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5jb21taXRfY291bnQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdENvdW50fSlgLFxuICAgICAgICAgIGNvbW1pdFNoYTogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmNvbW1pdF9zaGEsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdFNoYX0pYCxcbiAgICAgICAgICAvLyBUaGUgZ2FwIGlzIGNsZWFyZWQgb25jZSBhIGNvbW1pdCB0aW1lc3RhbXAgYXJyaXZlczogYSByZXNvbHZlZCBsZWFkXG4gICAgICAgICAgLy8gdGltZSBhbmQgYSByZWFzb24gaXQgY291bGQgbm90IGJlIHJlc29sdmVkIG11c3QgbmV2ZXIgY29leGlzdC5cbiAgICAgICAgICBsZWFkVGltZUdhcDogc3FsYENBU0UgV0hFTiBDT0FMRVNDRShleGNsdWRlZC5lYXJsaWVzdF9jb21taXRfYXQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmVhcmxpZXN0Q29tbWl0QXR9KSBJUyBOT1QgTlVMTFxuICAgICAgICAgICAgVEhFTiBOVUxMIEVMU0UgZXhjbHVkZWQubGVhZF90aW1lX2dhcCBFTkRgLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucmV0dXJuaW5nKHsgZXhlY3V0aW9uSWQ6IHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCB9KSk7XG4gICAgcmV0dXJuIChsYW5kZWQgYXMgdW5rbm93bltdKS5sZW5ndGg7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdEZXBsb3kgcm9sbHVwIHVwc2VydCBmYWlsZWQ7IHRoZSBldmVudHMgbGFuZGVkIGFuZCBhIHJlYnVpbGQgY2FuIHJlY292ZXIgaXQnLCB7XG4gICAgICBkZXBsb3lzOiB2YWx1ZXMubGVuZ3RoLFxuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmVjb3JkIGEgcG9zdC1kZXBsb3kgb3V0Y29tZSBhZ2FpbnN0IHRoZSBkZXBsb3kgaXQgY29uY2VybnMuXG4gKlxuICogRGVub3JtYWxpemVkIG9udG8gYGRvcmFfZGVwbG95bWVudHNgIHNvIGNoYW5nZS1mYWlsdXJlIHJhdGUgYW5kXG4gKiB0aW1lLXRvLXJlc3RvcmUgYXJlIG9uZSBzY2FuIG92ZXIgdGhlIHdpbmRvdyBpbnN0ZWFkIG9mIGEgam9pbiBwZXIgcmVhZC4gVGhlXG4gKiBgZGVwbG95bWVudF9vdXRjb21lc2AgdGFibGUgc3RheXMgdGhlIGF1dGhvcml0eSDigJQgdGhpcyBpcyB0aGUgY29weSB0aGVcbiAqIGFnZ3JlZ2F0ZXMgdXNlLCBhbmQgaXQgaXMgcmVidWlsZGFibGUgZnJvbSBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RGVwbG95T3V0Y29tZShcbiAgb3JnSWQ6IHN0cmluZyxcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgb3V0Y29tZTogJ2ZhaWxlZCcgfCAncmVzdG9yZWQnLFxuICBhdDogRGF0ZSxcbiAgZW52aXJvbm1lbnQ/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgd2hlcmUgPSBlbnZpcm9ubWVudFxuICAgID8gYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBleGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZW52aXJvbm1lbnQsIGVudmlyb25tZW50KSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5vcmdJZCwgb3JnSWQpLFxuICAgIClcbiAgICA6IGFuZChcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgZXhlY3V0aW9uSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50Lm9yZ0lkLCBvcmdJZCksXG4gICAgKTtcbiAgLy8gQSBgcmVzdG9yZWRgIG1hcmtlciBvbmx5IG1lYW5zIHNvbWV0aGluZyBmb3IgYSBkZXBsb3kgdGhhdCB3YXMgbWFya2VkIGZhaWxlZDtcbiAgLy8gcmVjb3JkaW5nIGEgcmVzdG9yZSB3aXRoIG5vIGZhaWx1cmUgd291bGQgcHJvZHVjZSBhIG5lZ2F0aXZlIHRpbWUtdG8tcmVzdG9yZS5cbiAgY29uc3Qgc2V0ID0gb3V0Y29tZSA9PT0gJ2ZhaWxlZCdcbiAgICA/IHsgZmFpbGVkQXQ6IGF0LCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfVxuICAgIDogeyByZXN0b3JlZEF0OiBhdCwgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpIH07XG4gIGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnVwZGF0ZShzY2hlbWEuZG9yYURlcGxveW1lbnQpLnNldChzZXQpXG4gICAgLndoZXJlKG91dGNvbWUgPT09ICdyZXN0b3JlZCdcbiAgICAgID8gYW5kKHdoZXJlLCBzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZmFpbGVkQXR9IElTIE5PVCBOVUxMYClcbiAgICAgIDogd2hlcmUpKTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGUgYW4gaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95IHRvIGl0cyBlbnZpcm9ubWVudFxuICogd2l0aGluIHRoZSBjb3JyZWxhdGlvbiB3aW5kb3csIGFuZCBsYWJlbCBob3cgY29uZmlkZW50IHRoYXQgbGluayBpcy5cbiAqXG4gKiBUaGUgY29uZmlkZW5jZSBpcyB0aGUgcG9pbnQuIFwiVGhpcyBkZXBsb3kgYnJva2UgcHJvZHVjdGlvblwiIGFuZCBcImFuIGluY2lkZW50XG4gKiBvcGVuZWQgZWxldmVuIGhvdXJzIGFmdGVyIHRoaXMgZGVwbG95LCBhbmQgdGhlIHdpbmRvdyBoYXBwZW5zIHRvIGJlIHR3ZWx2ZVwiIGFyZVxuICogZGlmZmVyZW50IGNsYWltcywgYW5kIGEgbWFuYWdlciBhY3RzIGRpZmZlcmVudGx5IG9uIGVhY2gg4oCUIHNvIHRoZSByZXBvcnQgc2hvd3NcbiAqIHdoaWNoIG9uZSBpdCBpcyByYXRoZXIgdGhhbiBwcmVzZW50aW5nIGJvdGggYXMgYSBjaGFuZ2UgZmFpbHVyZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcnJlbGF0ZUluY2lkZW50KFxuICBvcmdJZDogc3RyaW5nLFxuICBlbnZpcm9ubWVudDogc3RyaW5nLFxuICBvcGVuZWRBdDogRGF0ZSxcbiAgd2luZG93SG91cnM6IG51bWJlcixcbik6IFByb21pc2U8eyBleGVjdXRpb25JZDogc3RyaW5nOyBjb25maWRlbmNlOiAnaGlnaCcgfCAnbWVkaXVtJyB8ICdsb3cnIH0gfCBudWxsPiB7XG4gIGNvbnN0IHdpbmRvd1N0YXJ0ID0gbmV3IERhdGUob3BlbmVkQXQuZ2V0VGltZSgpIC0gd2luZG93SG91cnMgKiAzNjAwXzAwMCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5zZWxlY3Qoe1xuICAgIGV4ZWN1dGlvbklkOiBzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsXG4gICAgZGVwbG95ZWRBdDogc2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXQsXG4gIH0pLmZyb20oc2NoZW1hLmRvcmFEZXBsb3ltZW50KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQub3JnSWQsIG9yZ0lkKSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5lbnZpcm9ubWVudCwgZW52aXJvbm1lbnQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LnN1Y2NlZWRlZCwgdHJ1ZSksXG4gICAgICBzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdH0gPD0gJHtvcGVuZWRBdH1gLFxuICAgICAgc3FsYCR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXR9ID49ICR7d2luZG93U3RhcnR9YCxcbiAgICApKVxuICAgIC5vcmRlckJ5KHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5kZXBsb3llZEF0fSBERVNDYClcbiAgICAubGltaXQoMSkpO1xuICBjb25zdCBkZXBsb3kgPSAocm93cyBhcyBBcnJheTx7IGV4ZWN1dGlvbklkOiBzdHJpbmc7IGRlcGxveWVkQXQ6IERhdGUgfT4pWzBdO1xuICBpZiAoIWRlcGxveSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gQ29uZmlkZW5jZSBieSBob3cgZWFybHkgaW4gdGhlIHdpbmRvdyBpdCBmZWxsLiBUaGUgdGhpcmRzIGFyZSBhIGp1ZGdlbWVudCxcbiAgLy8gYW5kIGEgc3RhdGVkIG9uZTogYW4gaW5jaWRlbnQgd2l0aGluIHRoZSBmaXJzdCB0aGlyZCBvZiB0aGUgd2luZG93IGFmdGVyIGFcbiAgLy8gZGVwbG95IGlzIHRoZSBjYXNlIHRoZSBET1JBIGRlZmluaXRpb24gaXMgYWN0dWFsbHkgYWJvdXQuXG4gIGNvbnN0IGVsYXBzZWQgPSBvcGVuZWRBdC5nZXRUaW1lKCkgLSBkZXBsb3kuZGVwbG95ZWRBdC5nZXRUaW1lKCk7XG4gIGNvbnN0IHdpbmRvd01zID0gd2luZG93SG91cnMgKiAzNjAwXzAwMDtcbiAgY29uc3QgY29uZmlkZW5jZSA9IGVsYXBzZWQgPD0gd2luZG93TXMgLyAzID8gJ2hpZ2gnIDogZWxhcHNlZCA8PSAod2luZG93TXMgKiAyKSAvIDMgPyAnbWVkaXVtJyA6ICdsb3cnO1xuXG4gIGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnVwZGF0ZShzY2hlbWEuZG9yYURlcGxveW1lbnQpXG4gICAgLnNldCh7IGZhaWxlZEF0OiBvcGVuZWRBdCwgY29ycmVsYXRpb25Db25maWRlbmNlOiBjb25maWRlbmNlLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBkZXBsb3kuZXhlY3V0aW9uSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50LCBlbnZpcm9ubWVudCksXG4gICAgICAvLyBEbyBub3Qgb3ZlcndyaXRlIGEgZmFpbHVyZSBhbHJlYWR5IGF0dHJpYnV0ZWQ6IHRoZSBGSVJTVCBpbmNpZGVudCBsaW5rZWRcbiAgICAgIC8vIHRvIGEgZGVwbG95IGlzIHRoZSBvbmUgdGhhdCBtYWRlIGl0IGEgY2hhbmdlIGZhaWx1cmUsIGFuZCBhIGxhdGVyIG9uZVxuICAgICAgLy8gcmUtZGF0aW5nIGl0IHdvdWxkIG1vdmUgdGltZS10by1yZXN0b3JlLlxuICAgICAgaXNOdWxsKHNjaGVtYS5kb3JhRGVwbG95bWVudC5mYWlsZWRBdCksXG4gICAgKSkpO1xuICByZXR1cm4geyBleGVjdXRpb25JZDogZGVwbG95LmV4ZWN1dGlvbklkLCBjb25maWRlbmNlIH07XG59XG4iXX0=
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXJvbGx1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL2RlcGxveS1yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFxQjdDLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdEQUFnRDtBQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUUvRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFvQjtJQUNoRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztXQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7V0FDakIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO1dBQ2pCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMs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QUFDLENBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ04sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXcml0aW5nIGBkb3JhX2RlcGxveW1lbnRzYCBhdCBpbmdlc3QuXG4gKlxuICogRXZlcnkgRE9SQSBudW1iZXIgdXNlZCB0byBiZSBkZXJpdmVkIGJ5IHNjYW5uaW5nIGBwaXBlbGluZV9ldmVudHNgIHBlciByZWFkLlxuICogVHdvIHRoaW5ncyB3ZXJlIHdyb25nIHdpdGggdGhhdCwgYW5kIG9ubHkgb25lIG9mIHRoZW0gd2FzIHNwZWVkOlxuICpcbiAqICAxLiBMRUFEIFRJTUUgV0FTIERPVUJMRS1DT1VOVEVEIElOIFdBSVRJTkcuIEEgZGVwbG95IGVtaXRzIGEgU1RBR0UgZXZlbnQgYW5kXG4gKiAgICAgYW4gQUNUSU9OIGV2ZW50LCBhbmQgYm90aCBjYXJyeSB0aGUgc2FtZSByZXNvbHZlZCBjb21taXQgcmFuZ2UuIEFueVxuICogICAgIGFnZ3JlZ2F0ZSBvdmVyIGV2ZW50cyB0aGVyZWZvcmUgY291bnRlZCBvbmUgZGVwbG95J3MgbGVhZCB0aW1lIHR3aWNlIHRoZVxuICogICAgIG1vbWVudCBzb21lYm9keSBhZGRlZCB0aGUgQUNUSU9OIHJvd3MgdG8gYSBxdWVyeS4gU3RvcmluZyBpdCBvbmNlIHBlclxuICogICAgIGV4ZWN1dGlvbiBtYWtlcyB0aGF0IG1pc3Rha2UgdW5hdmFpbGFibGUgcmF0aGVyIHRoYW4gbWVyZWx5IHVubWFkZS5cbiAqICAyLiBUSEUgTlVNQkVSUyBESUQgTk9UIFNVUlZJVkUgUkVURU5USU9OLiBUaGUgc3dlZXAgcHVyZ2VzIHJhdyBldmVudHMgYnlcbiAqICAgICB0aWVyLCBzbyBhIHF1YXJ0ZXJseSByZXBvcnQgY291bGQgbm90IGJlIHJlY29tcHV0ZWQgb25jZSBpdHMgZXZlbnRzIHdlcmVcbiAqICAgICBnb25lIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoZW4gc29tZW9uZSBhc2tzIGFib3V0IGl0LlxuICpcbiAqIEEgZGVwbG95IGlzIGEgU1RBR0UgZXZlbnQgY2FycnlpbmcgYW4gYGVudmlyb25tZW50YDogdGhlIHNhbWUgcHJlZGljYXRlIHRoZVxuICogRE9SQSBxdWVyaWVzIGhhdmUgYWx3YXlzIHVzZWQsIG5vdyBhcHBsaWVkIG9uY2UgYXQgd3JpdGUgdGltZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGFuZCwgZXEsIGlzTnVsbCwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHR5cGUgeyBMZWFkVGltZUdhcCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2RlcGxveS1yb2xsdXAnKTtcblxuLyoqIFRoZSBmaWVsZHMgb2YgYW4gaW5zZXJ0ZWQgZXZlbnQgcm93IHRoaXMgbW9kdWxlIG5lZWRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lDYW5kaWRhdGUge1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUlkOiBzdHJpbmcgfCBudWxsO1xuICBleGVjdXRpb25JZDogc3RyaW5nIHwgbnVsbDtcbiAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGVudmlyb25tZW50OiBzdHJpbmcgfCBudWxsO1xuICBjb21taXRTaGE/OiBzdHJpbmcgfCBudWxsO1xuICBjb21taXRUaW1lc3RhbXA/OiBEYXRlIHwgbnVsbDtcbiAgY29tbWl0Q291bnQ/OiBudW1iZXIgfCBudWxsO1xuICBjb21wbGV0ZWRBdD86IERhdGUgfCBudWxsO1xuICBzdGFydGVkQXQ/OiBEYXRlIHwgbnVsbDtcbiAgY3JlYXRlZEF0PzogRGF0ZSB8IG51bGw7XG4gIC8qKiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgaWQgb2YgdGhlIHJvdywgd2hlbiBpdHMgcHJvZHVjZXIgaGFkIG9uZS4gKi9cbiAgc291cmNlRXZlbnRJZD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBTdGF0dXNlcyBhbiBldmVudCB1c2VzIGZvciBcInRoaXMgZmluaXNoZWQsIGFuZCBpdCB3b3JrZWRcIi4gKi9cbmNvbnN0IFNVQ0NFRURFRCA9IG5ldyBTZXQoWydTVUNDRUVERUQnLCAnU1VDQ0VTUyddKTtcbi8qKiDigKZhbmQgZm9yIFwidGhpcyBmaW5pc2hlZCwgYW5kIGl0IGRpZCBub3RcIi4gKi9cbmNvbnN0IEZBSUxFRCA9IG5ldyBTZXQoWydGQUlMRUQnLCAnRkFJTFVSRScsICdDQU5DRUxFRCcsICdDQU5DRUxMRUQnLCAnU1RPUFBFRCcsICdUSU1FRF9PVVQnXSk7XG5cbi8qKlxuICogSXMgdGhpcyByb3cgYSBkZXBsb3k/XG4gKlxuICogQSBTVEFHRSBldmVudCB3aXRoIGFuIGVudmlyb25tZW50LCBpbiBhIHRlcm1pbmFsIHN0YXRlLiBgSU5fUFJPR1JFU1NgIHJvd3MgYXJlXG4gKiBza2lwcGVkIGRlbGliZXJhdGVseTogYSBkZXBsb3kgdGhhdCBoYXMgc3RhcnRlZCBoYXMgbm8gZHVyYXRpb24sIG5vIG91dGNvbWUgYW5kXG4gKiBubyBwbGFjZSBpbiBhIGRlcGxveW1lbnQtZnJlcXVlbmN5IGNvdW50LCBhbmQgd3JpdGluZyBpdCB3b3VsZCBtYWtlIGV2ZXJ5XG4gKiBpbi1mbGlnaHQgZGVwbG95IGxvb2sgbGlrZSBhIHN1Y2Nlc3NmdWwgb25lIHVudGlsIGl0cyBuZXh0IGV2ZW50IGxhbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVwbG95RXZlbnQocm93OiBEZXBsb3lDYW5kaWRhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJvdy5ldmVudFR5cGUgPT09ICdTVEFHRSdcbiAgICAmJiAhIXJvdy5lbnZpcm9ubWVudFxuICAgICYmICEhcm93LmV4ZWN1dGlvbklkXG4gICAgJiYgKFNVQ0NFRURFRC5oYXMocm93LnN0YXR1cykgfHwgRkFJTEVELmhhcyhyb3cuc3RhdHVzKSk7XG59XG5cbi8qKlxuICogV2h5IGxlYWQgdGltZSBpcyBhYnNlbnQgZm9yIGEgZGVwbG95IHRoYXQgaGFzIG5vIGNvbW1pdCB0aW1lc3RhbXAuXG4gKlxuICogYG5vX2NvbW1pdF9kYXRhYCBpcyB0aGUgaG9uZXN0IGRlZmF1bHQ6IHRoZSBmb3J3YXJkZXIgcmVzb2x2ZXMgdGhlIGNvbW1pdCByYW5nZVxuICogaW4tYWNjb3VudCBhbmQgcmVwb3J0cyB0aGUgcmVhc29uIGl0IGNvdWxkIG5vdCwgc28gYW55dGhpbmcgZWxzZSBoZXJlIHdvdWxkIGJlXG4gKiB0aGlzIG1vZHVsZSBndWVzc2luZy4gVGhlIHJlYXNvbiBpdCBESUQgcmVwb3J0IHJpZGVzIG9uIHRoZSBldmVudCdzIGBkZXRhaWxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVhZFRpbWVHYXBPZihyb3c6IERlcGxveUNhbmRpZGF0ZSAmIHsgZGV0YWlsPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIH0pOiBMZWFkVGltZUdhcCB8IG51bGwge1xuICBpZiAocm93LmNvbW1pdFRpbWVzdGFtcCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJlcG9ydGVkID0gcm93LmRldGFpbD8ubGVhZFRpbWVHYXA7XG4gIGlmIChyZXBvcnRlZCA9PT0gJ25vX3Rva2VuJyB8fCByZXBvcnRlZCA9PT0gJ3JhdGVfbGltaXRlZCcgfHwgcmVwb3J0ZWQgPT09ICd1bnN1cHBvcnRlZF9zb3VyY2UnKSByZXR1cm4gcmVwb3J0ZWQ7XG4gIHJldHVybiAnbm9fY29tbWl0X2RhdGEnO1xufVxuXG4vKiogV2hlbiB0aGUgZGVwbG95IGZpbmlzaGVkLiBGYWxscyBiYWNrIHRocm91Z2ggdGhlIGV2ZW50J3Mgb3duIHRpbWVzdGFtcHMuICovXG5mdW5jdGlvbiBkZXBsb3llZEF0T2Yocm93OiBEZXBsb3lDYW5kaWRhdGUpOiBEYXRlIHwgbnVsbCB7XG4gIHJldHVybiByb3cuY29tcGxldGVkQXQgPz8gcm93LnN0YXJ0ZWRBdCA/PyByb3cuY3JlYXRlZEF0ID8/IG51bGw7XG59XG5cbi8qKlxuICogVXBzZXJ0IHRoZSBkZXBsb3kgcm93cyBmb3IgYSBiYXRjaCBvZiBmcmVzaGx5LWluc2VydGVkIGV2ZW50cy5cbiAqXG4gKiBPTkUgUk9XIFBFUiAoZXhlY3V0aW9uLCBlbnZpcm9ubWVudCksIHNvIGEgcmVkZWxpdmVyZWQgZXZlbnQgcmVmcmVzaGVzIHRoZSByb3dcbiAqIHJhdGhlciB0aGFuIGFkZGluZyBhIHNlY29uZCBkZXBsb3kg4oCUIHRoZSBzYW1lIGF0LWxlYXN0LW9uY2UgcHJvYmxlbSB0aGUgZXZlbnRcbiAqIGluc2VydCBzb2x2ZXMgd2l0aCBpdHMgcGFydGlhbCB1bmlxdWUgaW5kZXguXG4gKlxuICogVGhlIGNvbmZsaWN0IHVwZGF0ZSBkZWxpYmVyYXRlbHkgZG9lcyBOT1QgdG91Y2ggYGZhaWxlZF9hdGAgLyBgcmVzdG9yZWRfYXRgOlxuICogdGhvc2UgYXJlIHNldCBieSB0aGUgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzIGFuZCBieSBpbmNpZGVudCBjb3JyZWxhdGlvbixcbiAqIGFuZCBhIGxhdGUgcmVkZWxpdmVyeSBvZiB0aGUgb3JpZ2luYWwgZGVwbG95IGV2ZW50IG11c3Qgbm90IGVyYXNlIGEgcmVjb3JkZWRcbiAqIHByb2R1Y3Rpb24gZmFpbHVyZS5cbiAqXG4gKiBOZXZlciB0aHJvd3MuIEFuIGluZ2VzdCBiYXRjaCB0aGF0IGxhbmRlZCBpdHMgZXZlbnRzIGhhcyBkb25lIHRoZSBkdXJhYmxlIHBhcnRcbiAqIG9mIGl0cyBqb2I7IGZhaWxpbmcgdGhlIHdob2xlIGJhdGNoIGJlY2F1c2UgYSBkZXJpdmVkIHJvdyBjb3VsZCBub3QgYmUgd3JpdHRlblxuICogd291bGQgdHVybiBhIHJvbGx1cCBidWcgaW50byBkYXRhIGxvc3MsIGFuZCB0aGUgYmFja2ZpbGwgY2FuIHJlYnVpbGQgdGhlc2UgZnJvbVxuICogdGhlIGV2ZW50cyB3aGlsZSB0aGV5IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBzZXJ0RGVwbG95bWVudHMoXG4gIHJvd3M6IFJlYWRvbmx5QXJyYXk8RGVwbG95Q2FuZGlkYXRlICYgeyBkZXRhaWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfT4sXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBkZXBsb3lzID0gcm93cy5maWx0ZXIoaXNEZXBsb3lFdmVudCk7XG4gIGlmIChkZXBsb3lzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgY29uc3QgdmFsdWVzID0gZGVwbG95cy5mbGF0TWFwKChyb3cpID0+IHtcbiAgICBjb25zdCBkZXBsb3llZEF0ID0gZGVwbG95ZWRBdE9mKHJvdyk7XG4gICAgaWYgKCFkZXBsb3llZEF0KSByZXR1cm4gW107XG4gICAgY29uc3Qgc3VjY2VlZGVkID0gU1VDQ0VFREVELmhhcyhyb3cuc3RhdHVzKTtcbiAgICBjb25zdCBlYXJsaWVzdENvbW1pdEF0ID0gcm93LmNvbW1pdFRpbWVzdGFtcCA/PyBudWxsO1xuICAgIC8vIExlYWQgdGltZSBpcyBjb21taXQg4oaSIGRlcGxveSwgYW5kIG9ubHkgd2hlbiBib3RoIGVuZHMgYXJlIHJlYWwuIEEgbmVnYXRpdmVcbiAgICAvLyBnYXAgbWVhbnMgdGhlIHR3byB0aW1lc3RhbXBzIGNhbWUgZnJvbSBkaWZmZXJlbnQgY2xvY2tzOyBpdCBpcyBkcm9wcGVkXG4gICAgLy8gcmF0aGVyIHRoYW4gY2xhbXBlZCB0byB6ZXJvLCBiZWNhdXNlIFwiMCBzZWNvbmRzXCIgaXMgYSBjbGFpbSBhbmQgXCJ1bmtub3duXCJcbiAgICAvLyBpcyB0aGUgdHJ1dGguXG4gICAgY29uc3QgbGVhZFNlY29uZHMgPSBlYXJsaWVzdENvbW1pdEF0XG4gICAgICA/IE1hdGgucm91bmQoKGRlcGxveWVkQXQuZ2V0VGltZSgpIC0gZWFybGllc3RDb21taXRBdC5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gW3tcbiAgICAgIG9yZ0lkOiByb3cub3JnSWQsXG4gICAgICBleGVjdXRpb25JZDogcm93LmV4ZWN1dGlvbklkIGFzIHN0cmluZyxcbiAgICAgIGVudmlyb25tZW50OiByb3cuZW52aXJvbm1lbnQgYXMgc3RyaW5nLFxuICAgICAgcGlwZWxpbmVJZDogcm93LnBpcGVsaW5lSWQsXG4gICAgICBkZXBsb3llZEF0LFxuICAgICAgc3VjY2VlZGVkLFxuICAgICAgZWFybGllc3RDb21taXRBdCxcbiAgICAgIGxlYWRUaW1lU2Vjb25kczogbGVhZFNlY29uZHMgIT09IG51bGwgJiYgbGVhZFNlY29uZHMgPj0gMCA/IGxlYWRTZWNvbmRzIDogbnVsbCxcbiAgICAgIGNvbW1pdENvdW50OiByb3cuY29tbWl0Q291bnQgPz8gbnVsbCxcbiAgICAgIGNvbW1pdFNoYTogcm93LmNvbW1pdFNoYSA/PyBudWxsLFxuICAgICAgbGVhZFRpbWVHYXA6IGxlYWRUaW1lR2FwT2Yocm93KSxcbiAgICAgIHNvdXJjZUV2ZW50SWQ6IHJvdy5zb3VyY2VFdmVudElkID8/IG51bGwsXG4gICAgfV07XG4gIH0pO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsYW5kZWQgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5pbnNlcnQoc2NoZW1hLmRvcmFEZXBsb3ltZW50KS52YWx1ZXModmFsdWVzKVxuICAgICAgLm9uQ29uZmxpY3REb1VwZGF0ZSh7XG4gICAgICAgIHRhcmdldDogW3NjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50XSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgc3VjY2VlZGVkOiBzcWxgZXhjbHVkZWQuc3VjY2VlZGVkYCxcbiAgICAgICAgICBkZXBsb3llZEF0OiBzcWxgZXhjbHVkZWQuZGVwbG95ZWRfYXRgLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5waXBlbGluZV9pZCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQucGlwZWxpbmVJZH0pYCxcbiAgICAgICAgICAvLyBBIGxhdGVyIGV2ZW50IG1heSByZXNvbHZlIGEgY29tbWl0IHJhbmdlIHRoZSBmaXJzdCBvbmUgY291bGQgbm90LCBzb1xuICAgICAgICAgIC8vIHRoZXNlIGZpbGwgaW4g4oCUIGJ1dCBuZXZlciBibGFuayBvdXQgd2hhdCB3YXMgYWxyZWFkeSBtZWFzdXJlZC5cbiAgICAgICAgICBlYXJsaWVzdENvbW1pdEF0OiBzcWxgQ09BTEVTQ0UoZXhjbHVkZWQuZWFybGllc3RfY29tbWl0X2F0LCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5lYXJsaWVzdENvbW1pdEF0fSlgLFxuICAgICAgICAgIGxlYWRUaW1lU2Vjb25kczogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmxlYWRfdGltZV9zZWNvbmRzLCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5sZWFkVGltZVNlY29uZHN9KWAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5jb21taXRfY291bnQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdENvdW50fSlgLFxuICAgICAgICAgIGNvbW1pdFNoYTogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmNvbW1pdF9zaGEsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdFNoYX0pYCxcbiAgICAgICAgICAvLyBUaGUgZ2FwIGlzIGNsZWFyZWQgb25jZSBhIGNvbW1pdCB0aW1lc3RhbXAgYXJyaXZlczogYSByZXNvbHZlZCBsZWFkXG4gICAgICAgICAgLy8gdGltZSBhbmQgYSByZWFzb24gaXQgY291bGQgbm90IGJlIHJlc29sdmVkIG11c3QgbmV2ZXIgY29leGlzdC5cbiAgICAgICAgICBsZWFkVGltZUdhcDogc3FsYENBU0UgV0hFTiBDT0FMRVNDRShleGNsdWRlZC5lYXJsaWVzdF9jb21taXRfYXQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmVhcmxpZXN0Q29tbWl0QXR9KSBJUyBOT1QgTlVMTFxuICAgICAgICAgICAgVEhFTiBOVUxMIEVMU0UgZXhjbHVkZWQubGVhZF90aW1lX2dhcCBFTkRgLFxuICAgICAgICAgIC8vIFRoZSBkZXBsb3kgZXZlbnQgdGhhdCBsYXN0IHdyb3RlIHRoZSByb3csIHNvIHRoZSBET1JBIG51bWJlciB0cmFjZXNcbiAgICAgICAgICAvLyBiYWNrIHRvIGl0OyBhIHByb2R1Y2VyIHdpdGhvdXQgYW4gaWQgbmV2ZXIgYmxhbmtzIGEgcmVjb3JkZWQgb25lLlxuICAgICAgICAgIHNvdXJjZUV2ZW50SWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5zb3VyY2VfZXZlbnRfaWQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LnNvdXJjZUV2ZW50SWR9KWAsXG4gICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5yZXR1cm5pbmcoeyBleGVjdXRpb25JZDogc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkIH0pKTtcbiAgICByZXR1cm4gKGxhbmRlZCBhcyB1bmtub3duW10pLmxlbmd0aDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0RlcGxveSByb2xsdXAgdXBzZXJ0IGZhaWxlZDsgdGhlIGV2ZW50cyBsYW5kZWQgYW5kIGEgcmVidWlsZCBjYW4gcmVjb3ZlciBpdCcsIHtcbiAgICAgIGRlcGxveXM6IHZhbHVlcy5sZW5ndGgsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBwb3N0LWRlcGxveSBvdXRjb21lIGFnYWluc3QgdGhlIGRlcGxveSBpdCBjb25jZXJucy5cbiAqXG4gKiBEZW5vcm1hbGl6ZWQgb250byBgZG9yYV9kZXBsb3ltZW50c2Agc28gY2hhbmdlLWZhaWx1cmUgcmF0ZSBhbmRcbiAqIHRpbWUtdG8tcmVzdG9yZSBhcmUgb25lIHNjYW4gb3ZlciB0aGUgd2luZG93IGluc3RlYWQgb2YgYSBqb2luIHBlciByZWFkLiBUaGVcbiAqIGBkZXBsb3ltZW50X291dGNvbWVzYCB0YWJsZSBzdGF5cyB0aGUgYXV0aG9yaXR5IOKAlCB0aGlzIGlzIHRoZSBjb3B5IHRoZVxuICogYWdncmVnYXRlcyB1c2UsIGFuZCBpdCBpcyByZWJ1aWxkYWJsZSBmcm9tIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlEZXBsb3lPdXRjb21lKFxuICBvcmdJZDogc3RyaW5nLFxuICBleGVjdXRpb25JZDogc3RyaW5nLFxuICBvdXRjb21lOiAnZmFpbGVkJyB8ICdyZXN0b3JlZCcsXG4gIGF0OiBEYXRlLFxuICBlbnZpcm9ubWVudD86IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB3aGVyZSA9IGVudmlyb25tZW50XG4gICAgPyBhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsIGV4ZWN1dGlvbklkKSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5lbnZpcm9ubWVudCwgZW52aXJvbm1lbnQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50Lm9yZ0lkLCBvcmdJZCksXG4gICAgKVxuICAgIDogYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBleGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQub3JnSWQsIG9yZ0lkKSxcbiAgICApO1xuICAvLyBBIGByZXN0b3JlZGAgbWFya2VyIG9ubHkgbWVhbnMgc29tZXRoaW5nIGZvciBhIGRlcGxveSB0aGF0IHdhcyBtYXJrZWQgZmFpbGVkO1xuICAvLyByZWNvcmRpbmcgYSByZXN0b3JlIHdpdGggbm8gZmFpbHVyZSB3b3VsZCBwcm9kdWNlIGEgbmVnYXRpdmUgdGltZS10by1yZXN0b3JlLlxuICBjb25zdCBzZXQgPSBvdXRjb21lID09PSAnZmFpbGVkJ1xuICAgID8geyBmYWlsZWRBdDogYXQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9XG4gICAgOiB7IHJlc3RvcmVkQXQ6IGF0LCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfTtcbiAgYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5kb3JhRGVwbG95bWVudCkuc2V0KHNldClcbiAgICAud2hlcmUob3V0Y29tZSA9PT0gJ3Jlc3RvcmVkJ1xuICAgICAgPyBhbmQod2hlcmUsIHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5mYWlsZWRBdH0gSVMgTk9UIE5VTExgKVxuICAgICAgOiB3aGVyZSkpO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZSBhbiBpbmNpZGVudCB0byB0aGUgbW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kgdG8gaXRzIGVudmlyb25tZW50XG4gKiB3aXRoaW4gdGhlIGNvcnJlbGF0aW9uIHdpbmRvdywgYW5kIGxhYmVsIGhvdyBjb25maWRlbnQgdGhhdCBsaW5rIGlzLlxuICpcbiAqIFRoZSBjb25maWRlbmNlIGlzIHRoZSBwb2ludC4gXCJUaGlzIGRlcGxveSBicm9rZSBwcm9kdWN0aW9uXCIgYW5kIFwiYW4gaW5jaWRlbnRcbiAqIG9wZW5lZCBlbGV2ZW4gaG91cnMgYWZ0ZXIgdGhpcyBkZXBsb3ksIGFuZCB0aGUgd2luZG93IGhhcHBlbnMgdG8gYmUgdHdlbHZlXCIgYXJlXG4gKiBkaWZmZXJlbnQgY2xhaW1zLCBhbmQgYSBtYW5hZ2VyIGFjdHMgZGlmZmVyZW50bHkgb24gZWFjaCDigJQgc28gdGhlIHJlcG9ydCBzaG93c1xuICogd2hpY2ggb25lIGl0IGlzIHJhdGhlciB0aGFuIHByZXNlbnRpbmcgYm90aCBhcyBhIGNoYW5nZSBmYWlsdXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ycmVsYXRlSW5jaWRlbnQoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIGVudmlyb25tZW50OiBzdHJpbmcsXG4gIG9wZW5lZEF0OiBEYXRlLFxuICB3aW5kb3dIb3VyczogbnVtYmVyLFxuKTogUHJvbWlzZTx7IGV4ZWN1dGlvbklkOiBzdHJpbmc7IGNvbmZpZGVuY2U6ICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfSB8IG51bGw+IHtcbiAgY29uc3Qgd2luZG93U3RhcnQgPSBuZXcgRGF0ZShvcGVuZWRBdC5nZXRUaW1lKCkgLSB3aW5kb3dIb3VycyAqIDM2MDBfMDAwKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCh7XG4gICAgZXhlY3V0aW9uSWQ6IHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCxcbiAgICBkZXBsb3llZEF0OiBzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdCxcbiAgfSkuZnJvbShzY2hlbWEuZG9yYURlcGxveW1lbnQpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5vcmdJZCwgb3JnSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50LCBlbnZpcm9ubWVudCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuc3VjY2VlZGVkLCB0cnVlKSxcbiAgICAgIHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5kZXBsb3llZEF0fSA8PSAke29wZW5lZEF0fWAsXG4gICAgICBzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdH0gPj0gJHt3aW5kb3dTdGFydH1gLFxuICAgICkpXG4gICAgLm9yZGVyQnkoc3FsYCR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXR9IERFU0NgKVxuICAgIC5saW1pdCgxKSk7XG4gIGNvbnN0IGRlcGxveSA9IChyb3dzIGFzIEFycmF5PHsgZXhlY3V0aW9uSWQ6IHN0cmluZzsgZGVwbG95ZWRBdDogRGF0ZSB9PilbMF07XG4gIGlmICghZGVwbG95KSByZXR1cm4gbnVsbDtcblxuICAvLyBDb25maWRlbmNlIGJ5IGhvdyBlYXJseSBpbiB0aGUgd2luZG93IGl0IGZlbGwuIFRoZSB0aGlyZHMgYXJlIGEganVkZ2VtZW50LFxuICAvLyBhbmQgYSBzdGF0ZWQgb25lOiBhbiBpbmNpZGVudCB3aXRoaW4gdGhlIGZpcnN0IHRoaXJkIG9mIHRoZSB3aW5kb3cgYWZ0ZXIgYVxuICAvLyBkZXBsb3kgaXMgdGhlIGNhc2UgdGhlIERPUkEgZGVmaW5pdGlvbiBpcyBhY3R1YWxseSBhYm91dC5cbiAgY29uc3QgZWxhcHNlZCA9IG9wZW5lZEF0LmdldFRpbWUoKSAtIGRlcGxveS5kZXBsb3llZEF0LmdldFRpbWUoKTtcbiAgY29uc3Qgd2luZG93TXMgPSB3aW5kb3dIb3VycyAqIDM2MDBfMDAwO1xuICBjb25zdCBjb25maWRlbmNlID0gZWxhcHNlZCA8PSB3aW5kb3dNcyAvIDMgPyAnaGlnaCcgOiBlbGFwc2VkIDw9ICh3aW5kb3dNcyAqIDIpIC8gMyA/ICdtZWRpdW0nIDogJ2xvdyc7XG5cbiAgYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5kb3JhRGVwbG95bWVudClcbiAgICAuc2V0KHsgZmFpbGVkQXQ6IG9wZW5lZEF0LCBjb3JyZWxhdGlvbkNvbmZpZGVuY2U6IGNvbmZpZGVuY2UsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsIGRlcGxveS5leGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZW52aXJvbm1lbnQsIGVudmlyb25tZW50KSxcbiAgICAgIC8vIERvIG5vdCBvdmVyd3JpdGUgYSBmYWlsdXJlIGFscmVhZHkgYXR0cmlidXRlZDogdGhlIEZJUlNUIGluY2lkZW50IGxpbmtlZFxuICAgICAgLy8gdG8gYSBkZXBsb3kgaXMgdGhlIG9uZSB0aGF0IG1hZGUgaXQgYSBjaGFuZ2UgZmFpbHVyZSwgYW5kIGEgbGF0ZXIgb25lXG4gICAgICAvLyByZS1kYXRpbmcgaXQgd291bGQgbW92ZSB0aW1lLXRvLXJlc3RvcmUuXG4gICAgICBpc051bGwoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmZhaWxlZEF0KSxcbiAgICApKSk7XG4gIHJldHVybiB7IGV4ZWN1dGlvbklkOiBkZXBsb3kuZXhlY3V0aW9uSWQsIGNvbmZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
@@ -23,17 +23,13 @@
|
|
|
23
23
|
* customer's build is the last thing that should reach a model.
|
|
24
24
|
*/
|
|
25
25
|
import type { FailureCategory } from '../../database/schema/reporting-analytics.js';
|
|
26
|
-
/**
|
|
27
|
-
* The category for a failed action.
|
|
28
|
-
*
|
|
29
|
-
* `null` for anything that is not a failure — the caller stores nothing rather
|
|
30
|
-
* than labelling a success, so a category's presence always means "this broke".
|
|
31
|
-
*/
|
|
32
26
|
export declare function classifyFailure(input: {
|
|
33
27
|
status: string;
|
|
34
28
|
errorMessage?: string | null;
|
|
35
29
|
actionName?: string | null;
|
|
36
30
|
stageName?: string | null;
|
|
31
|
+
/** The structured synth refusal code (`detail.pbFailure.code`), when the build printed one. */
|
|
32
|
+
failureCode?: string | null;
|
|
37
33
|
}): FailureCategory | null;
|
|
38
34
|
/**
|
|
39
35
|
* A human label for a category, for the report and the UI.
|