@pipeline-builder/pipeline-data 4.1.15 → 4.1.17
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/access-control-builder.d.ts +18 -1
- package/lib/api/access-control-builder.js +19 -6
- package/lib/api/crud-service.d.ts +94 -36
- package/lib/api/crud-service.js +188 -166
- package/lib/api/plugin-resolution.d.ts +253 -0
- package/lib/api/plugin-resolution.js +649 -0
- package/lib/api/public-directory.d.ts +281 -0
- package/lib/api/public-directory.js +457 -0
- package/lib/api/query-builders.d.ts +13 -0
- package/lib/api/query-builders.js +74 -9
- package/lib/api/reporting/caches.js +4 -4
- package/lib/api/reporting/dora-scoring.d.ts +3 -3
- package/lib/api/reporting/dora-scoring.js +4 -4
- package/lib/api/reporting/dora.d.ts +6 -6
- package/lib/api/reporting/dora.js +97 -73
- package/lib/api/reporting/plugin-runtime.d.ts +25 -0
- package/lib/api/reporting/plugin-runtime.js +106 -0
- package/lib/api/reporting/query-scope.d.ts +8 -2
- package/lib/api/reporting/query-scope.js +16 -7
- package/lib/api/reporting/retention.d.ts +4 -10
- package/lib/api/reporting/retention.js +8 -11
- package/lib/api/reporting/sql-helpers.d.ts +4 -7
- package/lib/api/reporting/sql-helpers.js +8 -9
- package/lib/api/reporting/types.d.ts +55 -17
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/reporting-service.d.ts +35 -26
- package/lib/api/reporting-service.js +245 -161
- package/lib/api/semver-range.d.ts +73 -0
- package/lib/api/semver-range.js +227 -0
- package/lib/api/soft-delete-sweep.js +8 -20
- package/lib/core/query-filters.d.ts +18 -3
- package/lib/core/query-filters.js +1 -1
- package/lib/database/drizzle-schema.d.ts +7790 -2461
- package/lib/database/drizzle-schema.js +29 -1
- package/lib/database/index.d.ts +4 -2
- package/lib/database/index.js +5 -3
- package/lib/database/pg-result.d.ts +19 -0
- package/lib/database/pg-result.js +32 -0
- package/lib/database/postgres-connection.js +14 -24
- package/lib/database/public-reader.d.ts +14 -0
- package/lib/database/public-reader.js +68 -0
- package/lib/database/retry-strategy.d.ts +3 -5
- package/lib/database/retry-strategy.js +4 -6
- package/lib/database/schema/compliance.d.ts +16 -34
- package/lib/database/schema/compliance.js +4 -4
- package/lib/database/schema/dashboard.js +4 -2
- package/lib/database/schema/ecosystem.d.ts +6586 -0
- package/lib/database/schema/ecosystem.js +709 -0
- package/lib/database/schema/message.d.ts +6 -12
- package/lib/database/schema/message.js +3 -1
- package/lib/database/schema/pipeline.d.ts +79 -5
- package/lib/database/schema/pipeline.js +46 -25
- package/lib/database/schema/plugin.d.ts +587 -3
- package/lib/database/schema/plugin.js +86 -14
- package/lib/database/tenancy.d.ts +6 -7
- package/lib/database/tenancy.js +13 -14
- package/lib/index.d.ts +7 -4
- package/lib/index.js +7 -4
- package/lib/testing/exports.json +146 -0
- package/package.json +44 -7
|
@@ -90,6 +90,55 @@ export const plugin = pgTable('plugins', {
|
|
|
90
90
|
.array()
|
|
91
91
|
.default([])
|
|
92
92
|
.notNull(),
|
|
93
|
+
// Spec contract, persisted (not just validated at upload): the
|
|
94
|
+
// `{{ pipeline.metadata.X }}` / `{{ pipeline.vars.X }}` keys a pipeline must
|
|
95
|
+
// supply, their declared coercion types, the smoke test, and the declared
|
|
96
|
+
// outbound hostnames (spec `network.egress`) shown to consumers.
|
|
97
|
+
requiredMetadata: jsonb('required_metadata')
|
|
98
|
+
.$type()
|
|
99
|
+
.default([])
|
|
100
|
+
.notNull(),
|
|
101
|
+
requiredVars: jsonb('required_vars')
|
|
102
|
+
.$type()
|
|
103
|
+
.default([])
|
|
104
|
+
.notNull(),
|
|
105
|
+
metadataTypes: jsonb('metadata_types')
|
|
106
|
+
.$type()
|
|
107
|
+
.default({})
|
|
108
|
+
.notNull(),
|
|
109
|
+
varsTypes: jsonb('vars_types')
|
|
110
|
+
.$type()
|
|
111
|
+
.default({})
|
|
112
|
+
.notNull(),
|
|
113
|
+
smokeTest: jsonb('smoke_test').$type(),
|
|
114
|
+
networkEgress: jsonb('network_egress')
|
|
115
|
+
.$type()
|
|
116
|
+
.default([])
|
|
117
|
+
.notNull(),
|
|
118
|
+
// Documentation. The README is kept as source markdown AND pre-sanitized
|
|
119
|
+
// HTML (rendered once at upload), so no read path renders untrusted markdown.
|
|
120
|
+
readmeMd: text('readme_md'),
|
|
121
|
+
readmeHtml: text('readme_html'),
|
|
122
|
+
// SPDX license identifier.
|
|
123
|
+
license: varchar('license', { length: 64 }),
|
|
124
|
+
changelog: text('changelog'),
|
|
125
|
+
homepageUrl: varchar('homepage_url', { length: 2048 }),
|
|
126
|
+
sourceUrl: varchar('source_url', { length: 2048 }),
|
|
127
|
+
icon: jsonb('icon').$type(),
|
|
128
|
+
uploadedIcon: jsonb('uploaded_icon').$type(),
|
|
129
|
+
// Catalog metadata: detected from the package (spec, README,
|
|
130
|
+
// the plugin's own Dockerfile OCI labels), then accepted or edited by the
|
|
131
|
+
// user. `summary` is the card one-liner; `displayName` falls back to
|
|
132
|
+
// `name` when unset. `metadataSources` records, per descriptive field, where
|
|
133
|
+
// its value came from (`spec | readme | dockerfile | derived | user`) so a
|
|
134
|
+
// reviewer can see what was typed rather than shipped in the package.
|
|
135
|
+
summary: varchar('summary', { length: 160 }),
|
|
136
|
+
displayName: varchar('display_name', { length: 100 }),
|
|
137
|
+
documentationUrl: varchar('documentation_url', { length: 2048 }),
|
|
138
|
+
metadataSources: jsonb('metadata_sources')
|
|
139
|
+
.$type()
|
|
140
|
+
.default({})
|
|
141
|
+
.notNull(),
|
|
93
142
|
// Docker configuration
|
|
94
143
|
dockerfile: text('dockerfile'),
|
|
95
144
|
buildType: varchar('build_type', { length: 20 })
|
|
@@ -103,6 +152,26 @@ export const plugin = pgTable('plugins', {
|
|
|
103
152
|
// attached) from an UPLOADED `image.tar` whose build it never saw.
|
|
104
153
|
imageDigest: varchar('image_digest', { length: 71 }),
|
|
105
154
|
imageSource: varchar('image_source', { length: 10 }).$type(),
|
|
155
|
+
// Vulnerability scan (grype over the SBOM at build; nightly rescan) and the
|
|
156
|
+
// image's effective USER. NULL = not scanned / produces no image.
|
|
157
|
+
vulnCritical: integer('vuln_critical'),
|
|
158
|
+
vulnHigh: integer('vuln_high'),
|
|
159
|
+
vulnMedium: integer('vuln_medium'),
|
|
160
|
+
vulnLow: integer('vuln_low'),
|
|
161
|
+
scannedAt: timestamp('scanned_at', { withTimezone: true }),
|
|
162
|
+
runAsRoot: boolean('run_as_root'),
|
|
163
|
+
// Version lifecycle. `breaking`: a publisher-marked major that `latest`
|
|
164
|
+
// installs never cross without re-approval. `frozenAt`: set the moment a
|
|
165
|
+
// publish request references this version — re-uploading it is then refused
|
|
166
|
+
// (409). Yank / deprecation carry their reason alongside the timestamp.
|
|
167
|
+
breaking: boolean('breaking')
|
|
168
|
+
.default(false)
|
|
169
|
+
.notNull(),
|
|
170
|
+
frozenAt: timestamp('frozen_at', { withTimezone: true }),
|
|
171
|
+
yankedAt: timestamp('yanked_at', { withTimezone: true }),
|
|
172
|
+
yankReason: text('yank_reason'),
|
|
173
|
+
deprecatedAt: timestamp('deprecated_at', { withTimezone: true }),
|
|
174
|
+
deprecationMessage: text('deprecation_message'),
|
|
106
175
|
// Developer-portal catalog metadata (ownership / lifecycle / classification).
|
|
107
176
|
// ownerId defaults to the creating user (set at insert), so every plugin has
|
|
108
177
|
// an owner for "my services" views; ownerType distinguishes user vs team.
|
|
@@ -142,29 +211,32 @@ export const plugin = pgTable('plugins', {
|
|
|
142
211
|
// Soft-delete purge deadline: the retention sweep hard-deletes tombstoned
|
|
143
212
|
// rows once `purge_after` has passed (set on delete alongside deleted_at).
|
|
144
213
|
purgeAfter: timestamp('purge_after', { withTimezone: true }),
|
|
214
|
+
// The quota period (`resetAt`) this version's `plugins` slot was charged to
|
|
215
|
+
// at upload; NULL when no slot was charged (system catalog loads) or it was
|
|
216
|
+
// already refunded. A delete/purge refunds CONDITIONALLY on it (the quota
|
|
217
|
+
// service ignores the refund once that period has rolled over), then clears it.
|
|
218
|
+
quotaResetAt: timestamp('quota_reset_at', { withTimezone: true }),
|
|
145
219
|
}, (table) => ({
|
|
146
220
|
// Partial index over just the tombstones — drives the retention purge sweep.
|
|
147
221
|
purgeIdx: index('plugin_purge_idx').on(table.purgeAfter).where(sql `deleted_at IS NOT NULL`),
|
|
148
|
-
//
|
|
149
|
-
|
|
150
|
-
orgIdIdx: index('
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
222
|
+
// Mirrors the indexes postgres-init.sql creates, name for name (the SQL file is
|
|
223
|
+
// what deploys; schema-reflection.test.ts keeps the two in lock-step).
|
|
224
|
+
orgIdIdx: index('idx_plugins_org_id').on(table.orgId).where(sql `deleted_at IS NULL`),
|
|
225
|
+
nameIdx: index('idx_plugins_name').on(table.name).where(sql `deleted_at IS NULL`),
|
|
226
|
+
nameVersionIdx: index('idx_plugins_name_version').on(table.name, table.version).where(sql `deleted_at IS NULL`),
|
|
227
|
+
visibilityIdx: index('idx_plugins_visibility').on(table.visibility).where(sql `deleted_at IS NULL`),
|
|
228
|
+
isDefaultIdx: index('idx_plugins_is_default').on(table.name, table.isDefault).where(sql `is_default = true AND deleted_at IS NULL`),
|
|
229
|
+
categoryIdx: index('idx_plugins_category').on(table.category),
|
|
230
|
+
activeIdx: index('idx_plugins_is_active').on(table.isActive).where(sql `deleted_at IS NULL`),
|
|
231
|
+
orgCreatedIdx: index('idx_plugins_org_created').on(table.orgId, sql `${table.createdAt} DESC`).where(sql `deleted_at IS NULL`),
|
|
232
|
+
orgNameIdx: index('idx_plugins_org_name').on(table.orgId, table.name).where(sql `deleted_at IS NULL`),
|
|
157
233
|
// Developer-portal catalog indexes: "my services" (owner) + lifecycle filter.
|
|
158
234
|
ownerIdx: index('plugin_owner_idx').on(table.orgId, table.ownerId),
|
|
159
235
|
lifecycleIdx: index('plugin_lifecycle_idx').on(table.orgId, table.lifecycle),
|
|
160
|
-
// Composite index for common access pattern (orgId + isActive)
|
|
161
|
-
orgActiveIdx: index('plugin_org_active_idx').on(table.orgId, table.isActive),
|
|
162
236
|
// Composite index for filtered queries (orgId + visibility + isActive)
|
|
163
237
|
orgVisibilityActiveIdx: index('plugin_org_visibility_active_idx').on(table.orgId, table.visibility, table.isActive),
|
|
164
238
|
// Drives the "my private drafts" leg of the visibility predicate.
|
|
165
239
|
createdByIdx: index('plugin_created_by_idx').on(table.orgId, table.createdBy),
|
|
166
|
-
// Partial index for active-only queries (smaller, faster than full index)
|
|
167
|
-
activeOnlyOrgIdx: index('plugin_active_only_org_idx').on(table.orgId, table.createdAt).where(sql `is_active = true`),
|
|
168
240
|
// Unique constraint on name + version + orgId
|
|
169
241
|
nameVersionOrgUnique: uniqueIndex('plugin_name_version_org_unique')
|
|
170
242
|
.on(table.name, table.version, table.orgId),
|
|
@@ -173,4 +245,4 @@ export const plugin = pgTable('plugins', {
|
|
|
173
245
|
imageDigestCheck: check('plugin_image_digest_check', sql `${table.imageDigest} IS NULL OR ${table.imageDigest} ~ '^sha256:[0-9a-f]{64}$'`),
|
|
174
246
|
imageSourceCheck: check('plugin_image_source_check', sql `${table.imageSource} IS NULL OR ${table.imageSource} IN ('built', 'uploaded')`),
|
|
175
247
|
}));
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBRXZDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBbUJsSTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFO0lBQ3ZDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMs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QztJQUM5QyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsZ0NBQWdDLENBQUM7U0FDaEUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO0lBRTdDLG9CQUFvQjtJQUNwQixZQUFZLEVBQUUsS0FBSyxDQUFFLHNCQUFzQixFQUN6QyxHQUFHLENBQUEsR0FBRyxLQUFLLENBQUMsT0FBTyxvRUFBb0UsQ0FDeEY7SUFDRCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsMkJBQTJCLEVBQ2pELEdBQUcsQ0FBQSxHQUFHLEtBQUssQ0FBQyxXQUFXLGVBQWUsS0FBSyxDQUFDLFdBQVcsNEJBQTRCLENBQ3BGO0lBQ0QsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLDJCQUEyQixFQUNqRCxHQUFHLENBQUEsR0FBRyxLQUFLLENBQUMsV0FBVyxlQUFlLEtBQUssQ0FBQyxXQUFXLDJCQUEyQixDQUNuRjtDQUNGLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7XG4gIENvbXB1dGVUeXBlLCBQbHVnaW5UeXBlLCBTWVNURU1fT1JHX0lELCB0eXBlIENyaXRpY2FsaXR5LCB0eXBlIEVudGl0eUxhYmVscywgdHlwZSBFbnRpdHlMaW5rLCB0eXBlIExpZmVjeWNsZSwgdHlwZSBPd25lclR5cGUsXG4gIHR5cGUgVmlzaWJpbGl0eSxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4LCBjaGVjayB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIFNlY3JldCByZXF1aXJlbWVudCBmb3IgYSBwbHVnaW4uXG4gKiBEZWNsYXJlcyBuYW1lZCBzZWNyZXRzIHRoZSBwbHVnaW4gZXhwZWN0cyBhdCBidWlsZCB0aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNlY3JldCB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXJlIGEgcGx1Z2luJ3MgaW1hZ2UgY2FtZSBmcm9tOiBgYnVpbHRgIGJ5IHRoZSBwbGF0Zm9ybSdzIEJ1aWxkS2l0IChjYXJyaWVzXG4gKiBTTFNBIHByb3ZlbmFuY2UpIG9yIGB1cGxvYWRlZGAgYXMgYSBwcmVidWlsdCBgaW1hZ2UudGFyYCAoU0JPTSArIHNpZ25hdHVyZVxuICogb25seSDigJQgdGhlIHBsYXRmb3JtIG5ldmVyIHNhdyB0aGUgYnVpbGQpLlxuICovXG5leHBvcnQgdHlwZSBJbWFnZVNvdXJjZSA9ICdidWlsdCcgfCAndXBsb2FkZWQnO1xuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIHJldXNhYmxlIHBsdWdpbiBjb25maWd1cmF0aW9ucy5cbiAqIFBsdWdpbnMgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBzeW50aC9idWlsZCBzdGVwcyBpbiBDREsgcGlwZWxpbmVzLlxuICpcbiAqIEZlYXR1cmVzICogLSBWZXJzaW9uaW5nIHN1cHBvcnQgd2l0aCBzZW1hbnRpYyB2ZXJzaW9uaW5nXG4gKiAtIEFjY2VzcyBjb250cm9sIHZpYSBvcmdJZCBhbmQgdGhlIHRocmVlLXJ1bmcgYHZpc2liaWxpdHlgIGxhZGRlclxuICogLSBGdWxsIGF1ZGl0IHRyYWlsIChjcmVhdGVkL3VwZGF0ZWQgYnkvYXQpXG4gKiAtIEZsZXhpYmxlIG1ldGFkYXRhIHN0b3JhZ2UgdmlhIEpTT05CXG4gKiAtIFN1cHBvcnQgZm9yIGJvdGggU2hlbGxTdGVwIGFuZCBDb2RlQnVpbGRTdGVwIHR5cGVzXG4gKlxuICogQHRhYmxlIHBsdWdpbnNcbiAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbiA9IHBnVGFibGUoJ3BsdWdpbnMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBDb3JlIHBsdWdpbiBpbmZvcm1hdGlvblxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICB2ZXJzaW9uOiB2YXJjaGFyKCd2ZXJzaW9uJywgeyBsZW5ndGg6IDUwIH0pXG4gICAgLmRlZmF1bHQoJzEuMC4wJylcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFBsdWdpbiBjbGFzc2lmaWNhdGlvblxuICBjYXRlZ29yeTogdmFyY2hhcignY2F0ZWdvcnknLCB7IGxlbmd0aDogNTAgfSlcbiAgICAuZGVmYXVsdCgndW5rbm93bicpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQbHVnaW4gY29uZmlndXJhdGlvblxuICBtZXRhZGF0YToganNvbmIoJ21ldGFkYXRhJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBwbHVnaW5UeXBlOiB2YXJjaGFyKCdwbHVnaW5fdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxQbHVnaW5UeXBlPigpXG4gICAgLmRlZmF1bHQoJ0NvZGVCdWlsZFN0ZXAnIGFzIFBsdWdpblR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY29tcHV0ZVR5cGU6IHZhcmNoYXIoJ2NvbXB1dGVfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxDb21wdXRlVHlwZT4oKVxuICAgIC5kZWZhdWx0KCdTTUFMTCcgYXMgQ29tcHV0ZVR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgdGltZW91dDogaW50ZWdlcigndGltZW91dCcpLFxuICBmYWlsdXJlQmVoYXZpb3I6IHZhcmNoYXIoJ2ZhaWx1cmVfYmVoYXZpb3InLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8J2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc+KClcbiAgICAuZGVmYXVsdCgnZmFpbCcpXG4gICAgLm5vdE51bGwoKSxcbiAgc2VjcmV0czoganNvbmIoJ3NlY3JldHMnKVxuICAgIC4kdHlwZTxQbHVnaW5TZWNyZXRbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHZhcmNoYXIoJ3ByaW1hcnlfb3V0cHV0X2RpcmVjdG9yeScsIHsgbGVuZ3RoOiAyOCB9KSxcblxuICAvLyBCdWlsZCBjb25maWd1cmF0aW9uXG4gIGVudjoganNvbmIoJ2VudicpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBidWlsZEFyZ3M6IGpzb25iKCdidWlsZF9hcmdzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGluc3RhbGxDb21tYW5kczogdGV4dCgnaW5zdGFsbF9jb21tYW5kcycpXG4gICAgLmFycmF5KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICBjb21tYW5kczogdGV4dCgnY29tbWFuZHMnKVxuICAgIC5hcnJheSgpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEb2NrZXIgY29uZmlndXJhdGlvblxuICBkb2NrZXJmaWxlOiB0ZXh0KCdkb2NrZXJmaWxlJyksXG4gIGJ1aWxkVHlwZTogdmFyY2hhcignYnVpbGRfdHlwZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC5kZWZhdWx0KCdidWlsZF9pbWFnZScpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBTdXBwbHkgY2hhaW4uIFNldCBieSB0aGUgYnVpbGQgd29ya2VyIG9uY2UgdGhlIGltYWdlIGlzIHB1c2hlZCwgc2lnbmVkIGFuZFxuICAvLyBjYXJyaWVzIGl0cyBTQk9NIGF0dGVzdGF0aW9uOyBOVUxMIGZvciBwbHVnaW5zIHRoYXQgcHJvZHVjZSBubyBpbWFnZVxuICAvLyAobWV0YWRhdGFfb25seSwgYXBwcm92YWwgc3RlcHMpLiBgaW1hZ2VEaWdlc3RgIGlzIHdoYXQgc3ludGggcGlucyBDb2RlQnVpbGRcbiAgLy8gdG8gKGA8cmVwbz5Ac2hhMjU2OuKApmApIOKAlCBuZXZlciB0aGUgbXV0YWJsZSBgbmFtZTp2ZXJzaW9uYCB0YWcuXG4gIC8vIGBpbWFnZVNvdXJjZWAgc2VwYXJhdGVzIGFuIGltYWdlIHRoaXMgcGxhdGZvcm0gQlVJTFQgKEJ1aWxkS2l0IHByb3ZlbmFuY2VcbiAgLy8gYXR0YWNoZWQpIGZyb20gYW4gVVBMT0FERUQgYGltYWdlLnRhcmAgd2hvc2UgYnVpbGQgaXQgbmV2ZXIgc2F3LlxuICBpbWFnZURpZ2VzdDogdmFyY2hhcignaW1hZ2VfZGlnZXN0JywgeyBsZW5ndGg6IDcxIH0pLFxuICBpbWFnZVNvdXJjZTogdmFyY2hhcignaW1hZ2Vfc291cmNlJywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPEltYWdlU291cmNlPigpLFxuXG4gIC8vIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZyBtZXRhZGF0YSAob3duZXJzaGlwIC8gbGlmZWN5Y2xlIC8gY2xhc3NpZmljYXRpb24pLlxuICAvLyBvd25lcklkIGRlZmF1bHRzIHRvIHRoZSBjcmVhdGluZyB1c2VyIChzZXQgYXQgaW5zZXJ0KSwgc28gZXZlcnkgcGx1Z2luIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPExpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBMaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgncGx1Z2luX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIEluZGV4ZXMgZm9yIGNvbW1vbiBxdWVyaWVzXG4gIG5hbWVJZHg6IGluZGV4KCdwbHVnaW5fbmFtZV9pZHgnKS5vbih0YWJsZS5uYW1lKSxcbiAgb3JnSWRJZHg6IGluZGV4KCdwbHVnaW5fb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgdmVyc2lvbklkeDogaW5kZXgoJ3BsdWdpbl92ZXJzaW9uX2lkeCcpLm9uKHRhYmxlLnZlcnNpb24pLFxuICBhY3RpdmVJZHg6IGluZGV4KCdwbHVnaW5fYWN0aXZlX2lkeCcpLm9uKHRhYmxlLmlzQWN0aXZlKSxcbiAgY3JlYXRlZEF0SWR4OiBpbmRleCgncGx1Z2luX2NyZWF0ZWRfYXRfaWR4Jykub24odGFibGUuY3JlYXRlZEF0KSxcbiAgdXBkYXRlZEF0SWR4OiBpbmRleCgncGx1Z2luX3VwZGF0ZWRfYXRfaWR4Jykub24odGFibGUudXBkYXRlZEF0KSxcblxuICAvLyBDYXRlZ29yeSBpbmRleCBmb3IgZmlsdGVyaW5nXG4gIGNhdGVnb3J5SWR4OiBpbmRleCgncGx1Z2luX2NhdGVnb3J5X2lkeCcpLm9uKHRhYmxlLmNhdGVnb3J5KSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgaW5kZXhlczogXCJteSBzZXJ2aWNlc1wiIChvd25lcikgKyBsaWZlY3ljbGUgZmlsdGVyLlxuICBvd25lcklkeDogaW5kZXgoJ3BsdWdpbl9vd25lcl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUub3duZXJJZCksXG4gIGxpZmVjeWNsZUlkeDogaW5kZXgoJ3BsdWdpbl9saWZlY3ljbGVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmxpZmVjeWNsZSksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBjb21tb24gYWNjZXNzIHBhdHRlcm4gKG9yZ0lkICsgaXNBY3RpdmUpXG4gIG9yZ0FjdGl2ZUlkeDogaW5kZXgoJ3BsdWdpbl9vcmdfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pc0FjdGl2ZSksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBmaWx0ZXJlZCBxdWVyaWVzIChvcmdJZCArIHZpc2liaWxpdHkgKyBpc0FjdGl2ZSlcbiAgb3JnVmlzaWJpbGl0eUFjdGl2ZUlkeDogaW5kZXgoJ3BsdWdpbl9vcmdfdmlzaWJpbGl0eV9hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnZpc2liaWxpdHksIHRhYmxlLmlzQWN0aXZlKSxcbiAgLy8gRHJpdmVzIHRoZSBcIm15IHByaXZhdGUgZHJhZnRzXCIgbGVnIG9mIHRoZSB2aXNpYmlsaXR5IHByZWRpY2F0ZS5cbiAgY3JlYXRlZEJ5SWR4OiBpbmRleCgncGx1Z2luX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRCeSksXG5cbiAgLy8gUGFydGlhbCBpbmRleCBmb3IgYWN0aXZlLW9ubHkgcXVlcmllcyAoc21hbGxlciwgZmFzdGVyIHRoYW4gZnVsbCBpbmRleClcbiAgYWN0aXZlT25seU9yZ0lkeDogaW5kZXgoJ3BsdWdpbl9hY3RpdmVfb25seV9vcmdfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRBdCkud2hlcmUoc3FsYGlzX2FjdGl2ZSA9IHRydWVgKSxcblxuICAvLyBVbmlxdWUgY29uc3RyYWludCBvbiBuYW1lICsgdmVyc2lvbiArIG9yZ0lkXG4gIG5hbWVWZXJzaW9uT3JnVW5pcXVlOiB1bmlxdWVJbmRleCgncGx1Z2luX25hbWVfdmVyc2lvbl9vcmdfdW5pcXVlJylcbiAgICAub24odGFibGUubmFtZSwgdGFibGUudmVyc2lvbiwgdGFibGUub3JnSWQpLFxuXG4gIC8vIENoZWNrIGNvbnN0cmFpbnRzXG4gIHZlcnNpb25DaGVjazogY2hlY2soICdwbHVnaW5fdmVyc2lvbl9jaGVjaycsXG4gICAgc3FsYCR7dGFibGUudmVyc2lvbn0gfiAnXlswLTldK1xcLlswLTldK1xcLlswLTldKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JCdgLFxuICApLFxuICBpbWFnZURpZ2VzdENoZWNrOiBjaGVjaygncGx1Z2luX2ltYWdlX2RpZ2VzdF9jaGVjaycsXG4gICAgc3FsYCR7dGFibGUuaW1hZ2VEaWdlc3R9IElTIE5VTEwgT1IgJHt0YWJsZS5pbWFnZURpZ2VzdH0gfiAnXnNoYTI1NjpbMC05YS1mXXs2NH0kJ2AsXG4gICksXG4gIGltYWdlU291cmNlQ2hlY2s6IGNoZWNrKCdwbHVnaW5faW1hZ2Vfc291cmNlX2NoZWNrJyxcbiAgICBzcWxgJHt0YWJsZS5pbWFnZVNvdXJjZX0gSVMgTlVMTCBPUiAke3RhYmxlLmltYWdlU291cmNlfSBJTiAoJ2J1aWx0JywgJ3VwbG9hZGVkJylgLFxuICApLFxufSkpO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgdHlwZXMgcmVwcmVzZW50aW5nIGRhdGFiYXNlIHJvd3NcbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luID0gdHlwZW9mIHBsdWdpbi4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5JbnNlcnQgPSB0eXBlb2YgcGx1Z2luLiRpbmZlckluc2VydDtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZXMgZm9yIHdvcmtpbmcgd2l0aCBwYXJ0aWFsIHVwZGF0ZXNcbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luVXBkYXRlID0gUGFydGlhbDxPbWl0PFBsdWdpbkluc2VydCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ2NyZWF0ZWRCeSc+PjtcbiJdfQ==
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBRXZDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBbURsSTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFO0lBQ3ZDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMs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LGdCQUFnQixFQUFFLEtBQUssQ0FBQywyQkFBMkIsRUFDakQsR0FBRyxDQUFBLEdBQUcsS0FBSyxDQUFDLFdBQVcsZUFBZSxLQUFLLENBQUMsV0FBVyw0QkFBNEIsQ0FDcEY7SUFDRCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsMkJBQTJCLEVBQ2pELEdBQUcsQ0FBQSxHQUFHLEtBQUssQ0FBQyxXQUFXLGVBQWUsS0FBSyxDQUFDLFdBQVcsMkJBQTJCLENBQ25GO0NBQ0YsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHtcbiAgQ29tcHV0ZVR5cGUsIFBsdWdpblR5cGUsIFNZU1RFTV9PUkdfSUQsIHR5cGUgQ3JpdGljYWxpdHksIHR5cGUgRW50aXR5TGFiZWxzLCB0eXBlIEVudGl0eUxpbmssIHR5cGUgTGlmZWN5Y2xlLFxuICB0eXBlIE1ldGFkYXRhU291cmNlcywgdHlwZSBPd25lclR5cGUsIHR5cGUgVmlzaWJpbGl0eSxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4LCBjaGVjayB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIFNlY3JldCByZXF1aXJlbWVudCBmb3IgYSBwbHVnaW4uXG4gKiBEZWNsYXJlcyBuYW1lZCBzZWNyZXRzIHRoZSBwbHVnaW4gZXhwZWN0cyBhdCBidWlsZCB0aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNlY3JldCB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXJlIGEgcGx1Z2luJ3MgaW1hZ2UgY2FtZSBmcm9tOiBgYnVpbHRgIGJ5IHRoZSBwbGF0Zm9ybSdzIEJ1aWxkS2l0IChjYXJyaWVzXG4gKiBTTFNBIHByb3ZlbmFuY2UpIG9yIGB1cGxvYWRlZGAgYXMgYSBwcmVidWlsdCBgaW1hZ2UudGFyYCAoU0JPTSArIHNpZ25hdHVyZVxuICogb25seSDigJQgdGhlIHBsYXRmb3JtIG5ldmVyIHNhdyB0aGUgYnVpbGQpLlxuICovXG5leHBvcnQgdHlwZSBJbWFnZVNvdXJjZSA9ICdidWlsdCcgfCAndXBsb2FkZWQnO1xuXG4vKipcbiAqIFBsdWdpbiBsaWZlY3ljbGU6IHRoZSBzaGFyZWQgY2F0YWxvZyB7QGxpbmsgTGlmZWN5Y2xlfSBwbHVzIGB5YW5rZWRgLCB3aGljaFxuICogb25seSBwbHVnaW4gdmVyc2lvbnMgY2FuIHJlYWNoIChhIHlhbmtlZCB2ZXJzaW9uIHN0b3BzIHJlc29sdmluZyBmb3IgbmV3XG4gKiBzeW50aHMpLiBgeWFua2VkQXRgIC8gYGRlcHJlY2F0ZWRBdGAgYXJlIHRoZSBhdXRob3JpdGF0aXZlIHRpbWVzdGFtcHM7IHRoZVxuICogbGlmZWN5Y2xlIHZhbHVlIG1pcnJvcnMgdGhlbSBmb3IgY2F0YWxvZyBmaWx0ZXJpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbkxpZmVjeWNsZSA9IExpZmVjeWNsZSB8ICd5YW5rZWQnO1xuXG4vKiogQ29lcmNpb24gdHlwZSBhIGByZXF1aXJlZE1ldGFkYXRhYCAvIGByZXF1aXJlZFZhcnNgIGtleSBpcyBkZWNsYXJlZCBhcy4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbkNvbnRyYWN0VmFsdWVUeXBlID0gJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sJyB8ICdqc29uJztcblxuLyoqXG4gKiBUaGUgc3BlYydzIHNtb2tlLXRlc3QgZGVjbGFyYXRpb24uIFRvZGF5IGEgYmFyZSBjb21tYW5kIHN0cmluZzsgc3RvcmVkIGFzXG4gKiBKU09OQiBzbyBhIHN0cnVjdHVyZWQgZm9ybSBjYW4gZm9sbG93IHdpdGhvdXQgYW5vdGhlciBjb2x1bW4uXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpblNtb2tlVGVzdCA9IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKiogQSBjdXJhdGVkIGljb246IGEga2V5IGludG8gdGhlIGN1cmF0ZWQgc2V0LCBwbHVzIGFuIG9wdGlvbmFsIGJhZGdlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5JY29uIHtcbiAga2V5OiBzdHJpbmc7XG4gIGJhZGdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0b3JhZ2Uga2V5cyBvZiBhbiB1cGxvYWRlZCBpY29uJ3MgcmUtZW5jb2RlZCBXZWJQIHJlbmRpdGlvbnMgKGltYWdlLXJlZ2lzdHJ5XG4gKiBkZWNvZGVzICsgcmUtZW5jb2RlcyBldmVyeSB1cGxvYWQ7IHRoZSByYXcgZmlsZSBhbmQgU1ZHIGFyZSBuZXZlciBzdG9yZWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblVwbG9hZGVkSWNvbiB7XG4gIGtleTI1Njogc3RyaW5nO1xuICBrZXk2NDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIHJldXNhYmxlIHBsdWdpbiBjb25maWd1cmF0aW9ucy5cbiAqIFBsdWdpbnMgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBzeW50aC9idWlsZCBzdGVwcyBpbiBDREsgcGlwZWxpbmVzLlxuICpcbiAqIEZlYXR1cmVzICogLSBWZXJzaW9uaW5nIHN1cHBvcnQgd2l0aCBzZW1hbnRpYyB2ZXJzaW9uaW5nXG4gKiAtIEFjY2VzcyBjb250cm9sIHZpYSBvcmdJZCBhbmQgdGhlIHRocmVlLXJ1bmcgYHZpc2liaWxpdHlgIGxhZGRlclxuICogLSBGdWxsIGF1ZGl0IHRyYWlsIChjcmVhdGVkL3VwZGF0ZWQgYnkvYXQpXG4gKiAtIEZsZXhpYmxlIG1ldGFkYXRhIHN0b3JhZ2UgdmlhIEpTT05CXG4gKiAtIFN1cHBvcnQgZm9yIGJvdGggU2hlbGxTdGVwIGFuZCBDb2RlQnVpbGRTdGVwIHR5cGVzXG4gKlxuICogQHRhYmxlIHBsdWdpbnNcbiAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbiA9IHBnVGFibGUoJ3BsdWdpbnMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBDb3JlIHBsdWdpbiBpbmZvcm1hdGlvblxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICB2ZXJzaW9uOiB2YXJjaGFyKCd2ZXJzaW9uJywgeyBsZW5ndGg6IDUwIH0pXG4gICAgLmRlZmF1bHQoJzEuMC4wJylcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFBsdWdpbiBjbGFzc2lmaWNhdGlvblxuICBjYXRlZ29yeTogdmFyY2hhcignY2F0ZWdvcnknLCB7IGxlbmd0aDogNTAgfSlcbiAgICAuZGVmYXVsdCgndW5rbm93bicpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQbHVnaW4gY29uZmlndXJhdGlvblxuICBtZXRhZGF0YToganNvbmIoJ21ldGFkYXRhJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBwbHVnaW5UeXBlOiB2YXJjaGFyKCdwbHVnaW5fdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxQbHVnaW5UeXBlPigpXG4gICAgLmRlZmF1bHQoJ0NvZGVCdWlsZFN0ZXAnIGFzIFBsdWdpblR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY29tcHV0ZVR5cGU6IHZhcmNoYXIoJ2NvbXB1dGVfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxDb21wdXRlVHlwZT4oKVxuICAgIC5kZWZhdWx0KCdTTUFMTCcgYXMgQ29tcHV0ZVR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgdGltZW91dDogaW50ZWdlcigndGltZW91dCcpLFxuICBmYWlsdXJlQmVoYXZpb3I6IHZhcmNoYXIoJ2ZhaWx1cmVfYmVoYXZpb3InLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8J2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc+KClcbiAgICAuZGVmYXVsdCgnZmFpbCcpXG4gICAgLm5vdE51bGwoKSxcbiAgc2VjcmV0czoganNvbmIoJ3NlY3JldHMnKVxuICAgIC4kdHlwZTxQbHVnaW5TZWNyZXRbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHZhcmNoYXIoJ3ByaW1hcnlfb3V0cHV0X2RpcmVjdG9yeScsIHsgbGVuZ3RoOiAyOCB9KSxcblxuICAvLyBCdWlsZCBjb25maWd1cmF0aW9uXG4gIGVudjoganNvbmIoJ2VudicpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBidWlsZEFyZ3M6IGpzb25iKCdidWlsZF9hcmdzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGluc3RhbGxDb21tYW5kczogdGV4dCgnaW5zdGFsbF9jb21tYW5kcycpXG4gICAgLmFycmF5KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICBjb21tYW5kczogdGV4dCgnY29tbWFuZHMnKVxuICAgIC5hcnJheSgpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBTcGVjIGNvbnRyYWN0LCBwZXJzaXN0ZWQgKG5vdCBqdXN0IHZhbGlkYXRlZCBhdCB1cGxvYWQpOiB0aGVcbiAgLy8gYHt7IHBpcGVsaW5lLm1ldGFkYXRhLlggfX1gIC8gYHt7IHBpcGVsaW5lLnZhcnMuWCB9fWAga2V5cyBhIHBpcGVsaW5lIG11c3RcbiAgLy8gc3VwcGx5LCB0aGVpciBkZWNsYXJlZCBjb2VyY2lvbiB0eXBlcywgdGhlIHNtb2tlIHRlc3QsIGFuZCB0aGUgZGVjbGFyZWRcbiAgLy8gb3V0Ym91bmQgaG9zdG5hbWVzIChzcGVjIGBuZXR3b3JrLmVncmVzc2ApIHNob3duIHRvIGNvbnN1bWVycy5cbiAgcmVxdWlyZWRNZXRhZGF0YToganNvbmIoJ3JlcXVpcmVkX21ldGFkYXRhJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICByZXF1aXJlZFZhcnM6IGpzb25iKCdyZXF1aXJlZF92YXJzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICBtZXRhZGF0YVR5cGVzOiBqc29uYignbWV0YWRhdGFfdHlwZXMnKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCBQbHVnaW5Db250cmFjdFZhbHVlVHlwZT4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICB2YXJzVHlwZXM6IGpzb25iKCd2YXJzX3R5cGVzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgUGx1Z2luQ29udHJhY3RWYWx1ZVR5cGU+PigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgc21va2VUZXN0OiBqc29uYignc21va2VfdGVzdCcpLiR0eXBlPFBsdWdpblNtb2tlVGVzdD4oKSxcbiAgbmV0d29ya0VncmVzczoganNvbmIoJ25ldHdvcmtfZWdyZXNzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERvY3VtZW50YXRpb24uIFRoZSBSRUFETUUgaXMga2VwdCBhcyBzb3VyY2UgbWFya2Rvd24gQU5EIHByZS1zYW5pdGl6ZWRcbiAgLy8gSFRNTCAocmVuZGVyZWQgb25jZSBhdCB1cGxvYWQpLCBzbyBubyByZWFkIHBhdGggcmVuZGVycyB1bnRydXN0ZWQgbWFya2Rvd24uXG4gIHJlYWRtZU1kOiB0ZXh0KCdyZWFkbWVfbWQnKSxcbiAgcmVhZG1lSHRtbDogdGV4dCgncmVhZG1lX2h0bWwnKSxcbiAgLy8gU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIuXG4gIGxpY2Vuc2U6IHZhcmNoYXIoJ2xpY2Vuc2UnLCB7IGxlbmd0aDogNjQgfSksXG4gIGNoYW5nZWxvZzogdGV4dCgnY2hhbmdlbG9nJyksXG4gIGhvbWVwYWdlVXJsOiB2YXJjaGFyKCdob21lcGFnZV91cmwnLCB7IGxlbmd0aDogMjA0OCB9KSxcbiAgc291cmNlVXJsOiB2YXJjaGFyKCdzb3VyY2VfdXJsJywgeyBsZW5ndGg6IDIwNDggfSksXG4gIGljb246IGpzb25iKCdpY29uJykuJHR5cGU8UGx1Z2luSWNvbj4oKSxcbiAgdXBsb2FkZWRJY29uOiBqc29uYigndXBsb2FkZWRfaWNvbicpLiR0eXBlPFBsdWdpblVwbG9hZGVkSWNvbj4oKSxcblxuICAvLyBDYXRhbG9nIG1ldGFkYXRhOiBkZXRlY3RlZCBmcm9tIHRoZSBwYWNrYWdlIChzcGVjLCBSRUFETUUsXG4gIC8vIHRoZSBwbHVnaW4ncyBvd24gRG9ja2VyZmlsZSBPQ0kgbGFiZWxzKSwgdGhlbiBhY2NlcHRlZCBvciBlZGl0ZWQgYnkgdGhlXG4gIC8vIHVzZXIuIGBzdW1tYXJ5YCBpcyB0aGUgY2FyZCBvbmUtbGluZXI7IGBkaXNwbGF5TmFtZWAgZmFsbHMgYmFjayB0b1xuICAvLyBgbmFtZWAgd2hlbiB1bnNldC4gYG1ldGFkYXRhU291cmNlc2AgcmVjb3JkcywgcGVyIGRlc2NyaXB0aXZlIGZpZWxkLCB3aGVyZVxuICAvLyBpdHMgdmFsdWUgY2FtZSBmcm9tIChgc3BlYyB8IHJlYWRtZSB8IGRvY2tlcmZpbGUgfCBkZXJpdmVkIHwgdXNlcmApIHNvIGFcbiAgLy8gcmV2aWV3ZXIgY2FuIHNlZSB3aGF0IHdhcyB0eXBlZCByYXRoZXIgdGhhbiBzaGlwcGVkIGluIHRoZSBwYWNrYWdlLlxuICBzdW1tYXJ5OiB2YXJjaGFyKCdzdW1tYXJ5JywgeyBsZW5ndGg6IDE2MCB9KSxcbiAgZGlzcGxheU5hbWU6IHZhcmNoYXIoJ2Rpc3BsYXlfbmFtZScsIHsgbGVuZ3RoOiAxMDAgfSksXG4gIGRvY3VtZW50YXRpb25Vcmw6IHZhcmNoYXIoJ2RvY3VtZW50YXRpb25fdXJsJywgeyBsZW5ndGg6IDIwNDggfSksXG4gIG1ldGFkYXRhU291cmNlczoganNvbmIoJ21ldGFkYXRhX3NvdXJjZXMnKVxuICAgIC4kdHlwZTxNZXRhZGF0YVNvdXJjZXM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERvY2tlciBjb25maWd1cmF0aW9uXG4gIGRvY2tlcmZpbGU6IHRleHQoJ2RvY2tlcmZpbGUnKSxcbiAgYnVpbGRUeXBlOiB2YXJjaGFyKCdidWlsZF90eXBlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLmRlZmF1bHQoJ2J1aWxkX2ltYWdlJylcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFN1cHBseSBjaGFpbi4gU2V0IGJ5IHRoZSBidWlsZCB3b3JrZXIgb25jZSB0aGUgaW1hZ2UgaXMgcHVzaGVkLCBzaWduZWQgYW5kXG4gIC8vIGNhcnJpZXMgaXRzIFNCT00gYXR0ZXN0YXRpb247IE5VTEwgZm9yIHBsdWdpbnMgdGhhdCBwcm9kdWNlIG5vIGltYWdlXG4gIC8vIChtZXRhZGF0YV9vbmx5LCBhcHByb3ZhbCBzdGVwcykuIGBpbWFnZURpZ2VzdGAgaXMgd2hhdCBzeW50aCBwaW5zIENvZGVCdWlsZFxuICAvLyB0byAoYDxyZXBvPkBzaGEyNTY64oCmYCkg4oCUIG5ldmVyIHRoZSBtdXRhYmxlIGBuYW1lOnZlcnNpb25gIHRhZy5cbiAgLy8gYGltYWdlU291cmNlYCBzZXBhcmF0ZXMgYW4gaW1hZ2UgdGhpcyBwbGF0Zm9ybSBCVUlMVCAoQnVpbGRLaXQgcHJvdmVuYW5jZVxuICAvLyBhdHRhY2hlZCkgZnJvbSBhbiBVUExPQURFRCBgaW1hZ2UudGFyYCB3aG9zZSBidWlsZCBpdCBuZXZlciBzYXcuXG4gIGltYWdlRGlnZXN0OiB2YXJjaGFyKCdpbWFnZV9kaWdlc3QnLCB7IGxlbmd0aDogNzEgfSksXG4gIGltYWdlU291cmNlOiB2YXJjaGFyKCdpbWFnZV9zb3VyY2UnLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8SW1hZ2VTb3VyY2U+KCksXG5cbiAgLy8gVnVsbmVyYWJpbGl0eSBzY2FuIChncnlwZSBvdmVyIHRoZSBTQk9NIGF0IGJ1aWxkOyBuaWdodGx5IHJlc2NhbikgYW5kIHRoZVxuICAvLyBpbWFnZSdzIGVmZmVjdGl2ZSBVU0VSLiBOVUxMID0gbm90IHNjYW5uZWQgLyBwcm9kdWNlcyBubyBpbWFnZS5cbiAgdnVsbkNyaXRpY2FsOiBpbnRlZ2VyKCd2dWxuX2NyaXRpY2FsJyksXG4gIHZ1bG5IaWdoOiBpbnRlZ2VyKCd2dWxuX2hpZ2gnKSxcbiAgdnVsbk1lZGl1bTogaW50ZWdlcigndnVsbl9tZWRpdW0nKSxcbiAgdnVsbkxvdzogaW50ZWdlcigndnVsbl9sb3cnKSxcbiAgc2Nhbm5lZEF0OiB0aW1lc3RhbXAoJ3NjYW5uZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgcnVuQXNSb290OiBib29sZWFuKCdydW5fYXNfcm9vdCcpLFxuXG4gIC8vIFZlcnNpb24gbGlmZWN5Y2xlLiBgYnJlYWtpbmdgOiBhIHB1Ymxpc2hlci1tYXJrZWQgbWFqb3IgdGhhdCBgbGF0ZXN0YFxuICAvLyBpbnN0YWxscyBuZXZlciBjcm9zcyB3aXRob3V0IHJlLWFwcHJvdmFsLiBgZnJvemVuQXRgOiBzZXQgdGhlIG1vbWVudCBhXG4gIC8vIHB1Ymxpc2ggcmVxdWVzdCByZWZlcmVuY2VzIHRoaXMgdmVyc2lvbiDigJQgcmUtdXBsb2FkaW5nIGl0IGlzIHRoZW4gcmVmdXNlZFxuICAvLyAoNDA5KS4gWWFuayAvIGRlcHJlY2F0aW9uIGNhcnJ5IHRoZWlyIHJlYXNvbiBhbG9uZ3NpZGUgdGhlIHRpbWVzdGFtcC5cbiAgYnJlYWtpbmc6IGJvb2xlYW4oJ2JyZWFraW5nJylcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAubm90TnVsbCgpLFxuICBmcm96ZW5BdDogdGltZXN0YW1wKCdmcm96ZW5fYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgeWFua2VkQXQ6IHRpbWVzdGFtcCgneWFua2VkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHlhbmtSZWFzb246IHRleHQoJ3lhbmtfcmVhc29uJyksXG4gIGRlcHJlY2F0ZWRBdDogdGltZXN0YW1wKCdkZXByZWNhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlcHJlY2F0aW9uTWVzc2FnZTogdGV4dCgnZGVwcmVjYXRpb25fbWVzc2FnZScpLFxuXG4gIC8vIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZyBtZXRhZGF0YSAob3duZXJzaGlwIC8gbGlmZWN5Y2xlIC8gY2xhc3NpZmljYXRpb24pLlxuICAvLyBvd25lcklkIGRlZmF1bHRzIHRvIHRoZSBjcmVhdGluZyB1c2VyIChzZXQgYXQgaW5zZXJ0KSwgc28gZXZlcnkgcGx1Z2luIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPFBsdWdpbkxpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBQbHVnaW5MaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuXG4gIC8vIFRoZSBxdW90YSBwZXJpb2QgKGByZXNldEF0YCkgdGhpcyB2ZXJzaW9uJ3MgYHBsdWdpbnNgIHNsb3Qgd2FzIGNoYXJnZWQgdG9cbiAgLy8gYXQgdXBsb2FkOyBOVUxMIHdoZW4gbm8gc2xvdCB3YXMgY2hhcmdlZCAoc3lzdGVtIGNhdGFsb2cgbG9hZHMpIG9yIGl0IHdhc1xuICAvLyBhbHJlYWR5IHJlZnVuZGVkLiBBIGRlbGV0ZS9wdXJnZSByZWZ1bmRzIENPTkRJVElPTkFMTFkgb24gaXQgKHRoZSBxdW90YVxuICAvLyBzZXJ2aWNlIGlnbm9yZXMgdGhlIHJlZnVuZCBvbmNlIHRoYXQgcGVyaW9kIGhhcyByb2xsZWQgb3ZlciksIHRoZW4gY2xlYXJzIGl0LlxuICBxdW90YVJlc2V0QXQ6IHRpbWVzdGFtcCgncXVvdGFfcmVzZXRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gUGFydGlhbCBpbmRleCBvdmVyIGp1c3QgdGhlIHRvbWJzdG9uZXMg4oCUIGRyaXZlcyB0aGUgcmV0ZW50aW9uIHB1cmdlIHN3ZWVwLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BsdWdpbl9wdXJnZV9pZHgnKS5vbih0YWJsZS5wdXJnZUFmdGVyKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTGApLFxuICAvLyBNaXJyb3JzIHRoZSBpbmRleGVzIHBvc3RncmVzLWluaXQuc3FsIGNyZWF0ZXMsIG5hbWUgZm9yIG5hbWUgKHRoZSBTUUwgZmlsZSBpc1xuICAvLyB3aGF0IGRlcGxveXM7IHNjaGVtYS1yZWZsZWN0aW9uLnRlc3QudHMga2VlcHMgdGhlIHR3byBpbiBsb2NrLXN0ZXApLlxuICBvcmdJZElkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX29yZ19pZCcpLm9uKHRhYmxlLm9yZ0lkKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIG5hbWVJZHg6IGluZGV4KCdpZHhfcGx1Z2luc19uYW1lJykub24odGFibGUubmFtZSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBuYW1lVmVyc2lvbklkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX25hbWVfdmVyc2lvbicpLm9uKHRhYmxlLm5hbWUsIHRhYmxlLnZlcnNpb24pLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgdmlzaWJpbGl0eUlkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX3Zpc2liaWxpdHknKS5vbih0YWJsZS52aXNpYmlsaXR5KS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIGlzRGVmYXVsdElkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX2lzX2RlZmF1bHQnKS5vbih0YWJsZS5uYW1lLCB0YWJsZS5pc0RlZmF1bHQpLndoZXJlKHNxbGBpc19kZWZhdWx0ID0gdHJ1ZSBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIGNhdGVnb3J5SWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfY2F0ZWdvcnknKS5vbih0YWJsZS5jYXRlZ29yeSksXG4gIGFjdGl2ZUlkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX2lzX2FjdGl2ZScpLm9uKHRhYmxlLmlzQWN0aXZlKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIG9yZ0NyZWF0ZWRJZHg6IGluZGV4KCdpZHhfcGx1Z2luc19vcmdfY3JlYXRlZCcpLm9uKHRhYmxlLm9yZ0lkLCBzcWxgJHt0YWJsZS5jcmVhdGVkQXR9IERFU0NgKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIG9yZ05hbWVJZHg6IGluZGV4KCdpZHhfcGx1Z2luc19vcmdfbmFtZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5uYW1lKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGluZGV4ZXM6IFwibXkgc2VydmljZXNcIiAob3duZXIpICsgbGlmZWN5Y2xlIGZpbHRlci5cbiAgb3duZXJJZHg6IGluZGV4KCdwbHVnaW5fb3duZXJfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLm93bmVySWQpLFxuICBsaWZlY3ljbGVJZHg6IGluZGV4KCdwbHVnaW5fbGlmZWN5Y2xlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5saWZlY3ljbGUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgZmlsdGVyZWQgcXVlcmllcyAob3JnSWQgKyB2aXNpYmlsaXR5ICsgaXNBY3RpdmUpXG4gIG9yZ1Zpc2liaWxpdHlBY3RpdmVJZHg6IGluZGV4KCdwbHVnaW5fb3JnX3Zpc2liaWxpdHlfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS52aXNpYmlsaXR5LCB0YWJsZS5pc0FjdGl2ZSksXG4gIC8vIERyaXZlcyB0aGUgXCJteSBwcml2YXRlIGRyYWZ0c1wiIGxlZyBvZiB0aGUgdmlzaWJpbGl0eSBwcmVkaWNhdGUuXG4gIGNyZWF0ZWRCeUlkeDogaW5kZXgoJ3BsdWdpbl9jcmVhdGVkX2J5X2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQnkpLFxuXG4gIC8vIFVuaXF1ZSBjb25zdHJhaW50IG9uIG5hbWUgKyB2ZXJzaW9uICsgb3JnSWRcbiAgbmFtZVZlcnNpb25PcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwbHVnaW5fbmFtZV92ZXJzaW9uX29yZ191bmlxdWUnKVxuICAgIC5vbih0YWJsZS5uYW1lLCB0YWJsZS52ZXJzaW9uLCB0YWJsZS5vcmdJZCksXG5cbiAgLy8gQ2hlY2sgY29uc3RyYWludHNcbiAgdmVyc2lvbkNoZWNrOiBjaGVjayggJ3BsdWdpbl92ZXJzaW9uX2NoZWNrJyxcbiAgICBzcWxgJHt0YWJsZS52ZXJzaW9ufSB+ICdeWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rKC1bYS16QS1aMC05Li1dKyk/KFxcK1thLXpBLVowLTkuLV0rKT8kJ2AsXG4gICksXG4gIGltYWdlRGlnZXN0Q2hlY2s6IGNoZWNrKCdwbHVnaW5faW1hZ2VfZGlnZXN0X2NoZWNrJyxcbiAgICBzcWxgJHt0YWJsZS5pbWFnZURpZ2VzdH0gSVMgTlVMTCBPUiAke3RhYmxlLmltYWdlRGlnZXN0fSB+ICdec2hhMjU2OlswLTlhLWZdezY0fSQnYCxcbiAgKSxcbiAgaW1hZ2VTb3VyY2VDaGVjazogY2hlY2soJ3BsdWdpbl9pbWFnZV9zb3VyY2VfY2hlY2snLFxuICAgIHNxbGAke3RhYmxlLmltYWdlU291cmNlfSBJUyBOVUxMIE9SICR7dGFibGUuaW1hZ2VTb3VyY2V9IElOICgnYnVpbHQnLCAndXBsb2FkZWQnKWAsXG4gICksXG59KSk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCB0eXBlcyByZXByZXNlbnRpbmcgZGF0YWJhc2Ugcm93c1xuICovXG5leHBvcnQgdHlwZSBQbHVnaW4gPSB0eXBlb2YgcGx1Z2luLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkluc2VydCA9IHR5cGVvZiBwbHVnaW4uJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBQbHVnaW5VcGRhdGUgPSBQYXJ0aWFsPE9taXQ8UGx1Z2luSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Background: postgres-init.sql installs RLS policies on every user-data
|
|
5
5
|
* table that consult two session GUCs — `app.org_id` and `app.is_sysadmin`.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* their soak; the same context plumbing covers both.
|
|
6
|
+
* Every tenant table is `FORCE ROW LEVEL SECURITY`, so the policies enforce
|
|
7
|
+
* even for the (owning) connection user — a query against one must run inside a
|
|
8
|
+
* transaction that has SET LOCAL'd both GUCs or it returns zero rows for
|
|
9
|
+
* non-sysadmins (and may fail to write for any caller). The cross-org plugin
|
|
10
|
+
* ecosystem catalog tables carry a permissive app-role policy instead.
|
|
12
11
|
*
|
|
13
12
|
* This module is the seam.
|
|
14
13
|
*
|
|
@@ -24,7 +23,7 @@
|
|
|
24
23
|
* 3. `runWithTenantContext(ctx, fn)` is the Express-middleware-side
|
|
25
24
|
* bookend that establishes the AsyncLocalStorage scope for the request.
|
|
26
25
|
*
|
|
27
|
-
* Migration order
|
|
26
|
+
* Migration order:
|
|
28
27
|
* - First adopters: newly-written services (dashboard, alert-destination)
|
|
29
28
|
* where the change is mechanical.
|
|
30
29
|
* - Then high-write services (plugin, pipeline). Soak each one before
|
package/lib/database/tenancy.js
CHANGED
|
@@ -5,12 +5,11 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Background: postgres-init.sql installs RLS policies on every user-data
|
|
7
7
|
* table that consult two session GUCs — `app.org_id` and `app.is_sysadmin`.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* their soak; the same context plumbing covers both.
|
|
8
|
+
* Every tenant table is `FORCE ROW LEVEL SECURITY`, so the policies enforce
|
|
9
|
+
* even for the (owning) connection user — a query against one must run inside a
|
|
10
|
+
* transaction that has SET LOCAL'd both GUCs or it returns zero rows for
|
|
11
|
+
* non-sysadmins (and may fail to write for any caller). The cross-org plugin
|
|
12
|
+
* ecosystem catalog tables carry a permissive app-role policy instead.
|
|
14
13
|
*
|
|
15
14
|
* This module is the seam.
|
|
16
15
|
*
|
|
@@ -26,7 +25,7 @@
|
|
|
26
25
|
* 3. `runWithTenantContext(ctx, fn)` is the Express-middleware-side
|
|
27
26
|
* bookend that establishes the AsyncLocalStorage scope for the request.
|
|
28
27
|
*
|
|
29
|
-
* Migration order
|
|
28
|
+
* Migration order:
|
|
30
29
|
* - First adopters: newly-written services (dashboard, alert-destination)
|
|
31
30
|
* where the change is mechanical.
|
|
32
31
|
* - Then high-write services (plugin, pipeline). Soak each one before
|
|
@@ -35,7 +34,7 @@
|
|
|
35
34
|
* also set `app.is_sysadmin = 'true'` or they'll lose access to it.
|
|
36
35
|
*/
|
|
37
36
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
38
|
-
import { createLogger } from '@pipeline-builder/api-core';
|
|
37
|
+
import { createLogger, envInt } from '@pipeline-builder/api-core';
|
|
39
38
|
import { sql } from 'drizzle-orm';
|
|
40
39
|
import { db } from './postgres-connection.js';
|
|
41
40
|
const logger = createLogger('tenant-context');
|
|
@@ -56,8 +55,8 @@ function getContextMode() {
|
|
|
56
55
|
* (default 30s); set to `0` to disable the timeout.
|
|
57
56
|
*/
|
|
58
57
|
function getStatementTimeoutMs() {
|
|
59
|
-
const
|
|
60
|
-
return
|
|
58
|
+
const ms = envInt('DB_STATEMENT_TIMEOUT_MS', 30_000);
|
|
59
|
+
return ms >= 0 ? ms : 30_000;
|
|
61
60
|
}
|
|
62
61
|
/**
|
|
63
62
|
* Per-request tenant context. Populated by Express middleware once the JWT
|
|
@@ -130,9 +129,9 @@ export async function withTenantTx(fn) {
|
|
|
130
129
|
const statementTimeoutMs = getStatementTimeoutMs();
|
|
131
130
|
return db.transaction(async (tx) => {
|
|
132
131
|
// Set every transaction-scoped GUC in a SINGLE round-trip. `set_config()`
|
|
133
|
-
// returns its value, so multiple calls compose in one SELECT
|
|
134
|
-
//
|
|
135
|
-
//
|
|
132
|
+
// returns its value, so multiple calls compose in one SELECT rather than a
|
|
133
|
+
// round-trip per GUC — each a network hop that taxes the shared PgBouncer
|
|
134
|
+
// pool on the hot path. `true`
|
|
136
135
|
// = is_local (SET LOCAL semantics: auto-released on COMMIT/ROLLBACK). The
|
|
137
136
|
// driver binds the values as parameters, so a hostile org_id can't break out
|
|
138
137
|
// of the GUC syntax.
|
|
@@ -150,4 +149,4 @@ export async function withTenantTx(fn) {
|
|
|
150
149
|
return fn(tx);
|
|
151
150
|
});
|
|
152
151
|
}
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS90ZW5hbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQWU5QyxTQUFTLGNBQWM7SUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4RCxJQUFJLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZFLHVFQUF1RTtJQUN2RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxDQUFDO0FBc0JEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsRUFBaUIsQ0FBQztBQUVwRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBSSxHQUFrQixFQUFFLEVBQVc7SUFDckUsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7MEVBQzBFO0FBQzFFLE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsT0FBTyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxFQUEyRTtJQUUzRSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1Qsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsc0VBQXNFO1FBQ3RFLG1FQUFtRTtRQUNuRSw2QkFBNkI7UUFDN0IsTUFBTSxJQUFJLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUU7a0JBQ3JFLHdFQUF3RTtrQkFDeEUsK0NBQStDLENBQ2xELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsc0VBQXNFO1lBQ3RFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUU7Z0JBQ2hGLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUs7YUFDakQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUMvQixNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUUxRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixFQUFFLENBQUM7SUFFbkQsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNqQywwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0UsMEVBQTBFO1FBQzFFLDZFQUE2RTtRQUM3RSxxQkFBcUI7UUFDckIsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSwrRUFBK0U7UUFDL0UsNkVBQTZFO1FBQzdFLG1FQUFtRTtRQUNuRSxJQUFJLGtCQUFrQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FDZCxHQUFHLENBQUEsbUNBQW1DLEtBQUssMENBQTBDLFlBQVksNENBQTRDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQ2pMLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FDZCxHQUFHLENBQUEsbUNBQW1DLEtBQUssMENBQTBDLFlBQVksU0FBUyxDQUMzRyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRlbmFudC1jb250ZXh0IHBsdW1iaW5nIGZvciBQb3N0Z3JlcyByb3ctbGV2ZWwgc2VjdXJpdHkuXG4gKlxuICogQmFja2dyb3VuZDogcG9zdGdyZXMtaW5pdC5zcWwgaW5zdGFsbHMgUkxTIHBvbGljaWVzIG9uIGV2ZXJ5IHVzZXItZGF0YVxuICogdGFibGUgdGhhdCBjb25zdWx0IHR3byBzZXNzaW9uIEdVQ3Mg4oCUIGBhcHAub3JnX2lkYCBhbmQgYGFwcC5pc19zeXNhZG1pbmAuXG4gKiBNb3N0IHVzZXItZGF0YSB0YWJsZXMgaGF2ZSBiZWVuIGZsaXBwZWQgdG8gYEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWWAsIHNvXG4gKiB0aGUgcG9saWNpZXMgRE8gZW5mb3JjZSBldmVuIGZvciB0aGUgKG93bmluZykgY29ubmVjdGlvbiB1c2VyIOKAlCBhIHF1ZXJ5XG4gKiBhZ2FpbnN0IGEgRk9SQ0UnZCB0YWJsZSBtdXN0IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiB0aGF0IGhhcyBTRVQgTE9DQUwnZFxuICogYm90aCBHVUNzIG9yIGl0IHJldHVybnMgemVybyByb3dzIGZvciBub24tc3lzYWRtaW5zIChhbmQgbWF5IGZhaWwgdG8gd3JpdGVcbiAqIGZvciBhbnkgY2FsbGVyKS4gQSBmZXcgdGFibGVzIHJlbWFpbiBgRU5BQkxFYC1vbmx5IChvd25lci1ieXBhc3MpIHBlbmRpbmdcbiAqIHRoZWlyIHNvYWs7IHRoZSBzYW1lIGNvbnRleHQgcGx1bWJpbmcgY292ZXJzIGJvdGguXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIHNlYW0uXG4gKlxuICogICAxLiBgdGVuYW50Q29udGV4dGAgKEFzeW5jTG9jYWxTdG9yYWdlKSBjYXJyaWVzIGB7b3JnSWQsIGlzU3VwZXJBZG1pbn1gXG4gKiAgICAgIGRvd24gdGhlIGNhbGwgY2hhaW4gd2l0aG91dCBwcm9wLWRyaWxsaW5nLiBTZXQgb25jZSBhdCB0aGUgcmVxdWVzdFxuICogICAgICBib3VuZGFyeTsgcmVhZGFibGUgZnJvbSBhbnl3aGVyZS5cbiAqXG4gKiAgIDIuIGB3aXRoVGVuYW50VHgoZm4pYCBvcGVucyBhIHRyYW5zYWN0aW9uLCBTRVQgTE9DQUwncyBib3RoIEdVQ3MgZnJvbVxuICogICAgICB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgdGhlbiBpbnZva2VzIGBmbih0eClgLiBTZXJ2aWNlcyBtaWdyYXRlIG9uZVxuICogICAgICBhdCBhIHRpbWUgYnkgd3JhcHBpbmcgdGhlaXIgZXhpc3RpbmcgZHJpenpsZSBjYWxscyBpbiB0aGlzIGhlbHBlciDigJRcbiAqICAgICAgYGRiLnNlbGVjdCgpLmZyb20oLi4uKWAgYmVjb21lcyBgd2l0aFRlbmFudFR4KHR4ID0+IHR4LnNlbGVjdCgpLmZyb20oLi4uKSlgLlxuICpcbiAqICAgMy4gYHJ1bldpdGhUZW5hbnRDb250ZXh0KGN0eCwgZm4pYCBpcyB0aGUgRXhwcmVzcy1taWRkbGV3YXJlLXNpZGVcbiAqICAgICAgYm9va2VuZCB0aGF0IGVzdGFibGlzaGVzIHRoZSBBc3luY0xvY2FsU3RvcmFnZSBzY29wZSBmb3IgdGhlIHJlcXVlc3QuXG4gKlxuICogTWlncmF0aW9uIG9yZGVyIChzZWUgZG9jcy9wbGFucy9mLTEtMC1ybHMtZW5mb3JjZW1lbnQubWQpOlxuICogICAtIEZpcnN0IGFkb3B0ZXJzOiBuZXdseS13cml0dGVuIHNlcnZpY2VzIChkYXNoYm9hcmQsIGFsZXJ0LWRlc3RpbmF0aW9uKVxuICogICAgIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbWVjaGFuaWNhbC5cbiAqICAgLSBUaGVuIGhpZ2gtd3JpdGUgc2VydmljZXMgKHBsdWdpbiwgcGlwZWxpbmUpLiBTb2FrIGVhY2ggb25lIGJlZm9yZVxuICogICAgIGZsaXBwaW5nIHRoZSB1bmRlcmx5aW5nIHRhYmxlIHRvIEZPUkNFLlxuICogICAtIGFkbWluX2F1ZGl0X2xvZyB1c2VzIGEgc3lzYWRtaW4tb25seSBwb2xpY3kg4oCUIHN5c2FkbWluIHBhdGhzIG11c3RcbiAqICAgICBhbHNvIHNldCBgYXBwLmlzX3N5c2FkbWluID0gJ3RydWUnYCBvciB0aGV5J2xsIGxvc2UgYWNjZXNzIHRvIGl0LlxuICovXG5cbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSAnbm9kZTphc3luY19ob29rcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBkYiB9IGZyb20gJy4vcG9zdGdyZXMtY29ubmVjdGlvbi5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigndGVuYW50LWNvbnRleHQnKTtcblxuLyoqXG4gKiBCZWhhdmlvciB3aGVuIGB3aXRoVGVuYW50VHhgIGlzIGludm9rZWQgb3V0c2lkZSBhbnkgYHJ1bldpdGhUZW5hbnRDb250ZXh0YFxuICogc2NvcGUuIFRoZSBlZmZlY3RpdmUgZGVmYXVsdCBpcyBmYWlsLWZhc3QgKCdzdHJpY3QnKSBpbiBwcm9kdWN0aW9uIHNvIGFcbiAqIG1pc3NpbmcgdGVuYW50IHNjb3BlIHN1cmZhY2VzIGF0IHRoZSBiYWQgY2FsbCBzaXRlIGluc3RlYWQgb2Ygc2lsZW50bHlcbiAqIHJ1bm5pbmcgd2l0aCBlbXB0eSBSTFMgR1VDczsgb3V0c2lkZSBwcm9kdWN0aW9uIGl0IGRlZmF1bHRzIHRvICd3YXJuJyBzb1xuICogdW4tYXVkaXRlZCBkZXYvdGVzdCBwYXRocyBrZWVwIHdvcmtpbmcgYnV0IGxvZyBhbiBhY3Rpb25hYmxlIHRyYWNlLiBBblxuICogZXhwbGljaXQgUkxTX0NPTlRFWFRfTU9ERSBlbnYgb3ZlcnJpZGUgYWx3YXlzIHdpbnMuXG4gKlxuICogJ3NpbGVudCcgaXMga2VwdCBmb3IgdGVzdHMgYW5kIHNjcmlwdHMgdGhhdCBpbnRlbnRpb25hbGx5IGVudGVyIHRoZSBEQlxuICogd2l0aG91dCBjb250ZXh0IChlLmcuIGludGVncmF0aW9uIHRlc3Qgc2V0dXAgdGhhdCBydW5zIGFzIHRoZSBjb25uZWN0aW9uXG4gKiBvd25lciBiZWZvcmUgYW55IHRlbmFudCBpcyBwcm92aXNpb25lZCkuXG4gKi9cbnR5cGUgQ29udGV4dE1vZGUgPSAnc2lsZW50JyB8ICd3YXJuJyB8ICdzdHJpY3QnO1xuZnVuY3Rpb24gZ2V0Q29udGV4dE1vZGUoKTogQ29udGV4dE1vZGUge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5STFNfQ09OVEVYVF9NT0RFPy50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmF3ID09PSAnc2lsZW50JyB8fCByYXcgPT09ICd3YXJuJyB8fCByYXcgPT09ICdzdHJpY3QnKSByZXR1cm4gcmF3O1xuICAvLyBObyBleHBsaWNpdCBvdmVycmlkZTogZmFpbC1mYXN0IGluIHByb2R1Y3Rpb24sIHdhcm4gZXZlcnl3aGVyZSBlbHNlLlxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/ICdzdHJpY3QnIDogJ3dhcm4nO1xufVxuXG4vKipcbiAqIFBlci1zdGF0ZW1lbnQgc2VydmVyLXNpZGUgdGltZW91dCAobXMpIGFwcGxpZWQgSU5TSURFIGV2ZXJ5IGB3aXRoVGVuYW50VHhgXG4gKiB0cmFuc2FjdGlvbiwgbmV4dCB0byB0aGUgUkxTIEdVQ3MuIGB3aXRoVGVuYW50VHhgIGlzIHRoZSByZWFsIHF1ZXJ5IHBhdGggZm9yXG4gKiBhbGwgUkxTL0NSVUQgcmVhZHMgYW5kIHdyaXRlcywgc28gdGhpcyBpcyB3aGVyZSB0aGUgREItc2lkZSBndWFyZCBiZWxvbmdzICh0aGVcbiAqIG9sZCBgQ29ubmVjdGlvbi50cmFuc2FjdGlvbmAgd3JhcHBlciB0aGF0IHNldCBpdCBpcyBkZWFkIOKAlCBzZWVcbiAqIHBvc3RncmVzLWNvbm5lY3Rpb24udHMpLiBCb3VuZHMgYSBydW5hd2F5IHF1ZXJ5IHNvIGl0IGNhbid0IGhvbGQgYSBwb29sZWRcbiAqIGNvbm5lY3Rpb24gb3BlbiBpbmRlZmluaXRlbHkuIEVudi1jb25maWd1cmFibGUgdmlhIGBEQl9TVEFURU1FTlRfVElNRU9VVF9NU2BcbiAqIChkZWZhdWx0IDMwcyk7IHNldCB0byBgMGAgdG8gZGlzYWJsZSB0aGUgdGltZW91dC5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdGVtZW50VGltZW91dE1zKCk6IG51bWJlciB7XG4gIGNvbnN0IHJhdyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX1NUQVRFTUVOVF9USU1FT1VUX01TID8/ICcnLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocmF3KSAmJiByYXcgPj0gMCA/IHJhdyA6IDMwMDAwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudENvbnRleHQge1xuICAvKiogQ2FsbGVyJ3Mgb3JnLiBVbmRlZmluZWQgZm9yIHVuLWF1dGhlbnRpY2F0ZWQgLyBzeXN0ZW0gam9icy4gKi9cbiAgb3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBDYWxsZXIncyB1c2VyIGlkLiBOb3QgdXNlZCBmb3IgUkxTIOKAlCBQb3N0Z3JlcyBwb2xpY2llcyBhcmUgb3JnLWdyYWluZWQsXG4gICAqICB3aXRoIG5vIHBlci11c2VyIHNlc3Npb24gR1VDIOKAlCBidXQgY2FycmllZCBzbyBhcHAtbGF5ZXIgcHJlZGljYXRlcyB3aXRoIGFcbiAgICogIFBFUi1VU0VSIHJ1bmcgKHBpcGVsaW5lIHRlbXBsYXRlcycgYHByaXZhdGVgIHZpc2liaWxpdHkpIGNhbiByZXNvbHZlIFwid2hvXG4gICAqICBpcyBhc2tpbmdcIiBvbiBwYXRocyB0aGF0IGhhdmUgbm93aGVyZSB0byBwYXNzIGl0LCBub3RhYmx5IENydWRTZXJ2aWNlJ3NcbiAgICogIGB3cml0ZUNvbmRpdGlvbnNgLiBBYnNlbnQgZm9yIHN5c3RlbSBqb2JzLCB3aGljaCBpcyB0aGUgZmFpbC1jbG9zZWQgY2FzZTpcbiAgICogIG5vIHZpZXdlciDih5Igbm8gcHJpdmF0ZSByb3dzLiAqL1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNhbGxlciBpcyBhIHN5c2FkbWluIChzeXN0ZW0tb3JnIGFkbWluKS4gQnlwYXNzZXMgUkxTXG4gICAqICBwb2xpY2llcyB2aWEgdGhlIHN5c2FkbWluLWJ5cGFzcyBicmFuY2ggaW4gYGN1cnJlbnRfaXNfc3lzYWRtaW4oKWAuICovXG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgLyoqIE9yZyDihpIgdGVhbSBoaWVyYXJjaHk6IHRoZSBjYWxsZXIncyBhY3RpdmUtb3JnIHBhcmVudCAocHJlc2VudCBvbmx5IHdoZW4gdGhlXG4gICAqICBhY3RpdmUgb3JnIGlzIGEgdGVhbSkuIE5vdCB1c2VkIGZvciBSTFM7IGNhcnJpZWQgc28gZG93bnN0cmVhbSBzaWRlLWVmZmVjdHNcbiAgICogIChlLmcuIGVudGl0eS1ldmVudCBjb21wbGlhbmNlIGV2YWwpIGNhbiBob25vciBwYXJlbnQgYHByb3BhZ2F0ZVRvQ2hpbGRyZW5gXG4gICAqICBydWxlcyB3aXRob3V0IGEgcmVxdWVzdCBpbiBzY29wZS4gKi9cbiAgcGFyZW50T3JnSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyLXJlcXVlc3QgdGVuYW50IGNvbnRleHQuIFBvcHVsYXRlZCBieSBFeHByZXNzIG1pZGRsZXdhcmUgb25jZSB0aGUgSldUXG4gKiBpcyB2YWxpZGF0ZWQ7IGNvbnN1bWVkIGJ5IGB3aXRoVGVuYW50VHhgIGFuZCBhbnkgaGVscGVyIHRoYXQgbmVlZHMgdG9cbiAqIGtub3cgXCJ3aG8gaXMgdGhlIGNhbGxlclwiIHdpdGhvdXQgcmUtZGVyaXZpbmcgZnJvbSB0aGUgcmVxdWVzdCBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5hbnRDb250ZXh0ID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlPFRlbmFudENvbnRleHQ+KCk7XG5cbi8qKlxuICogUnVuIGBmbmAgaW5zaWRlIHRoZSBnaXZlbiB0ZW5hbnQgc2NvcGUuIFRoZSBBc3luY0xvY2FsU3RvcmFnZSBzY29wZVxuICogc3Vydml2ZXMgYWNyb3NzIGFzeW5jIGJvdW5kYXJpZXMgKFByb21pc2VzLCBzZXRUaW1lb3V0LCBldGMuKSwgc28gYW55XG4gKiBgd2l0aFRlbmFudFR4YCBjYWxsIGluc2lkZSBgZm5gIOKAlCBkaXJlY3RseSBvciB0aHJvdWdoIGFueSBkZXB0aCBvZlxuICogYXN5bmMgaGVscGVycyDigJQgcGlja3MgdXAgYGN0eGAuXG4gKlxuICogV3JhcCBgbmV4dCgpYCBmcm9tIGFuIEV4cHJlc3MgbWlkZGxld2FyZSB0byBlc3RhYmxpc2ggcGVyLXJlcXVlc3Qgc2NvcGU6XG4gKlxuICogICAgIGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gKiAgICAgICBydW5XaXRoVGVuYW50Q29udGV4dCh7IG9yZ0lkLCBpc1N1cGVyQWRtaW4gfSwgKCkgPT4gbmV4dCgpKTtcbiAqICAgICB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bldpdGhUZW5hbnRDb250ZXh0PFQ+KGN0eDogVGVuYW50Q29udGV4dCwgZm46ICgpID0+IFQpOiBUIHtcbiAgcmV0dXJuIHRlbmFudENvbnRleHQucnVuKGN0eCwgZm4pO1xufVxuXG4vKiogUmVhZCB0aGUgY3VycmVudCB0ZW5hbnQgY29udGV4dC4gUmV0dXJucyB1bmRlZmluZWQgb3V0c2lkZSBhblxuICogIGBydW5XaXRoVGVuYW50Q29udGV4dGAgc2NvcGUgKGUuZy4gYmFja2dyb3VuZCB3b3JrZXJzLCBtaWdyYXRpb25zKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW5hbnRDb250ZXh0KCk6IFRlbmFudENvbnRleHQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdGVuYW50Q29udGV4dC5nZXRTdG9yZSgpO1xufVxuXG4vKipcbiAqIE9wZW4gYSB0cmFuc2FjdGlvbiB3aXRoIFJMUyBHVUNzIFNFVCBMT0NBTCBmcm9tIHRoZSBjdXJyZW50XG4gKiBBc3luY0xvY2FsU3RvcmFnZSB0ZW5hbnQgY29udGV4dCwgdGhlbiBpbnZva2UgYGZuKHR4KWAuXG4gKlxuICogLSBXaGVuIGNhbGxlZCBvdXRzaWRlIGEgdGVuYW50IHNjb3BlIChlLmcuIGZyb20gYSBiYWNrZ3JvdW5kIGpvYiB0aGF0XG4gKiAgIGRvZXNuJ3QgaGF2ZSBhIGNhbGxlciBpZGVudGl0eSksIHRoZSB0cmFuc2FjdGlvbiBpcyBvcGVuZWQgd2l0aCBib3RoXG4gKiAgIEdVQ3MgY2xlYXJlZCDigJQgUkxTIHBvbGljaWVzIHdpbGwgcmV0dXJuIHplcm8gcm93cyBvbiBGT1JDRSdkIHRhYmxlcy5cbiAqICAgQ2FsbGVycyB0aGF0IG5lZWQgYSBzeXNhZG1pbi1lcXVpdmFsZW50IHNjb3BlIHNob3VsZCB3cmFwIHRoZW1zZWx2ZXMgaW5cbiAqICAgYHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgaXNTdXBlckFkbWluOiB0cnVlIH0sIOKApilgIGV4cGxpY2l0bHkuXG4gKlxuICogLSBVc2VzIGBzZXRfY29uZmlnKGtleSwgdmFsdWUsIHRydWUpYCAodGhlIGJvb2xlYW4gPSBgaXNfbG9jYWxgLCBpLmUuXG4gKiAgIHRyYW5zYWN0aW9uLXNjb3BlZCkuIEVxdWl2YWxlbnQgdG8gYFNFVCBMT0NBTGAgYnV0IHRha2VzIHRoZSB2YWx1ZSBhc1xuICogICBhIHBhcmFtZXRlciwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IOKAlCBEcml6emxlJ3MgYHNxbGAgdGVtcGxhdGUgYmluZHMgdGhlXG4gKiAgIHZhbHVlIHNhZmVseSBzbyBhbiBhdHRhY2tlci1jb250cm9sbGVkIGBvcmdJZGAgY2FuJ3QgZXNjYXBlIHRoZSBxdW90aW5nLlxuICpcbiAqIC0gUmV0dXJucyB3aGF0ZXZlciBgZm5gIHJldHVybnM7IHRocm93cyB3aGF0ZXZlciBgZm5gIHRocm93cyAoRHJpenpsZVxuICogICBoYW5kbGVzIHRoZSBDT01NSVQvUk9MTEJBQ0sgZm9yIHVzKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhUZW5hbnRUeDxUPihcbiAgZm46ICh0eDogUGFyYW1ldGVyczxQYXJhbWV0ZXJzPHR5cGVvZiBkYi50cmFuc2FjdGlvbj5bMF0+WzBdKSA9PiBQcm9taXNlPFQ+LFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGN0eCA9IHRlbmFudENvbnRleHQuZ2V0U3RvcmUoKTtcblxuICBpZiAoIWN0eCkge1xuICAgIC8vIFN1cmZhY2UgdGhlIGJ1ZyBpbnN0ZWFkIG9mIHNpbGVudGx5IFNFVCdpbmcgZW1wdHkgR1VDcy4gVGhlIGRlZmF1bHRcbiAgICAvLyBtb2RlICgnd2FybicpIGxvZ3MgYW4gYWN0aW9uYWJsZSB0cmFjZSBzbyB0aGUgYmFkIGNhbGwgc2l0ZSBpcyBlYXN5XG4gICAgLy8gdG8gZmluZDsgcHJvZHVjdGlvbiBkZXBsb3ltZW50cyB0aGF0IGhhdmUgZmluaXNoZWQgdGhlIGF1ZGl0IGNhbiBzZXRcbiAgICAvLyBSTFNfQ09OVEVYVF9NT0RFPXN0cmljdCB0byBmYWlsLWZhc3QgYXQgdGhlIGNhbGwgc2l0ZSAoYmV0dGVyIHN0YWNrXG4gICAgLy8gdHJhY2UgdGhhbiB0aGUgUG9zdGdyZXMgXCJwZXJtaXNzaW9uIGRlbmllZFwiIHRoYXQgd291bGQgb3RoZXJ3aXNlXG4gICAgLy8gc3VyZmFjZSBmcm9tIEZPUkNFJ2QgUkxTKS5cbiAgICBjb25zdCBtb2RlID0gZ2V0Q29udGV4dE1vZGUoKTtcbiAgICBpZiAobW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3dpdGhUZW5hbnRUeCBjYWxsZWQgb3V0c2lkZSBhIHRlbmFudCBzY29wZS4gV3JhcCB5b3VyIGhhbmRsZXIvd29ya2VyICdcbiAgICAgICAgKyAnaW4gcnVuV2l0aFRlbmFudENvbnRleHQoeyBvcmdJZCwgaXNTdXBlckFkbWluIH0sIC4uLikgYmVmb3JlIGludm9raW5nICdcbiAgICAgICAgKyAnYW55IHNlcnZpY2UgdGhhdCB0b3VjaGVzIFJMUy1lbmZvcmNlZCB0YWJsZXMuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAnd2FybicpIHtcbiAgICAgIC8vIEluY2x1ZGUgYSBzeW50aGV0aWMgc3RhY2sgc28gdGhlIG9mZmVuZGluZyBjYWxsIHNpdGUgaXMgaW4gdGhlIGxvZy5cbiAgICAgIGxvZ2dlci53YXJuKCd3aXRoVGVuYW50VHggY2FsbGVkIG91dHNpZGUgYSB0ZW5hbnQgc2NvcGU7IFJMUyBHVUNzIHdpbGwgYmUgZW1wdHknLCB7XG4gICAgICAgIHN0YWNrOiBuZXcgRXJyb3IoJ3RlbmFudC1jb250ZXh0IG1pc3NpbmcnKS5zdGFjayxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yZ0lkID0gY3R4Py5vcmdJZCA/PyAnJztcbiAgY29uc3QgaXNTdXBlckFkbWluID0gY3R4Py5pc1N1cGVyQWRtaW4gPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gIGNvbnN0IHN0YXRlbWVudFRpbWVvdXRNcyA9IGdldFN0YXRlbWVudFRpbWVvdXRNcygpO1xuXG4gIHJldHVybiBkYi50cmFuc2FjdGlvbihhc3luYyAodHgpID0+IHtcbiAgICAvLyBTZXQgZXZlcnkgdHJhbnNhY3Rpb24tc2NvcGVkIEdVQyBpbiBhIFNJTkdMRSByb3VuZC10cmlwLiBgc2V0X2NvbmZpZygpYFxuICAgIC8vIHJldHVybnMgaXRzIHZhbHVlLCBzbyBtdWx0aXBsZSBjYWxscyBjb21wb3NlIGluIG9uZSBTRUxFQ1Qg4oCUIHByZXZpb3VzbHlcbiAgICAvLyB0aGVzZSB3ZXJlIDLigJMzIHNlcGFyYXRlIGB0eC5leGVjdXRlKClgIHJvdW5kLXRyaXBzIFBFUiByZWFkLCBlYWNoIGFcbiAgICAvLyBuZXR3b3JrIGhvcCB0aGF0IHRheGVzIHRoZSBzaGFyZWQgUGdCb3VuY2VyIHBvb2wgb24gdGhlIGhvdCBwYXRoLiBgdHJ1ZWBcbiAgICAvLyA9IGlzX2xvY2FsIChTRVQgTE9DQUwgc2VtYW50aWNzOiBhdXRvLXJlbGVhc2VkIG9uIENPTU1JVC9ST0xMQkFDSykuIFRoZVxuICAgIC8vIGRyaXZlciBiaW5kcyB0aGUgdmFsdWVzIGFzIHBhcmFtZXRlcnMsIHNvIGEgaG9zdGlsZSBvcmdfaWQgY2FuJ3QgYnJlYWsgb3V0XG4gICAgLy8gb2YgdGhlIEdVQyBzeW50YXguXG4gICAgLy9cbiAgICAvLyBUaGUgc3RhdGVtZW50X3RpbWVvdXQgR1VDIGJvdW5kcyBhIHJ1bmF3YXkgcXVlcnkgc28gaXQgY2FuJ3QgaG9sZCBhIHBvb2xlZFxuICAgIC8vIGNvbm5lY3Rpb24gb3BlbiBpbmRlZmluaXRlbHkgKGBTRVQgTE9DQUwgc3RhdGVtZW50X3RpbWVvdXQgPSAkMWAgaXMgcmVqZWN0ZWRcbiAgICAvLyBieSBQb3N0Z3JlcywgaGVuY2Ugc2V0X2NvbmZpZyB3aXRoIGEgYm91bmQgbXMgdmFsdWUpLiBJbmNsdWRlZCBpbiB0aGUgc2FtZVxuICAgIC8vIHN0YXRlbWVudCB3aGVuIGVuYWJsZWQgKD4wKSwgZHJvcHBlZCBlbnRpcmVseSB3aGVuIGRpc2FibGVkICgwKS5cbiAgICBpZiAoc3RhdGVtZW50VGltZW91dE1zID4gMCkge1xuICAgICAgYXdhaXQgdHguZXhlY3V0ZShcbiAgICAgICAgc3FsYFNFTEVDVCBzZXRfY29uZmlnKCdhcHAub3JnX2lkJywgJHtvcmdJZH0sIHRydWUpLCBzZXRfY29uZmlnKCdhcHAuaXNfc3lzYWRtaW4nLCAke2lzU3VwZXJBZG1pbn0sIHRydWUpLCBzZXRfY29uZmlnKCdzdGF0ZW1lbnRfdGltZW91dCcsICR7U3RyaW5nKHN0YXRlbWVudFRpbWVvdXRNcyl9LCB0cnVlKWAsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0eC5leGVjdXRlKFxuICAgICAgICBzcWxgU0VMRUNUIHNldF9jb25maWcoJ2FwcC5vcmdfaWQnLCAke29yZ0lkfSwgdHJ1ZSksIHNldF9jb25maWcoJ2FwcC5pc19zeXNhZG1pbicsICR7aXNTdXBlckFkbWlufSwgdHJ1ZSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuKHR4KTtcbiAgfSk7XG59XG4iXX0=
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS90ZW5hbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQWU5QyxTQUFTLGNBQWM7SUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4RCxJQUFJLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZFLHVFQUF1RTtJQUN2RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQXNCRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksaUJBQWlCLEVBQWlCLENBQUM7QUFFcEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUksR0FBa0IsRUFBRSxFQUFXO0lBQ3JFLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzBFQUMwRTtBQUMxRSxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsRUFBMkU7SUFFM0UsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXJDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxtRUFBbUU7UUFDbkUsNkJBQTZCO1FBQzdCLE1BQU0sSUFBSSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQzlCLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFO2tCQUNyRSx3RUFBd0U7a0JBQ3hFLCtDQUErQyxDQUNsRCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLHNFQUFzRTtZQUN0RSxNQUFNLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxFQUFFO2dCQUNoRixLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLO2FBQ2pELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDL0IsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFFMUQsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0lBRW5ELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDakMsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsK0JBQStCO1FBQy9CLDBFQUEwRTtRQUMxRSw2RUFBNkU7UUFDN0UscUJBQXFCO1FBQ3JCLEVBQUU7UUFDRiw2RUFBNkU7UUFDN0UsK0VBQStFO1FBQy9FLDZFQUE2RTtRQUM3RSxtRUFBbUU7UUFDbkUsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQ2QsR0FBRyxDQUFBLG1DQUFtQyxLQUFLLDBDQUEwQyxZQUFZLDRDQUE0QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUNqTCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQ2QsR0FBRyxDQUFBLG1DQUFtQyxLQUFLLDBDQUEwQyxZQUFZLFNBQVMsQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUZW5hbnQtY29udGV4dCBwbHVtYmluZyBmb3IgUG9zdGdyZXMgcm93LWxldmVsIHNlY3VyaXR5LlxuICpcbiAqIEJhY2tncm91bmQ6IHBvc3RncmVzLWluaXQuc3FsIGluc3RhbGxzIFJMUyBwb2xpY2llcyBvbiBldmVyeSB1c2VyLWRhdGFcbiAqIHRhYmxlIHRoYXQgY29uc3VsdCB0d28gc2Vzc2lvbiBHVUNzIOKAlCBgYXBwLm9yZ19pZGAgYW5kIGBhcHAuaXNfc3lzYWRtaW5gLlxuICogRXZlcnkgdGVuYW50IHRhYmxlIGlzIGBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFlgLCBzbyB0aGUgcG9saWNpZXMgZW5mb3JjZVxuICogZXZlbiBmb3IgdGhlIChvd25pbmcpIGNvbm5lY3Rpb24gdXNlciDigJQgYSBxdWVyeSBhZ2FpbnN0IG9uZSBtdXN0IHJ1biBpbnNpZGUgYVxuICogdHJhbnNhY3Rpb24gdGhhdCBoYXMgU0VUIExPQ0FMJ2QgYm90aCBHVUNzIG9yIGl0IHJldHVybnMgemVybyByb3dzIGZvclxuICogbm9uLXN5c2FkbWlucyAoYW5kIG1heSBmYWlsIHRvIHdyaXRlIGZvciBhbnkgY2FsbGVyKS4gVGhlIGNyb3NzLW9yZyBwbHVnaW5cbiAqIGVjb3N5c3RlbSBjYXRhbG9nIHRhYmxlcyBjYXJyeSBhIHBlcm1pc3NpdmUgYXBwLXJvbGUgcG9saWN5IGluc3RlYWQuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIHNlYW0uXG4gKlxuICogICAxLiBgdGVuYW50Q29udGV4dGAgKEFzeW5jTG9jYWxTdG9yYWdlKSBjYXJyaWVzIGB7b3JnSWQsIGlzU3VwZXJBZG1pbn1gXG4gKiAgICAgIGRvd24gdGhlIGNhbGwgY2hhaW4gd2l0aG91dCBwcm9wLWRyaWxsaW5nLiBTZXQgb25jZSBhdCB0aGUgcmVxdWVzdFxuICogICAgICBib3VuZGFyeTsgcmVhZGFibGUgZnJvbSBhbnl3aGVyZS5cbiAqXG4gKiAgIDIuIGB3aXRoVGVuYW50VHgoZm4pYCBvcGVucyBhIHRyYW5zYWN0aW9uLCBTRVQgTE9DQUwncyBib3RoIEdVQ3MgZnJvbVxuICogICAgICB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgdGhlbiBpbnZva2VzIGBmbih0eClgLiBTZXJ2aWNlcyBtaWdyYXRlIG9uZVxuICogICAgICBhdCBhIHRpbWUgYnkgd3JhcHBpbmcgdGhlaXIgZXhpc3RpbmcgZHJpenpsZSBjYWxscyBpbiB0aGlzIGhlbHBlciDigJRcbiAqICAgICAgYGRiLnNlbGVjdCgpLmZyb20oLi4uKWAgYmVjb21lcyBgd2l0aFRlbmFudFR4KHR4ID0+IHR4LnNlbGVjdCgpLmZyb20oLi4uKSlgLlxuICpcbiAqICAgMy4gYHJ1bldpdGhUZW5hbnRDb250ZXh0KGN0eCwgZm4pYCBpcyB0aGUgRXhwcmVzcy1taWRkbGV3YXJlLXNpZGVcbiAqICAgICAgYm9va2VuZCB0aGF0IGVzdGFibGlzaGVzIHRoZSBBc3luY0xvY2FsU3RvcmFnZSBzY29wZSBmb3IgdGhlIHJlcXVlc3QuXG4gKlxuICogTWlncmF0aW9uIG9yZGVyOlxuICogICAtIEZpcnN0IGFkb3B0ZXJzOiBuZXdseS13cml0dGVuIHNlcnZpY2VzIChkYXNoYm9hcmQsIGFsZXJ0LWRlc3RpbmF0aW9uKVxuICogICAgIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbWVjaGFuaWNhbC5cbiAqICAgLSBUaGVuIGhpZ2gtd3JpdGUgc2VydmljZXMgKHBsdWdpbiwgcGlwZWxpbmUpLiBTb2FrIGVhY2ggb25lIGJlZm9yZVxuICogICAgIGZsaXBwaW5nIHRoZSB1bmRlcmx5aW5nIHRhYmxlIHRvIEZPUkNFLlxuICogICAtIGFkbWluX2F1ZGl0X2xvZyB1c2VzIGEgc3lzYWRtaW4tb25seSBwb2xpY3kg4oCUIHN5c2FkbWluIHBhdGhzIG11c3RcbiAqICAgICBhbHNvIHNldCBgYXBwLmlzX3N5c2FkbWluID0gJ3RydWUnYCBvciB0aGV5J2xsIGxvc2UgYWNjZXNzIHRvIGl0LlxuICovXG5cbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSAnbm9kZTphc3luY19ob29rcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIGVudkludCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGRiIH0gZnJvbSAnLi9wb3N0Z3Jlcy1jb25uZWN0aW9uLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0ZW5hbnQtY29udGV4dCcpO1xuXG4vKipcbiAqIEJlaGF2aW9yIHdoZW4gYHdpdGhUZW5hbnRUeGAgaXMgaW52b2tlZCBvdXRzaWRlIGFueSBgcnVuV2l0aFRlbmFudENvbnRleHRgXG4gKiBzY29wZS4gVGhlIGVmZmVjdGl2ZSBkZWZhdWx0IGlzIGZhaWwtZmFzdCAoJ3N0cmljdCcpIGluIHByb2R1Y3Rpb24gc28gYVxuICogbWlzc2luZyB0ZW5hbnQgc2NvcGUgc3VyZmFjZXMgYXQgdGhlIGJhZCBjYWxsIHNpdGUgaW5zdGVhZCBvZiBzaWxlbnRseVxuICogcnVubmluZyB3aXRoIGVtcHR5IFJMUyBHVUNzOyBvdXRzaWRlIHByb2R1Y3Rpb24gaXQgZGVmYXVsdHMgdG8gJ3dhcm4nIHNvXG4gKiB1bi1hdWRpdGVkIGRldi90ZXN0IHBhdGhzIGtlZXAgd29ya2luZyBidXQgbG9nIGFuIGFjdGlvbmFibGUgdHJhY2UuIEFuXG4gKiBleHBsaWNpdCBSTFNfQ09OVEVYVF9NT0RFIGVudiBvdmVycmlkZSBhbHdheXMgd2lucy5cbiAqXG4gKiAnc2lsZW50JyBpcyBrZXB0IGZvciB0ZXN0cyBhbmQgc2NyaXB0cyB0aGF0IGludGVudGlvbmFsbHkgZW50ZXIgdGhlIERCXG4gKiB3aXRob3V0IGNvbnRleHQgKGUuZy4gaW50ZWdyYXRpb24gdGVzdCBzZXR1cCB0aGF0IHJ1bnMgYXMgdGhlIGNvbm5lY3Rpb25cbiAqIG93bmVyIGJlZm9yZSBhbnkgdGVuYW50IGlzIHByb3Zpc2lvbmVkKS5cbiAqL1xudHlwZSBDb250ZXh0TW9kZSA9ICdzaWxlbnQnIHwgJ3dhcm4nIHwgJ3N0cmljdCc7XG5mdW5jdGlvbiBnZXRDb250ZXh0TW9kZSgpOiBDb250ZXh0TW9kZSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LlJMU19DT05URVhUX01PREU/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYXcgPT09ICdzaWxlbnQnIHx8IHJhdyA9PT0gJ3dhcm4nIHx8IHJhdyA9PT0gJ3N0cmljdCcpIHJldHVybiByYXc7XG4gIC8vIE5vIGV4cGxpY2l0IG92ZXJyaWRlOiBmYWlsLWZhc3QgaW4gcHJvZHVjdGlvbiwgd2FybiBldmVyeXdoZXJlIGVsc2UuXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gJ3N0cmljdCcgOiAnd2Fybic7XG59XG5cbi8qKlxuICogUGVyLXN0YXRlbWVudCBzZXJ2ZXItc2lkZSB0aW1lb3V0IChtcykgYXBwbGllZCBJTlNJREUgZXZlcnkgYHdpdGhUZW5hbnRUeGBcbiAqIHRyYW5zYWN0aW9uLCBuZXh0IHRvIHRoZSBSTFMgR1VDcy4gYHdpdGhUZW5hbnRUeGAgaXMgdGhlIHJlYWwgcXVlcnkgcGF0aCBmb3JcbiAqIGFsbCBSTFMvQ1JVRCByZWFkcyBhbmQgd3JpdGVzLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBEQi1zaWRlIGd1YXJkIGJlbG9uZ3MgKHRoZVxuICogb2xkIGBDb25uZWN0aW9uLnRyYW5zYWN0aW9uYCB3cmFwcGVyIHRoYXQgc2V0IGl0IGlzIGRlYWQg4oCUIHNlZVxuICogcG9zdGdyZXMtY29ubmVjdGlvbi50cykuIEJvdW5kcyBhIHJ1bmF3YXkgcXVlcnkgc28gaXQgY2FuJ3QgaG9sZCBhIHBvb2xlZFxuICogY29ubmVjdGlvbiBvcGVuIGluZGVmaW5pdGVseS4gRW52LWNvbmZpZ3VyYWJsZSB2aWEgYERCX1NUQVRFTUVOVF9USU1FT1VUX01TYFxuICogKGRlZmF1bHQgMzBzKTsgc2V0IHRvIGAwYCB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LlxuICovXG5mdW5jdGlvbiBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTogbnVtYmVyIHtcbiAgY29uc3QgbXMgPSBlbnZJbnQoJ0RCX1NUQVRFTUVOVF9USU1FT1VUX01TJywgMzBfMDAwKTtcbiAgcmV0dXJuIG1zID49IDAgPyBtcyA6IDMwXzAwMDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRDb250ZXh0IHtcbiAgLyoqIENhbGxlcidzIG9yZy4gVW5kZWZpbmVkIGZvciB1bi1hdXRoZW50aWNhdGVkIC8gc3lzdGVtIGpvYnMuICovXG4gIG9yZ0lkPzogc3RyaW5nO1xuICAvKiogQ2FsbGVyJ3MgdXNlciBpZC4gTm90IHVzZWQgZm9yIFJMUyDigJQgUG9zdGdyZXMgcG9saWNpZXMgYXJlIG9yZy1ncmFpbmVkLFxuICAgKiAgd2l0aCBubyBwZXItdXNlciBzZXNzaW9uIEdVQyDigJQgYnV0IGNhcnJpZWQgc28gYXBwLWxheWVyIHByZWRpY2F0ZXMgd2l0aCBhXG4gICAqICBQRVItVVNFUiBydW5nIChwaXBlbGluZSB0ZW1wbGF0ZXMnIGBwcml2YXRlYCB2aXNpYmlsaXR5KSBjYW4gcmVzb2x2ZSBcIndob1xuICAgKiAgaXMgYXNraW5nXCIgb24gcGF0aHMgdGhhdCBoYXZlIG5vd2hlcmUgdG8gcGFzcyBpdCwgbm90YWJseSBDcnVkU2VydmljZSdzXG4gICAqICBgd3JpdGVDb25kaXRpb25zYC4gQWJzZW50IGZvciBzeXN0ZW0gam9icywgd2hpY2ggaXMgdGhlIGZhaWwtY2xvc2VkIGNhc2U6XG4gICAqICBubyB2aWV3ZXIg4oeSIG5vIHByaXZhdGUgcm93cy4gKi9cbiAgdXNlcklkPzogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBjYWxsZXIgaXMgYSBzeXNhZG1pbiAoc3lzdGVtLW9yZyBhZG1pbikuIEJ5cGFzc2VzIFJMU1xuICAgKiAgcG9saWNpZXMgdmlhIHRoZSBzeXNhZG1pbi1ieXBhc3MgYnJhbmNoIGluIGBjdXJyZW50X2lzX3N5c2FkbWluKClgLiAqL1xuICBpc1N1cGVyQWRtaW46IGJvb2xlYW47XG4gIC8qKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5OiB0aGUgY2FsbGVyJ3MgYWN0aXZlLW9yZyBwYXJlbnQgKHByZXNlbnQgb25seSB3aGVuIHRoZVxuICAgKiAgYWN0aXZlIG9yZyBpcyBhIHRlYW0pLiBOb3QgdXNlZCBmb3IgUkxTOyBjYXJyaWVkIHNvIGRvd25zdHJlYW0gc2lkZS1lZmZlY3RzXG4gICAqICAoZS5nLiBlbnRpdHktZXZlbnQgY29tcGxpYW5jZSBldmFsKSBjYW4gaG9ub3IgcGFyZW50IGBwcm9wYWdhdGVUb0NoaWxkcmVuYFxuICAgKiAgcnVsZXMgd2l0aG91dCBhIHJlcXVlc3QgaW4gc2NvcGUuICovXG4gIHBhcmVudE9yZ0lkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlci1yZXF1ZXN0IHRlbmFudCBjb250ZXh0LiBQb3B1bGF0ZWQgYnkgRXhwcmVzcyBtaWRkbGV3YXJlIG9uY2UgdGhlIEpXVFxuICogaXMgdmFsaWRhdGVkOyBjb25zdW1lZCBieSBgd2l0aFRlbmFudFR4YCBhbmQgYW55IGhlbHBlciB0aGF0IG5lZWRzIHRvXG4gKiBrbm93IFwid2hvIGlzIHRoZSBjYWxsZXJcIiB3aXRob3V0IHJlLWRlcml2aW5nIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgdGVuYW50Q29udGV4dCA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUZW5hbnRDb250ZXh0PigpO1xuXG4vKipcbiAqIFJ1biBgZm5gIGluc2lkZSB0aGUgZ2l2ZW4gdGVuYW50IHNjb3BlLiBUaGUgQXN5bmNMb2NhbFN0b3JhZ2Ugc2NvcGVcbiAqIHN1cnZpdmVzIGFjcm9zcyBhc3luYyBib3VuZGFyaWVzIChQcm9taXNlcywgc2V0VGltZW91dCwgZXRjLiksIHNvIGFueVxuICogYHdpdGhUZW5hbnRUeGAgY2FsbCBpbnNpZGUgYGZuYCDigJQgZGlyZWN0bHkgb3IgdGhyb3VnaCBhbnkgZGVwdGggb2ZcbiAqIGFzeW5jIGhlbHBlcnMg4oCUIHBpY2tzIHVwIGBjdHhgLlxuICpcbiAqIFdyYXAgYG5leHQoKWAgZnJvbSBhbiBFeHByZXNzIG1pZGRsZXdhcmUgdG8gZXN0YWJsaXNoIHBlci1yZXF1ZXN0IHNjb3BlOlxuICpcbiAqICAgICBhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICogICAgICAgcnVuV2l0aFRlbmFudENvbnRleHQoeyBvcmdJZCwgaXNTdXBlckFkbWluIH0sICgpID0+IG5leHQoKSk7XG4gKiAgICAgfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5XaXRoVGVuYW50Q29udGV4dDxUPihjdHg6IFRlbmFudENvbnRleHQsIGZuOiAoKSA9PiBUKTogVCB7XG4gIHJldHVybiB0ZW5hbnRDb250ZXh0LnJ1bihjdHgsIGZuKTtcbn1cblxuLyoqIFJlYWQgdGhlIGN1cnJlbnQgdGVuYW50IGNvbnRleHQuIFJldHVybnMgdW5kZWZpbmVkIG91dHNpZGUgYW5cbiAqICBgcnVuV2l0aFRlbmFudENvbnRleHRgIHNjb3BlIChlLmcuIGJhY2tncm91bmQgd29ya2VycywgbWlncmF0aW9ucykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVuYW50Q29udGV4dCgpOiBUZW5hbnRDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHRlbmFudENvbnRleHQuZ2V0U3RvcmUoKTtcbn1cblxuLyoqXG4gKiBPcGVuIGEgdHJhbnNhY3Rpb24gd2l0aCBSTFMgR1VDcyBTRVQgTE9DQUwgZnJvbSB0aGUgY3VycmVudFxuICogQXN5bmNMb2NhbFN0b3JhZ2UgdGVuYW50IGNvbnRleHQsIHRoZW4gaW52b2tlIGBmbih0eClgLlxuICpcbiAqIC0gV2hlbiBjYWxsZWQgb3V0c2lkZSBhIHRlbmFudCBzY29wZSAoZS5nLiBmcm9tIGEgYmFja2dyb3VuZCBqb2IgdGhhdFxuICogICBkb2Vzbid0IGhhdmUgYSBjYWxsZXIgaWRlbnRpdHkpLCB0aGUgdHJhbnNhY3Rpb24gaXMgb3BlbmVkIHdpdGggYm90aFxuICogICBHVUNzIGNsZWFyZWQg4oCUIFJMUyBwb2xpY2llcyB3aWxsIHJldHVybiB6ZXJvIHJvd3Mgb24gRk9SQ0UnZCB0YWJsZXMuXG4gKiAgIENhbGxlcnMgdGhhdCBuZWVkIGEgc3lzYWRtaW4tZXF1aXZhbGVudCBzY29wZSBzaG91bGQgd3JhcCB0aGVtc2VsdmVzIGluXG4gKiAgIGBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCDigKYpYCBleHBsaWNpdGx5LlxuICpcbiAqIC0gVXNlcyBgc2V0X2NvbmZpZyhrZXksIHZhbHVlLCB0cnVlKWAgKHRoZSBib29sZWFuID0gYGlzX2xvY2FsYCwgaS5lLlxuICogICB0cmFuc2FjdGlvbi1zY29wZWQpLiBFcXVpdmFsZW50IHRvIGBTRVQgTE9DQUxgIGJ1dCB0YWtlcyB0aGUgdmFsdWUgYXNcbiAqICAgYSBwYXJhbWV0ZXIsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCDigJQgRHJpenpsZSdzIGBzcWxgIHRlbXBsYXRlIGJpbmRzIHRoZVxuICogICB2YWx1ZSBzYWZlbHkgc28gYW4gYXR0YWNrZXItY29udHJvbGxlZCBgb3JnSWRgIGNhbid0IGVzY2FwZSB0aGUgcXVvdGluZy5cbiAqXG4gKiAtIFJldHVybnMgd2hhdGV2ZXIgYGZuYCByZXR1cm5zOyB0aHJvd3Mgd2hhdGV2ZXIgYGZuYCB0aHJvd3MgKERyaXp6bGVcbiAqICAgaGFuZGxlcyB0aGUgQ09NTUlUL1JPTExCQUNLIGZvciB1cykuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVuYW50VHg8VD4oXG4gIGZuOiAodHg6IFBhcmFtZXRlcnM8UGFyYW1ldGVyczx0eXBlb2YgZGIudHJhbnNhY3Rpb24+WzBdPlswXSkgPT4gUHJvbWlzZTxUPixcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjdHggPSB0ZW5hbnRDb250ZXh0LmdldFN0b3JlKCk7XG5cbiAgaWYgKCFjdHgpIHtcbiAgICAvLyBTdXJmYWNlIHRoZSBidWcgaW5zdGVhZCBvZiBzaWxlbnRseSBTRVQnaW5nIGVtcHR5IEdVQ3MuIFRoZSBkZWZhdWx0XG4gICAgLy8gbW9kZSAoJ3dhcm4nKSBsb2dzIGFuIGFjdGlvbmFibGUgdHJhY2Ugc28gdGhlIGJhZCBjYWxsIHNpdGUgaXMgZWFzeVxuICAgIC8vIHRvIGZpbmQ7IHByb2R1Y3Rpb24gZGVwbG95bWVudHMgdGhhdCBoYXZlIGZpbmlzaGVkIHRoZSBhdWRpdCBjYW4gc2V0XG4gICAgLy8gUkxTX0NPTlRFWFRfTU9ERT1zdHJpY3QgdG8gZmFpbC1mYXN0IGF0IHRoZSBjYWxsIHNpdGUgKGJldHRlciBzdGFja1xuICAgIC8vIHRyYWNlIHRoYW4gdGhlIFBvc3RncmVzIFwicGVybWlzc2lvbiBkZW5pZWRcIiB0aGF0IHdvdWxkIG90aGVyd2lzZVxuICAgIC8vIHN1cmZhY2UgZnJvbSBGT1JDRSdkIFJMUykuXG4gICAgY29uc3QgbW9kZSA9IGdldENvbnRleHRNb2RlKCk7XG4gICAgaWYgKG1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd3aXRoVGVuYW50VHggY2FsbGVkIG91dHNpZGUgYSB0ZW5hbnQgc2NvcGUuIFdyYXAgeW91ciBoYW5kbGVyL3dvcmtlciAnXG4gICAgICAgICsgJ2luIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAuLi4pIGJlZm9yZSBpbnZva2luZyAnXG4gICAgICAgICsgJ2FueSBzZXJ2aWNlIHRoYXQgdG91Y2hlcyBSTFMtZW5mb3JjZWQgdGFibGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3dhcm4nKSB7XG4gICAgICAvLyBJbmNsdWRlIGEgc3ludGhldGljIHN0YWNrIHNvIHRoZSBvZmZlbmRpbmcgY2FsbCBzaXRlIGlzIGluIHRoZSBsb2cuXG4gICAgICBsb2dnZXIud2Fybignd2l0aFRlbmFudFR4IGNhbGxlZCBvdXRzaWRlIGEgdGVuYW50IHNjb3BlOyBSTFMgR1VDcyB3aWxsIGJlIGVtcHR5Jywge1xuICAgICAgICBzdGFjazogbmV3IEVycm9yKCd0ZW5hbnQtY29udGV4dCBtaXNzaW5nJykuc3RhY2ssXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmdJZCA9IGN0eD8ub3JnSWQgPz8gJyc7XG4gIGNvbnN0IGlzU3VwZXJBZG1pbiA9IGN0eD8uaXNTdXBlckFkbWluID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICBjb25zdCBzdGF0ZW1lbnRUaW1lb3V0TXMgPSBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTtcblxuICByZXR1cm4gZGIudHJhbnNhY3Rpb24oYXN5bmMgKHR4KSA9PiB7XG4gICAgLy8gU2V0IGV2ZXJ5IHRyYW5zYWN0aW9uLXNjb3BlZCBHVUMgaW4gYSBTSU5HTEUgcm91bmQtdHJpcC4gYHNldF9jb25maWcoKWBcbiAgICAvLyByZXR1cm5zIGl0cyB2YWx1ZSwgc28gbXVsdGlwbGUgY2FsbHMgY29tcG9zZSBpbiBvbmUgU0VMRUNUIHJhdGhlciB0aGFuIGFcbiAgICAvLyByb3VuZC10cmlwIHBlciBHVUMg4oCUIGVhY2ggYSBuZXR3b3JrIGhvcCB0aGF0IHRheGVzIHRoZSBzaGFyZWQgUGdCb3VuY2VyXG4gICAgLy8gcG9vbCBvbiB0aGUgaG90IHBhdGguIGB0cnVlYFxuICAgIC8vID0gaXNfbG9jYWwgKFNFVCBMT0NBTCBzZW1hbnRpY3M6IGF1dG8tcmVsZWFzZWQgb24gQ09NTUlUL1JPTExCQUNLKS4gVGhlXG4gICAgLy8gZHJpdmVyIGJpbmRzIHRoZSB2YWx1ZXMgYXMgcGFyYW1ldGVycywgc28gYSBob3N0aWxlIG9yZ19pZCBjYW4ndCBicmVhayBvdXRcbiAgICAvLyBvZiB0aGUgR1VDIHN5bnRheC5cbiAgICAvL1xuICAgIC8vIFRoZSBzdGF0ZW1lbnRfdGltZW91dCBHVUMgYm91bmRzIGEgcnVuYXdheSBxdWVyeSBzbyBpdCBjYW4ndCBob2xkIGEgcG9vbGVkXG4gICAgLy8gY29ubmVjdGlvbiBvcGVuIGluZGVmaW5pdGVseSAoYFNFVCBMT0NBTCBzdGF0ZW1lbnRfdGltZW91dCA9ICQxYCBpcyByZWplY3RlZFxuICAgIC8vIGJ5IFBvc3RncmVzLCBoZW5jZSBzZXRfY29uZmlnIHdpdGggYSBib3VuZCBtcyB2YWx1ZSkuIEluY2x1ZGVkIGluIHRoZSBzYW1lXG4gICAgLy8gc3RhdGVtZW50IHdoZW4gZW5hYmxlZCAoPjApLCBkcm9wcGVkIGVudGlyZWx5IHdoZW4gZGlzYWJsZWQgKDApLlxuICAgIGlmIChzdGF0ZW1lbnRUaW1lb3V0TXMgPiAwKSB7XG4gICAgICBhd2FpdCB0eC5leGVjdXRlKFxuICAgICAgICBzcWxgU0VMRUNUIHNldF9jb25maWcoJ2FwcC5vcmdfaWQnLCAke29yZ0lkfSwgdHJ1ZSksIHNldF9jb25maWcoJ2FwcC5pc19zeXNhZG1pbicsICR7aXNTdXBlckFkbWlufSwgdHJ1ZSksIHNldF9jb25maWcoJ3N0YXRlbWVudF90aW1lb3V0JywgJHtTdHJpbmcoc3RhdGVtZW50VGltZW91dE1zKX0sIHRydWUpYCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHR4LmV4ZWN1dGUoXG4gICAgICAgIHNxbGBTRUxFQ1Qgc2V0X2NvbmZpZygnYXBwLm9yZ19pZCcsICR7b3JnSWR9LCB0cnVlKSwgc2V0X2NvbmZpZygnYXBwLmlzX3N5c2FkbWluJywgJHtpc1N1cGVyQWRtaW59LCB0cnVlKWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZm4odHgpO1xuICB9KTtcbn1cbiJdfQ==
|
package/lib/index.d.ts
CHANGED
|
@@ -24,9 +24,12 @@
|
|
|
24
24
|
*/
|
|
25
25
|
export * from './database/index.js';
|
|
26
26
|
export * from './api/query-builders.js';
|
|
27
|
-
export
|
|
27
|
+
export { type BaseAccessFilter, AccessControlQueryBuilder, } from './api/access-control-builder.js';
|
|
28
28
|
export * from './api/viewer-context.js';
|
|
29
29
|
export * from './api/crud-service.js';
|
|
30
|
-
export {
|
|
31
|
-
export
|
|
32
|
-
export
|
|
30
|
+
export { parseSemver, compareSemverParts, compareSemver, isVersionRange, satisfiesVersionSpec, semverOrderBy, } from './api/semver-range.js';
|
|
31
|
+
export { normalizeQuery, searchPublicListings, listPublicCategories, getPublicListing, getPublicListedVersion, listPublicReviews, listPublicListingsForSitemap, type DirectoryTrustTier, type DirectorySort, DIRECTORY_SORTS, DIRECTORY_TIERS, type DirectorySearchParams, type ReviewSort, REVIEW_SORTS, type PublicListingRow, } from './api/public-directory.js';
|
|
32
|
+
export { policyOf, effectiveConsumptionPolicy, applyPolicyUpdate, listingBlock, advisoryRangeCovers, advisoryRangeProblem, advisoriesCovering, blockingAdvisories, implicitInstallRange, installAdmits, scopeOrgIds, installModeFor, drizzleListingSource, resolveListingReference, listedVersionWarnings, listedPluginRecord, loadOrgInstallContext, orgListingStates, resolvableListings, type ConsumptionPolicy, DEFAULT_CONSUMPTION_POLICY, type ResolutionRefusal, type ResolutionScope, type ListingDataSource, type ListingResolved, type OrgListingState, } from './api/plugin-resolution.js';
|
|
33
|
+
export { runSoftDeletePurge, createSoftDeletePurgeScheduler, type PurgeableEntity, } from './api/soft-delete-sweep.js';
|
|
34
|
+
export { type BuildHealth, type DoraLevel, type DoraMetrics, type DoraOptions, type DoraTrendPoint, type IncidentListItem, type ReportingSettings, type IncidentTestResult, type IngestMetric, type PluginRuntimeFilter, type PluginRuntimeStats, ReportingService, reportingService, } from './api/reporting-service.js';
|
|
35
|
+
export { type PluginFilter, type PipelineFilter, type PipelineTemplateFilter, type MessageFilter, type CompliancePolicyFilter, type ComplianceRuleFilter, type ComplianceExemptionFilter, type ComplianceAuditFilter, type ComplianceScanFilter, } from './core/query-filters.js';
|
package/lib/index.js
CHANGED
|
@@ -28,13 +28,16 @@
|
|
|
28
28
|
export * from './database/index.js';
|
|
29
29
|
// Query builders and services
|
|
30
30
|
export * from './api/query-builders.js';
|
|
31
|
-
export
|
|
31
|
+
export { AccessControlQueryBuilder, } from './api/access-control-builder.js';
|
|
32
32
|
export * from './api/viewer-context.js';
|
|
33
33
|
export * from './api/crud-service.js';
|
|
34
|
+
export { parseSemver, compareSemverParts, compareSemver, isVersionRange, satisfiesVersionSpec, semverOrderBy, } from './api/semver-range.js';
|
|
35
|
+
export { normalizeQuery, searchPublicListings, listPublicCategories, getPublicListing, getPublicListedVersion, listPublicReviews, listPublicListingsForSitemap, DIRECTORY_SORTS, DIRECTORY_TIERS, REVIEW_SORTS, } from './api/public-directory.js';
|
|
36
|
+
export { policyOf, effectiveConsumptionPolicy, applyPolicyUpdate, listingBlock, advisoryRangeCovers, advisoryRangeProblem, advisoriesCovering, blockingAdvisories, implicitInstallRange, installAdmits, scopeOrgIds, installModeFor, drizzleListingSource, resolveListingReference, listedVersionWarnings, listedPluginRecord, loadOrgInstallContext, orgListingStates, resolvableListings, DEFAULT_CONSUMPTION_POLICY, } from './api/plugin-resolution.js';
|
|
34
37
|
// `isSoftDeletePurgeEnabled` is the module's own env gate — `runSoftDeletePurge`
|
|
35
38
|
// and the scheduler already apply it, so callers never ask separately.
|
|
36
39
|
export { runSoftDeletePurge, createSoftDeletePurgeScheduler, } from './api/soft-delete-sweep.js';
|
|
37
|
-
export
|
|
40
|
+
export { ReportingService, reportingService, } from './api/reporting-service.js';
|
|
38
41
|
// Filters
|
|
39
|
-
export
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
export {} from './core/query-filters.js';
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxXQUFXO0FBQ1gsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyw4QkFBOEI7QUFDOUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBRUwseUJBQXlCLEdBQzFCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGFBQWEsR0FDZCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQiw0QkFBNEIsRUFHNUIsZUFBZSxFQUNmLGVBQWUsRUFHZixZQUFZLEdBRWIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsUUFBUSxFQUNSLDBCQUEwQixFQUMxQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFdBQVcsRUFDWCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLDBCQUEwQixHQU0zQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLGlGQUFpRjtBQUNqRix1RUFBdUU7QUFDdkUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQiw4QkFBOEIsR0FFL0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBWUwsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNqQixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLFVBQVU7QUFDVixPQUFPLEVBVU4sTUFBTSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEBtb2R1bGUgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YVxuICpcbiAqIERhdGFiYXNlIGxheWVyOiBEcml6emxlIE9STSBzY2hlbWFzLCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGFuZCBxdWVyeSBpbmZyYXN0cnVjdHVyZS5cbiAqXG4gKiAqKkRhdGFiYXNlKipcbiAqIC0gZGIg4oCUIHNoYXJlZCBEcml6emxlIGRhdGFiYXNlIGluc3RhbmNlXG4gKiAtIGdldENvbm5lY3Rpb24sIGNsb3NlQ29ubmVjdGlvbiDigJQgUG9zdGdyZVNRTCBjb25uZWN0aW9uIGxpZmVjeWNsZSB3aXRoIHJldHJ5IGxvZ2ljXG4gKiAtIHNjaGVtYSDigJQgRHJpenpsZSB0YWJsZSBkZWZpbml0aW9ucyAocGx1Z2lucywgcGlwZWxpbmVzLCBtZXNzYWdlcywgY29tcGxpYW5jZSwgZXRjLilcbiAqXG4gKiAqKlNlcnZpY2VzKipcbiAqIC0gQ3J1ZFNlcnZpY2Ug4oCUIGdlbmVyaWMgYmFzZSBjbGFzcyBmb3IgbXVsdGktdGVuYW50IENSVUQgd2l0aCBhY2Nlc3MgY29udHJvbCBhbmQgcGFnaW5hdGlvblxuICogLSBSZXBvcnRpbmdTZXJ2aWNlIOKAlCBhZ2dyZWdhdGUgcXVlcnkgYW5kIHJlcG9ydGluZyBiYXNlIGNsYXNzXG4gKlxuICogKipRdWVyeSBCdWlsZGVycyoqXG4gKiAtIGJ1aWxkUGx1Z2luQ29uZGl0aW9ucywgYnVpbGRQaXBlbGluZUNvbmRpdGlvbnMsIGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnMg4oCUIGZpbHRlci10by1TUUwgY29uZGl0aW9uIGJ1aWxkZXJzXG4gKiAtIGJ1aWxkQ29tcGxpYW5jZVBvbGljeUNvbmRpdGlvbnMsIGJ1aWxkQ29tcGxpYW5jZVJ1bGVDb25kaXRpb25zLCBldGMuIOKAlCBjb21wbGlhbmNlIHF1ZXJ5IGJ1aWxkZXJzXG4gKiAtIEFjY2Vzc0NvbnRyb2xCdWlsZGVyIOKAlCByb3ctbGV2ZWwgYWNjZXNzIGNvbnRyb2wgY29uZGl0aW9uIGJ1aWxkZXJcbiAqXG4gKiAqKkZpbHRlcnMqKlxuICogLSBQbHVnaW5GaWx0ZXIsIFBpcGVsaW5lRmlsdGVyLCBNZXNzYWdlRmlsdGVyIOKAlCB0eXBlZCBmaWx0ZXIgaW50ZXJmYWNlc1xuICogLSBDb21wbGlhbmNlUG9saWN5RmlsdGVyLCBDb21wbGlhbmNlUnVsZUZpbHRlciwgZXRjLiDigJQgY29tcGxpYW5jZSBmaWx0ZXIgaW50ZXJmYWNlc1xuICogLSBkcml6emxlUm93cywgZHJpenpsZUNvdW50IOKAlCBEcml6emxlIHJlc3VsdCB0eXBlIGhlbHBlcnNcbiAqL1xuXG4vLyBEYXRhYmFzZVxuZXhwb3J0ICogZnJvbSAnLi9kYXRhYmFzZS9pbmRleC5qcyc7XG5cbi8vIFF1ZXJ5IGJ1aWxkZXJzIGFuZCBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvcXVlcnktYnVpbGRlcnMuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBCYXNlQWNjZXNzRmlsdGVyLFxuICBBY2Nlc3NDb250cm9sUXVlcnlCdWlsZGVyLFxufSBmcm9tICcuL2FwaS9hY2Nlc3MtY29udHJvbC1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL3ZpZXdlci1jb250ZXh0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL2NydWQtc2VydmljZS5qcyc7XG5leHBvcnQge1xuICBwYXJzZVNlbXZlcixcbiAgY29tcGFyZVNlbXZlclBhcnRzLFxuICBjb21wYXJlU2VtdmVyLFxuICBpc1ZlcnNpb25SYW5nZSxcbiAgc2F0aXNmaWVzVmVyc2lvblNwZWMsXG4gIHNlbXZlck9yZGVyQnksXG59IGZyb20gJy4vYXBpL3NlbXZlci1yYW5nZS5qcyc7XG5leHBvcnQge1xuICBub3JtYWxpemVRdWVyeSxcbiAgc2VhcmNoUHVibGljTGlzdGluZ3MsXG4gIGxpc3RQdWJsaWNDYXRlZ29yaWVzLFxuICBnZXRQdWJsaWNMaXN0aW5nLFxuICBnZXRQdWJsaWNMaXN0ZWRWZXJzaW9uLFxuICBsaXN0UHVibGljUmV2aWV3cyxcbiAgbGlzdFB1YmxpY0xpc3RpbmdzRm9yU2l0ZW1hcCxcbiAgdHlwZSBEaXJlY3RvcnlUcnVzdFRpZXIsXG4gIHR5cGUgRGlyZWN0b3J5U29ydCxcbiAgRElSRUNUT1JZX1NPUlRTLFxuICBESVJFQ1RPUllfVElFUlMsXG4gIHR5cGUgRGlyZWN0b3J5U2VhcmNoUGFyYW1zLFxuICB0eXBlIFJldmlld1NvcnQsXG4gIFJFVklFV19TT1JUUyxcbiAgdHlwZSBQdWJsaWNMaXN0aW5nUm93LFxufSBmcm9tICcuL2FwaS9wdWJsaWMtZGlyZWN0b3J5LmpzJztcbmV4cG9ydCB7XG4gIHBvbGljeU9mLFxuICBlZmZlY3RpdmVDb25zdW1wdGlvblBvbGljeSxcbiAgYXBwbHlQb2xpY3lVcGRhdGUsXG4gIGxpc3RpbmdCbG9jayxcbiAgYWR2aXNvcnlSYW5nZUNvdmVycyxcbiAgYWR2aXNvcnlSYW5nZVByb2JsZW0sXG4gIGFkdmlzb3JpZXNDb3ZlcmluZyxcbiAgYmxvY2tpbmdBZHZpc29yaWVzLFxuICBpbXBsaWNpdEluc3RhbGxSYW5nZSxcbiAgaW5zdGFsbEFkbWl0cyxcbiAgc2NvcGVPcmdJZHMsXG4gIGluc3RhbGxNb2RlRm9yLFxuICBkcml6emxlTGlzdGluZ1NvdXJjZSxcbiAgcmVzb2x2ZUxpc3RpbmdSZWZlcmVuY2UsXG4gIGxpc3RlZFZlcnNpb25XYXJuaW5ncyxcbiAgbGlzdGVkUGx1Z2luUmVjb3JkLFxuICBsb2FkT3JnSW5zdGFsbENvbnRleHQsXG4gIG9yZ0xpc3RpbmdTdGF0ZXMsXG4gIHJlc29sdmFibGVMaXN0aW5ncyxcbiAgdHlwZSBDb25zdW1wdGlvblBvbGljeSxcbiAgREVGQVVMVF9DT05TVU1QVElPTl9QT0xJQ1ksXG4gIHR5cGUgUmVzb2x1dGlvblJlZnVzYWwsXG4gIHR5cGUgUmVzb2x1dGlvblNjb3BlLFxuICB0eXBlIExpc3RpbmdEYXRhU291cmNlLFxuICB0eXBlIExpc3RpbmdSZXNvbHZlZCxcbiAgdHlwZSBPcmdMaXN0aW5nU3RhdGUsXG59IGZyb20gJy4vYXBpL3BsdWdpbi1yZXNvbHV0aW9uLmpzJztcbi8vIGBpc1NvZnREZWxldGVQdXJnZUVuYWJsZWRgIGlzIHRoZSBtb2R1bGUncyBvd24gZW52IGdhdGUg4oCUIGBydW5Tb2Z0RGVsZXRlUHVyZ2VgXG4vLyBhbmQgdGhlIHNjaGVkdWxlciBhbHJlYWR5IGFwcGx5IGl0LCBzbyBjYWxsZXJzIG5ldmVyIGFzayBzZXBhcmF0ZWx5LlxuZXhwb3J0IHtcbiAgcnVuU29mdERlbGV0ZVB1cmdlLFxuICBjcmVhdGVTb2Z0RGVsZXRlUHVyZ2VTY2hlZHVsZXIsXG4gIHR5cGUgUHVyZ2VhYmxlRW50aXR5LFxufSBmcm9tICcuL2FwaS9zb2Z0LWRlbGV0ZS1zd2VlcC5qcyc7XG5leHBvcnQge1xuICB0eXBlIEJ1aWxkSGVhbHRoLFxuICB0eXBlIERvcmFMZXZlbCxcbiAgdHlwZSBEb3JhTWV0cmljcyxcbiAgdHlwZSBEb3JhT3B0aW9ucyxcbiAgdHlwZSBEb3JhVHJlbmRQb2ludCxcbiAgdHlwZSBJbmNpZGVudExpc3RJdGVtLFxuICB0eXBlIFJlcG9ydGluZ1NldHRpbmdzLFxuICB0eXBlIEluY2lkZW50VGVzdFJlc3VsdCxcbiAgdHlwZSBJbmdlc3RNZXRyaWMsXG4gIHR5cGUgUGx1Z2luUnVudGltZUZpbHRlcixcbiAgdHlwZSBQbHVnaW5SdW50aW1lU3RhdHMsXG4gIFJlcG9ydGluZ1NlcnZpY2UsXG4gIHJlcG9ydGluZ1NlcnZpY2UsXG59IGZyb20gJy4vYXBpL3JlcG9ydGluZy1zZXJ2aWNlLmpzJztcblxuLy8gRmlsdGVyc1xuZXhwb3J0IHtcbiAgdHlwZSBQbHVnaW5GaWx0ZXIsXG4gIHR5cGUgUGlwZWxpbmVGaWx0ZXIsXG4gIHR5cGUgUGlwZWxpbmVUZW1wbGF0ZUZpbHRlcixcbiAgdHlwZSBNZXNzYWdlRmlsdGVyLFxuICB0eXBlIENvbXBsaWFuY2VQb2xpY3lGaWx0ZXIsXG4gIHR5cGUgQ29tcGxpYW5jZVJ1bGVGaWx0ZXIsXG4gIHR5cGUgQ29tcGxpYW5jZUV4ZW1wdGlvbkZpbHRlcixcbiAgdHlwZSBDb21wbGlhbmNlQXVkaXRGaWx0ZXIsXG4gIHR5cGUgQ29tcGxpYW5jZVNjYW5GaWx0ZXIsXG59IGZyb20gJy4vY29yZS9xdWVyeS1maWx0ZXJzLmpzJztcbiJdfQ==
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"package": "@pipeline-builder/pipeline-data",
|
|
3
|
+
"entries": {
|
|
4
|
+
".": {
|
|
5
|
+
"AccessControlQueryBuilder": "class",
|
|
6
|
+
"advisoriesCovering": "function",
|
|
7
|
+
"advisoryRangeCovers": "function",
|
|
8
|
+
"advisoryRangeProblem": "function",
|
|
9
|
+
"applyPolicyUpdate": "function",
|
|
10
|
+
"blockingAdvisories": "function",
|
|
11
|
+
"buildComplianceAuditConditions": "function",
|
|
12
|
+
"buildComplianceExemptionConditions": "function",
|
|
13
|
+
"buildCompliancePolicyConditions": "function",
|
|
14
|
+
"buildComplianceRuleConditions": "function",
|
|
15
|
+
"buildComplianceScanConditions": "function",
|
|
16
|
+
"buildMessageConditions": "function",
|
|
17
|
+
"buildPipelineConditions": "function",
|
|
18
|
+
"buildPipelineTemplateConditions": "function",
|
|
19
|
+
"buildPluginConditions": "function",
|
|
20
|
+
"buildPublishedRuleCatalogConditions": "function",
|
|
21
|
+
"closeConnection": "function",
|
|
22
|
+
"closePublicReader": "function",
|
|
23
|
+
"COMMUNITY_PUBLISHER_HANDLE": "value",
|
|
24
|
+
"compareSemver": "function",
|
|
25
|
+
"compareSemverParts": "function",
|
|
26
|
+
"complianceAuditLog": "value",
|
|
27
|
+
"complianceExemption": "value",
|
|
28
|
+
"complianceNotificationLog": "value",
|
|
29
|
+
"complianceNotificationPreference": "value",
|
|
30
|
+
"compliancePolicy": "value",
|
|
31
|
+
"complianceReport": "value",
|
|
32
|
+
"complianceReportSchedule": "value",
|
|
33
|
+
"complianceRole": "value",
|
|
34
|
+
"complianceRule": "value",
|
|
35
|
+
"complianceRuleHistory": "value",
|
|
36
|
+
"complianceRuleSubscription": "value",
|
|
37
|
+
"complianceScan": "value",
|
|
38
|
+
"complianceScanSchedule": "value",
|
|
39
|
+
"Connection": "class",
|
|
40
|
+
"ConnectionRetryStrategy": "class",
|
|
41
|
+
"createSoftDeletePurgeScheduler": "function",
|
|
42
|
+
"CrudService": "class",
|
|
43
|
+
"currentViewerUserId": "function",
|
|
44
|
+
"dashboard": "value",
|
|
45
|
+
"dashboardPanel": "value",
|
|
46
|
+
"db": "value",
|
|
47
|
+
"DEFAULT_CONSUMPTION_POLICY": "value",
|
|
48
|
+
"deploymentOutcome": "value",
|
|
49
|
+
"DIRECTORY_SORTS": "value",
|
|
50
|
+
"DIRECTORY_TIERS": "value",
|
|
51
|
+
"doraSettings": "value",
|
|
52
|
+
"drizzleCount": "function",
|
|
53
|
+
"drizzleListingSource": "function",
|
|
54
|
+
"drizzleRows": "function",
|
|
55
|
+
"ecosystemAutoApprovalRule": "value",
|
|
56
|
+
"ecosystemCollection": "value",
|
|
57
|
+
"ecosystemNotificationQueue": "value",
|
|
58
|
+
"ecosystemReservedName": "value",
|
|
59
|
+
"ecosystemSearchMiss": "value",
|
|
60
|
+
"ecosystemSetting": "value",
|
|
61
|
+
"effectiveConsumptionPolicy": "function",
|
|
62
|
+
"executeRows": "function",
|
|
63
|
+
"getConnection": "function",
|
|
64
|
+
"getPublicListedVersion": "function",
|
|
65
|
+
"getPublicListing": "function",
|
|
66
|
+
"getPublicReaderDb": "function",
|
|
67
|
+
"getSslConfig": "function",
|
|
68
|
+
"getTenantContext": "function",
|
|
69
|
+
"implicitInstallRange": "function",
|
|
70
|
+
"incident": "value",
|
|
71
|
+
"ingestHealth": "value",
|
|
72
|
+
"INSTALL_VERSION_POLICIES": "value",
|
|
73
|
+
"installAdmits": "function",
|
|
74
|
+
"installModeFor": "function",
|
|
75
|
+
"isPublicReaderConfigured": "function",
|
|
76
|
+
"isUniqueViolation": "function",
|
|
77
|
+
"isVersionRange": "function",
|
|
78
|
+
"listedPluginRecord": "function",
|
|
79
|
+
"listedVersionWarnings": "function",
|
|
80
|
+
"listingBlock": "function",
|
|
81
|
+
"listPublicCategories": "function",
|
|
82
|
+
"listPublicListingsForSitemap": "function",
|
|
83
|
+
"listPublicReviews": "function",
|
|
84
|
+
"loadOrgInstallContext": "function",
|
|
85
|
+
"message": "value",
|
|
86
|
+
"messageAttachment": "value",
|
|
87
|
+
"normalizeQuery": "function",
|
|
88
|
+
"OFFICIAL_PUBLISHER_HANDLE": "value",
|
|
89
|
+
"OPEN_PUBLISH_REQUEST_STATUSES": "value",
|
|
90
|
+
"orgAlertDestination": "value",
|
|
91
|
+
"orgAlertRule": "value",
|
|
92
|
+
"orgListingStates": "function",
|
|
93
|
+
"parseSemver": "function",
|
|
94
|
+
"PG_UNIQUE_VIOLATION": "value",
|
|
95
|
+
"pipeline": "value",
|
|
96
|
+
"pipelineEvent": "value",
|
|
97
|
+
"pipelineRegistry": "value",
|
|
98
|
+
"pipelineStepManifest": "value",
|
|
99
|
+
"pipelineTemplate": "value",
|
|
100
|
+
"plugin": "value",
|
|
101
|
+
"pluginAdvisory": "value",
|
|
102
|
+
"pluginAdvisoryDelivery": "value",
|
|
103
|
+
"pluginInstall": "value",
|
|
104
|
+
"pluginInstallPolicy": "value",
|
|
105
|
+
"pluginListing": "value",
|
|
106
|
+
"pluginListingVersion": "value",
|
|
107
|
+
"pluginPublishRequest": "value",
|
|
108
|
+
"pluginResolutionOrderBy": "function",
|
|
109
|
+
"pluginReview": "value",
|
|
110
|
+
"pluginReviewHistory": "value",
|
|
111
|
+
"pluginReviewReply": "value",
|
|
112
|
+
"pluginReviewReport": "value",
|
|
113
|
+
"pluginReviewVote": "value",
|
|
114
|
+
"pluginStats": "value",
|
|
115
|
+
"pluginSubmission": "value",
|
|
116
|
+
"policyOf": "function",
|
|
117
|
+
"PUBLIC_READER_ROLE": "value",
|
|
118
|
+
"publicAdvisories": "value",
|
|
119
|
+
"publicListedVersions": "value",
|
|
120
|
+
"publicListings": "value",
|
|
121
|
+
"publicReviews": "value",
|
|
122
|
+
"publisher": "value",
|
|
123
|
+
"PUBLISHER_TIERS": "value",
|
|
124
|
+
"reportingService": "value",
|
|
125
|
+
"ReportingService": "class",
|
|
126
|
+
"resolvableListings": "function",
|
|
127
|
+
"resolveListingReference": "function",
|
|
128
|
+
"resultRows": "function",
|
|
129
|
+
"REVIEW_REPORT_CATEGORIES": "value",
|
|
130
|
+
"REVIEW_SORTS": "value",
|
|
131
|
+
"runSoftDeletePurge": "function",
|
|
132
|
+
"runWithTenantContext": "function",
|
|
133
|
+
"satisfiesVersionSpec": "function",
|
|
134
|
+
"schema": "value",
|
|
135
|
+
"scopeOrgIds": "function",
|
|
136
|
+
"searchPublicListings": "function",
|
|
137
|
+
"semverOrderBy": "function",
|
|
138
|
+
"softDeleteRetentionMs": "function",
|
|
139
|
+
"tenantContext": "value",
|
|
140
|
+
"testConnection": "function",
|
|
141
|
+
"viewerCacheSegment": "function",
|
|
142
|
+
"withTenantTx": "function",
|
|
143
|
+
"withViewerContext": "function"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|