sonamu 0.12.0 → 0.13.1
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/dist/_virtual/_rolldown/runtime.js +1 -2
- package/dist/ai/agents/agent.js +2 -3
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +1 -2
- package/dist/ai/providers/rtzr/error.js +2 -3
- package/dist/ai/providers/rtzr/model.js +1 -2
- package/dist/ai/providers/rtzr/options.js +1 -2
- package/dist/ai/providers/rtzr/provider.js +1 -2
- package/dist/ai/providers/rtzr/utils.js +1 -2
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +9 -9
- package/dist/api/code-converters.js +6 -5
- package/dist/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +2 -3
- package/dist/api/context.d.ts +2 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +2 -3
- package/dist/api/http-validator.js +2 -3
- package/dist/api/index.js +8 -3
- package/dist/api/secret.js +1 -2
- package/dist/api/sonamu.d.ts +3 -5
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +19 -18
- package/dist/api/validator.js +1 -2
- package/dist/api/websocket-helpers.js +2 -3
- package/dist/auth/audit-log/builders.js +1 -2
- package/dist/auth/audit-log/client-ip.js +2 -3
- package/dist/auth/audit-log/events.js +1 -2
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +2 -3
- package/dist/auth/audit-log-ingestor.js +2 -3
- package/dist/auth/auth-generator.js +2 -3
- package/dist/auth/better-auth-entities.js +1 -2
- package/dist/auth/better-auth-request.js +2 -3
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +2 -3
- package/dist/auth/plugins/entity-definitions/admin.js +1 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
- package/dist/auth/plugins/entity-definitions/index.js +1 -2
- package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
- package/dist/auth/plugins/entity-definitions/organization.js +1 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
- package/dist/auth/plugins/entity-definitions/sso.js +1 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
- package/dist/auth/plugins/entity-definitions/username.js +1 -2
- package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +1 -2
- package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.d.ts +39 -5
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +5 -5
- package/dist/bin/compiler-policy.js +2 -3
- package/dist/bin/fixture.js +7 -5
- package/dist/bin/hmr-hook-register.js +1 -2
- package/dist/bin/migrate-targets.js +2 -3
- package/dist/bin/test-command.js +2 -3
- package/dist/bin/ts-loader-register.js +2 -3
- package/dist/bin/ts-loader-registration.js +2 -3
- package/dist/bin/typecheck-web.js +2 -3
- package/dist/cache/cache-manager.js +1 -2
- package/dist/cache/decorator.js +2 -3
- package/dist/cache/drivers.js +1 -2
- package/dist/cache/index.js +2 -3
- package/dist/cache-control/cache-control.js +1 -2
- package/dist/code-formatting/index.js +2 -3
- package/dist/code-formatting/oxfmt.js +2 -3
- package/dist/code-formatting/oxlint.js +2 -3
- package/dist/compress/compress.js +1 -2
- package/dist/compress/index.js +2 -2
- package/dist/compress/types.d.ts +1 -1
- package/dist/compress/types.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +2 -3
- package/dist/database/_batch_update.js +1 -2
- package/dist/database/base-model.js +4 -4
- package/dist/database/db.js +4 -4
- package/dist/database/knex.js +2 -3
- package/dist/database/puri-wrapper.js +2 -3
- package/dist/database/puri.js +23 -22
- package/dist/database/puri.types.js +1 -2
- package/dist/database/transaction-context.js +1 -2
- package/dist/database/upsert-builder.js +2 -3
- package/dist/dict/en.js +2 -3
- package/dist/dict/index.js +3 -3
- package/dist/dict/ko.js +2 -3
- package/dist/dict/rc-keys.js +1 -2
- package/dist/dict/sd.js +2 -3
- package/dist/dict/sonamu-dictionary.js +7 -6
- package/dist/dict/utils.js +2 -3
- package/dist/entity/entity-manager.d.ts +66 -66
- package/dist/entity/entity-manager.js +4 -4
- package/dist/entity/entity-template-cone.js +2 -3
- package/dist/entity/entity.js +21 -18
- package/dist/env.js +1 -2
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +2 -3
- package/dist/filter/index.js +3 -2
- package/dist/filter/types.js +1 -2
- package/dist/filter/utils.js +7 -6
- package/dist/index.js +39 -5
- package/dist/logger/category.js +2 -3
- package/dist/logger/configure.js +5 -5
- package/dist/migration/code-generation.js +23 -16
- package/dist/migration/index-where-predicate.js +2 -3
- package/dist/migration/migration-set.js +2 -3
- package/dist/migration/migrator.js +2 -3
- package/dist/migration/postgresql-schema-reader.js +6 -9
- package/dist/migration/slack-confirm.js +2 -3
- package/dist/naite/naite-reporter.js +2 -3
- package/dist/naite/naite.js +10 -8
- package/dist/runtime-type.js +2 -3
- package/dist/ssr/hmr-opt-out.js +1 -2
- package/dist/ssr/index.js +7 -4
- package/dist/ssr/registry.js +1 -2
- package/dist/ssr/renderer.js +2 -3
- package/dist/storage/base-file.js +1 -2
- package/dist/storage/buffered-file.js +2 -3
- package/dist/storage/drivers.js +1 -2
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +1 -2
- package/dist/storage/storage-manager.js +2 -3
- package/dist/storage/uploaded-file.js +2 -3
- package/dist/stream/__tests__/ws-test-helpers.js +2 -3
- package/dist/stream/index.js +11 -2
- package/dist/stream/sse.js +1 -2
- package/dist/stream/ws-audience-resolver.js +2 -3
- package/dist/stream/ws-audience.js +1 -2
- package/dist/stream/ws-cluster-bus.js +1 -2
- package/dist/stream/ws-delivery.js +2 -3
- package/dist/stream/ws-frame.js +1 -2
- package/dist/stream/ws-local-connection-store.js +2 -3
- package/dist/stream/ws-presence-index.js +1 -2
- package/dist/stream/ws-presence-store.js +2 -3
- package/dist/stream/ws-registry.js +2 -3
- package/dist/stream/ws-session-id.js +1 -2
- package/dist/stream/ws-telemetry-memory.js +3 -4
- package/dist/stream/ws-telemetry-trace.js +1 -2
- package/dist/stream/ws-telemetry.js +2 -3
- package/dist/stream/ws.js +2 -3
- package/dist/syncer/api-parser.js +2 -3
- package/dist/syncer/checksum.js +4 -4
- package/dist/syncer/code-generator.js +4 -4
- package/dist/syncer/entity-operations.js +2 -3
- package/dist/syncer/event-batcher.js +1 -2
- package/dist/syncer/file-copy.js +2 -3
- package/dist/syncer/file-patterns.js +2 -3
- package/dist/syncer/file-tracking.js +2 -3
- package/dist/syncer/filesystem-dependencies.js +1 -2
- package/dist/syncer/index.js +8 -2
- package/dist/syncer/module-loader.js +8 -6
- package/dist/syncer/syncer-actions.js +8 -7
- package/dist/syncer/syncer.js +13 -8
- package/dist/syncer/watcher.js +2 -3
- package/dist/tasks/decorator.js +1 -2
- package/dist/tasks/step-wrapper.js +2 -3
- package/dist/tasks/workflow-manager.js +2 -3
- package/dist/template/entity-converter.js +17 -16
- package/dist/template/helpers.js +2 -3
- package/dist/template/implementations/entity.template.js +2 -3
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +2 -3
- package/dist/template/implementations/generated_http.template.js +6 -6
- package/dist/template/implementations/generated_sso.template.js +2 -3
- package/dist/template/implementations/http_validators.template.js +2 -3
- package/dist/template/implementations/init_types.template.js +2 -3
- package/dist/template/implementations/model.template.js +4 -4
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +2 -3
- package/dist/template/implementations/sd.template.js +2 -3
- package/dist/template/implementations/services.template.js +2 -3
- package/dist/template/implementations/view_form.template.js +12 -9
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +19 -17
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +9 -3
- package/dist/template/template-manager.js +2 -3
- package/dist/template/template-types.js +1 -2
- package/dist/template/template.js +2 -3
- package/dist/template/zod-converter.js +54 -47
- package/dist/testing/_relation-graph.js +2 -3
- package/dist/testing/bootstrap.js +2 -3
- package/dist/testing/data-explorer.js +2 -3
- package/dist/testing/dev-test-routes.js +2 -3
- package/dist/testing/dev-vitest-manager.js +15 -12
- package/dist/testing/faker-mappings.js +1 -2
- package/dist/testing/filesystem.js +2 -3
- package/dist/testing/fixture-generator.js +2 -3
- package/dist/testing/fixture-loader.js +1 -2
- package/dist/testing/fixture-manager.js +12 -9
- package/dist/testing/global-setup.js +5 -5
- package/dist/testing/index.js +6 -3
- package/dist/testing/naite-vitest-reporter.js +1 -2
- package/dist/testing/parallel-db-manager.js +2 -3
- package/dist/testing/vitest-helpers.js +2 -3
- package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
- package/dist/tooling/cdd-service.js +1 -2
- package/dist/tooling/cli-tooling.js +1 -2
- package/dist/tooling/fixture-service.js +1 -2
- package/dist/tooling/index.js +1 -2
- package/dist/tooling/test-run-client.js +2 -3
- package/dist/tsdown.api.config.js +1 -2
- package/dist/types/types.js +2 -3
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +4 -5
- package/dist/ui/ai-client.d.ts +2 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -8
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +11 -8
- package/dist/ui/async-route.js +1 -2
- package/dist/ui/cdd-service.js +22 -21
- package/dist/ui/migrations-api.js +6 -5
- package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
- package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +1 -2
- package/dist/utils/class-name.js +1 -2
- package/dist/utils/console-util.js +1 -2
- package/dist/utils/controller.js +2 -3
- package/dist/utils/esm-utils.js +1 -2
- package/dist/utils/fs-utils.js +2 -3
- package/dist/utils/lodash-able.js +1 -2
- package/dist/utils/model.js +1 -2
- package/dist/utils/object-utils.js +2 -3
- package/dist/utils/path-utils.js +2 -3
- package/dist/utils/process-utils.js +2 -3
- package/dist/utils/runtime-value.js +1 -2
- package/dist/utils/sql-parser.js +2 -3
- package/dist/utils/type-utils.js +8 -8
- package/dist/utils/utils.js +2 -3
- package/dist/utils/zod-error.js +2 -3
- package/dist/vector/chunking.js +1 -2
- package/dist/vector/config.js +1 -2
- package/dist/vector/embedding.js +4 -4
- package/package.json +67 -67
- package/src/ai/agents/agent.ts +1 -1
- package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
- package/src/api/__tests__/sonamu.websocket.test.ts +6 -10
- package/src/api/config.ts +1 -1
- package/src/api/context.ts +2 -8
- package/src/api/sonamu.ts +26 -21
- package/src/auth/audit-log/plugin.ts +2 -0
- package/src/compress/types.ts +1 -1
- package/src/exceptions/error-handler.ts +3 -2
- package/src/template/implementations/model.template.ts +3 -3
- package/src/template/implementations/view_list.template.ts +12 -13
- package/src/ui/ai-api.ts +4 -2
- package/src/ui/ai-client.ts +2 -2
- package/src/ui/api.ts +58 -62
- package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
- package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { group } from "radashi";
|
|
3
3
|
import assert from "assert";
|
|
4
|
-
|
|
4
|
+
// src/migration/postgresql-schema-reader.ts
|
|
5
5
|
function decodeNumericTypeModifier(typeModifier) {
|
|
6
6
|
if (typeModifier === void 0 || typeModifier === null || typeModifier < 4) return null;
|
|
7
7
|
const modifier = typeModifier - 4;
|
|
@@ -103,12 +103,10 @@ var init_postgresql_schema_reader = __esmMin((() => {
|
|
|
103
103
|
const column = { name: currentIndex.column_name };
|
|
104
104
|
if (opclass) Object.assign(column, { opclass });
|
|
105
105
|
switch (using) {
|
|
106
|
-
case "btree":
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
});
|
|
111
|
-
break;
|
|
106
|
+
case "btree": Object.assign(column, {
|
|
107
|
+
sortOrder: currentIndex.sort_order,
|
|
108
|
+
nullsFirst: currentIndex.nulls_first
|
|
109
|
+
});
|
|
112
110
|
}
|
|
113
111
|
indexColumns.push(column);
|
|
114
112
|
}
|
|
@@ -671,8 +669,7 @@ var init_postgresql_schema_reader = __esmMin((() => {
|
|
|
671
669
|
};
|
|
672
670
|
PostgreSQLSchemaReader = new PostgreSQLSchemaReaderClass();
|
|
673
671
|
}));
|
|
674
|
-
//#endregion
|
|
675
672
|
init_postgresql_schema_reader();
|
|
676
673
|
export { PostgreSQLSchemaReader, init_postgresql_schema_reader };
|
|
677
674
|
|
|
678
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgZ3JvdXAgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQge1xuICB0eXBlIE1pZ3JhdGlvbkNvbHVtbixcbiAgdHlwZSBNaWdyYXRpb25Gb3JlaWduLFxuICB0eXBlIE1pZ3JhdGlvbkluZGV4LFxuICB0eXBlIE1pZ3JhdGlvblNldCxcbiAgdHlwZSBSZWxhdGlvbk9uLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuLyoqXG4gKiDtirnsoJUg7YWM7J2067iU7J2YIFBL66W8IOywuOyhsO2VmOuKlCDri6Trpbgg7YWM7J2067iU7J2YIEZLIOygleuztOyeheuLiOuLpC5cbiAqIFBLIO2DgOyehSDrs4Dqsr0g7IucIOq0gOugqCBGSyDsoJzslb3sobDqsbTsnYQg7LKY66as7ZWY6riwIOychO2VtCDsgqzsmqnrkKnri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFJlZmVyZW5jaW5nRm9yZWlnbktleSA9IHtcbiAgLyoqIEZL6rCAIOygleydmOuQnCDthYzsnbTruJTrqoUgKi9cbiAgdGFibGVOYW1lOiBzdHJpbmc7XG4gIC8qKiBGSyDsoJzslb3sobDqsbQg7J2066aEICovXG4gIGNvbnN0cmFpbnROYW1lOiBzdHJpbmc7XG4gIC8qKiBGSyDsu6zrn7zrqoUgKi9cbiAgY29sdW1uTmFtZTogc3RyaW5nO1xuICAvKiog7LC47KGw7ZWY64qUIO2FjOydtOu4lOuqhSAoUEvqsIAg7J6I64qUIO2FjOydtOu4lCkgKi9cbiAgcmVmZXJlbmNlZFRhYmxlTmFtZTogc3RyaW5nO1xuICAvKiog7LC47KGw7ZWY64qUIOy7rOufvOuqhSAo67O07Ya1ICdpZCcpICovXG4gIHJlZmVyZW5jZWRDb2x1bW5OYW1lOiBzdHJpbmc7XG4gIC8qKiBPTiBVUERBVEUg7JWh7IWYICovXG4gIG9uVXBkYXRlOiBSZWxhdGlvbk9uO1xuICAvKiogT04gREVMRVRFIOyVoeyFmCAqL1xuICBvbkRlbGV0ZTogUmVsYXRpb25Pbjtcbn07XG5cbmV4cG9ydCB0eXBlIFBnQ29sdW1uID0ge1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBkYXRhX3R5cGU6IHN0cmluZztcbiAgdWR0X25hbWU6IHN0cmluZztcbiAgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoOiBudW1iZXIgfCBudWxsO1xuICBwcmVjaXNpb246IG51bWJlciB8IG51bGw7XG4gIG51bWVyaWNfc2NhbGU6IG51bWJlciB8IG51bGw7XG4gIGF0dHR5cG1vZD86IG51bWJlciB8IG51bGw7XG4gIGlzX251bGxhYmxlOiBzdHJpbmc7XG4gIGNvbHVtbl9kZWZhdWx0OiBzdHJpbmcgfCBudWxsO1xuICBpc19nZW5lcmF0ZWQ6IHN0cmluZzsgLy8gJ3MnID0gU1RPUkVELCAndicgPSBWSVJUVUFMLCAnJyA9IG5vbmVcbiAgZ2VuZXJhdGlvbl9leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBQZ0luZGV4ID0ge1xuICBpbmRleF9uYW1lOiBzdHJpbmc7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGlzX3VuaXF1ZTogYm9vbGVhbjtcbiAgaXNfcHJpbWFyeTogYm9vbGVhbjtcbiAgaW5kZXhfdHlwZTogc3RyaW5nO1xuICBudWxsc19maXJzdDogYm9vbGVhbjtcbiAgc29ydF9vcmRlcjogXCJBU0NcIiB8IFwiREVTQ1wiO1xuICBudWxsc19ub3RfZGlzdGluY3Q6IGJvb2xlYW47XG4gIGNvbHVtbl9vcmRlcjogbnVtYmVyO1xuICBpbmRleF9kZWZpbml0aW9uOiBzdHJpbmc7XG4gIHByZWRpY2F0ZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIFBnRm9yZWlnbiA9IHtcbiAgY29uc3RyYWludF9uYW1lOiBzdHJpbmc7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGZvcmVpZ25fdGFibGVfbmFtZTogc3RyaW5nO1xuICBmb3JlaWduX2NvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIHVwZGF0ZV9ydWxlOiBzdHJpbmc7XG4gIGRlbGV0ZV9ydWxlOiBzdHJpbmc7XG59O1xuXG50eXBlIFRhYmxlU2NoZW1hUm93cyA9IHtcbiAgY29sdW1uczogUGdDb2x1bW5bXTtcbiAgaW5kZXhlczogUGdJbmRleFtdO1xuICBmb3JlaWduczogUGdGb3JlaWduW107XG59O1xuXG50eXBlIFJhd0NhcGFibGVLbmV4ID0gUGljazxLbmV4LCBcInJhd1wiPjtcblxuZnVuY3Rpb24gZGVjb2RlTnVtZXJpY1R5cGVNb2RpZmllcihcbiAgdHlwZU1vZGlmaWVyOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUGljazxNaWdyYXRpb25Db2x1bW4sIFwicHJlY2lzaW9uXCIgfCBcInNjYWxlXCI+IHwgbnVsbCB7XG4gIGlmICh0eXBlTW9kaWZpZXIgPT09IHVuZGVmaW5lZCB8fCB0eXBlTW9kaWZpZXIgPT09IG51bGwgfHwgdHlwZU1vZGlmaWVyIDwgNCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gaW5mb3JtYXRpb25fc2NoZW1h6rCAIOyeg+uKlCDrsLDsl7QgdHlwbW9k7JmAIOydjOyImCBzY2FsZeydhCBQb3N0Z3JlU1FMIOuCtOu2gCDtkZztmITsl5DshJwg67O17JuQ7ZWc64ukLlxuICBjb25zdCBtb2RpZmllciA9IHR5cGVNb2RpZmllciAtIDQ7XG4gIGNvbnN0IHByZWNpc2lvbiA9IG1vZGlmaWVyID4+PiAxNjtcbiAgY29uc3QgdW5zaWduZWRTY2FsZSA9IG1vZGlmaWVyICYgMHg3ZmY7XG4gIGNvbnN0IHNjYWxlID0gdW5zaWduZWRTY2FsZSA+PSAxMDI0ID8gdW5zaWduZWRTY2FsZSAtIDIwNDggOiB1bnNpZ25lZFNjYWxlO1xuICByZXR1cm4geyBwcmVjaXNpb24sIHNjYWxlIH07XG59XG5cbmNsYXNzIFBvc3RncmVTUUxTY2hlbWFSZWFkZXJDbGFzcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJpY0luZGV4VHlwZXMgPSBuZXcgU2V0KFtcImJ0cmVlXCIsIFwiaGFzaFwiLCBcImdpblwiLCBcImdpc3RcIiwgXCJwZ3Jvb25nYVwiXSk7XG5cbiAgLyoqXG4gICAqIERC7JeQ7IScIO2FjOydtOu4lCDsoJXrs7Trpbwg7J297Ja07IScIE1pZ3JhdGlvblNldOydhCDrp4zrk6TslrTsmLXri4jri6QuXG4gICAqIEBwYXJhbSBjb21wYXJlREIgS25leCDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIHRhYmxlIO2FjOydtOu4lCDsnbTrpoRcbiAgICogQHJldHVybnMgTWlncmF0aW9uU2V0IOqwneyytFxuICAgKi9cbiAgYXN5bmMgZ2V0TWlncmF0aW9uU2V0RnJvbURCKFxuICAgIGNvbXBhcmVEQjogUmF3Q2FwYWJsZUtuZXgsXG4gICAgdGFibGU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxNaWdyYXRpb25TZXQgfCBudWxsPiB7XG4gICAgbGV0IGRiQ29sdW1uczogUGdDb2x1bW5bXSwgZGJJbmRleGVzOiBQZ0luZGV4W10sIGRiRm9yZWlnbnM6IFBnRm9yZWlnbltdO1xuICAgIHRyeSB7XG4gICAgICBbZGJDb2x1bW5zLCBkYkluZGV4ZXMsIGRiRm9yZWlnbnNdID0gYXdhaXQgdGhpcy5yZWFkVGFibGUoY29tcGFyZURCLCB0YWJsZSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoXCJUYWJsZSBub3QgZm91bmRcIikpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIC8vIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9ucyDsobDtmoxcbiAgICBjb25zdCB2ZWN0b3JEaW1lbnNpb25zID0gYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRNaWdyYXRpb25TZXQodGFibGUsIGRiQ29sdW1ucywgZGJJbmRleGVzLCBkYkZvcmVpZ25zLCB2ZWN0b3JEaW1lbnNpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdWJsaWMg7Iqk7YKk66eI7J2YIOuqqOuToCDthYzsnbTruJTsnYQg7ZWcIOuyiOyXkCDsnb3slrTshJwg7YWM7J2067iU67OEIE1pZ3JhdGlvblNldOydhCDrsJjtmZjtlanri4jri6QuXG4gICAqXG4gICAqIGdldE1pZ3JhdGlvblNldEZyb21EQuulvCDthYzsnbTruJTrp4jri6Qg7Zi47Lac7ZWY66m0ICjsu6zrn7wv7J24642x7IqkL0ZLL+uyoe2EsOywqOybkCkgw5cg7YWM7J2067iUIOyImCDrp4ztgbxcbiAgICog7JmV67O17J20IOuwnOyDne2VnOuLpC4g67mE6rWQIOuMgOyDgeydtCDsiJjsi60g6rCc66m0IOybkOqyqSBEQuyXkOyEnCDsmZXrs7Ug67mE7Jqp7J20IOyngOuwsOyggeydtCDrkJjrr4DroZwsXG4gICAqIOyiheulmOuzhOuhnCDtlZwg67KI7JSp66eMIOyhsO2ajO2VnOuLpC4g7ZaJIO2VtOyEneydgCBnZXRNaWdyYXRpb25TZXRGcm9tRELsmYAg64+Z7J287ZWcXG4gICAqIGJ1aWxkTWlncmF0aW9uU2V07J2EIOqzteycoO2VnOuLpC5cbiAgICpcbiAgICogQHJldHVybnMg7YWM7J2067iU66qFIOKGkiBNaWdyYXRpb25TZXQuIERC7JeQIOyXhuuKlCDthYzsnbTruJTsnYAg7ZWt66qp7J20IOyXhuuLpC5cbiAgICovXG4gIGFzeW5jIGdldE1pZ3JhdGlvblNldEZyb21EQkFsbChjb21wYXJlREI6IFJhd0NhcGFibGVLbmV4KTogUHJvbWlzZTxNYXA8c3RyaW5nLCBNaWdyYXRpb25TZXQ+PiB7XG4gICAgY29uc3QgW3RhYmxlcywgdmVjdG9yRGltZW5zaW9uc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnJlYWRUYWJsZXMoY29tcGFyZURCKSxcbiAgICAgIHRoaXMuZ2V0VmVjdG9yRGltZW5zaW9uc0FsbChjb21wYXJlREIpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgbWlncmF0aW9uU2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBNaWdyYXRpb25TZXQ+KCk7XG4gICAgZm9yIChjb25zdCBbdGFibGUsIHJvd3NdIG9mIHRhYmxlcykge1xuICAgICAgbWlncmF0aW9uU2V0cy5zZXQoXG4gICAgICAgIHRhYmxlLFxuICAgICAgICB0aGlzLmJ1aWxkTWlncmF0aW9uU2V0KFxuICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgIHJvd3MuY29sdW1ucyxcbiAgICAgICAgICByb3dzLmluZGV4ZXMsXG4gICAgICAgICAgcm93cy5mb3JlaWducyxcbiAgICAgICAgICB2ZWN0b3JEaW1lbnNpb25zLmdldCh0YWJsZSkgPz8ge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbWlncmF0aW9uU2V0cztcbiAgfVxuXG4gIC8qKlxuICAgKiDsobDtmowg6rKw6rO8IO2WieuTpOydhCBNaWdyYXRpb25TZXTsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgKiDthYzsnbTruJQg64uo7JyEIOyhsO2ajChnZXRNaWdyYXRpb25TZXRGcm9tREIp7JmAIOyghOyytCDsnbzqtIQg7KGw7ZqMKGdldE1pZ3JhdGlvblNldEZyb21EQkFsbCnqsIBcbiAgICog7J20IOuhnOyngeydhCDqs7XsnKDtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTWlncmF0aW9uU2V0KFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZGJDb2x1bW5zOiBQZ0NvbHVtbltdLFxuICAgIGRiSW5kZXhlczogUGdJbmRleFtdLFxuICAgIGRiRm9yZWlnbnM6IFBnRm9yZWlnbltdLFxuICAgIHZlY3RvckRpbWVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICk6IE1pZ3JhdGlvblNldCB7XG4gICAgY29uc3QgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10gPSBkYkNvbHVtbnMubWFwKChkYkNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZGJDb2xUeXBlID0gdGhpcy5yZXNvbHZlREJDb2xUeXBlKGRiQ29sdW1uKTtcblxuICAgICAgLy8gdmVjdG9yIO2DgOyeheyduCDqsr3smrAgZGltZW5zaW9ucyDshKTsoJVcbiAgICAgIGlmIChkYkNvbFR5cGUudHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgICAgICBkYkNvbFR5cGUuZGltZW5zaW9ucyA9IHZlY3RvckRpbWVuc2lvbnNbZGJDb2x1bW4uY29sdW1uX25hbWVdID8/IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRiQ29sdW1uLmNvbHVtbl9uYW1lLFxuICAgICAgICBudWxsYWJsZTogZGJDb2x1bW4uaXNfbnVsbGFibGUgPT09IFwiWUVTXCIsXG4gICAgICAgIC4uLmRiQ29sVHlwZSxcbiAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsspjrpqxcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb2x1bW4uaXNfZ2VuZXJhdGVkID09PSBcInNcIiB8fCBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwidlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiID8gXCJTVE9SRURcIiA6IFwiVklSVFVBTFwiLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGRiQ29sdW1uLmdlbmVyYXRpb25fZXhwcmVzc2lvbiA/PyBcIlwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9KSgpLFxuICAgICAgICAvLyBEZWZhdWx0IOqwkiDsspjrpqwgKEdlbmVyYXRlZCBDb2x1bW7snbQg7JWE64uMIOqyveyasOunjClcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIGRlZmF1bHQg6rCS7J20IOyXhuydjFxuICAgICAgICAgIGlmIChkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiIHx8IGRiQ29sdW1uLmlzX2dlbmVyYXRlZCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFBvc3RncmVTUUwgZGVmYXVsdCDqsJIg7KCV66asIChuZXh0dmFsLCBDVVJSRU5UX1RJTUVTVEFNUCDrk7EpXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQ7XG5cbiAgICAgICAgICAgIC8vIG5leHR2YWwg7KCc6rGwIChTRVJJQUwg7YOA7J6FKVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZS5zdGFydHNXaXRoKFwibmV4dHZhbChcIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDtg4DsnoUg7LqQ7Iqk7YyFIOygnOqxsCAo7JiIOiAnMSc6OmludGVnZXIg4oaSIDEpXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUucmVwbGFjZSgvOjpbXFx3XFxzXSskL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAvLyDrlLDsmLTtkZzqsIAgc2luZ2xlIHF1b3Rl7J24IOqyveyasCBkb3VibGUgcXVvdGXroZwg67OA7ZmYXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIGRlZmF1bHRWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnJlcGxhY2VBbGwoXCInXCIsICdcIicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkZWZhdWx0VG86IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSkoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBQUklNQVJZIEtFWeyZgCBmb3JlaWduIGtleeyaqSDsnbjrjbHsiqQg7KCc7Jm4XG4gICAgY29uc3QgZGJJbmRleGVzR3JvdXAgPSBncm91cChcbiAgICAgIGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgICAgIChkYkluZGV4KSA9PlxuICAgICAgICAgICFkYkluZGV4LmlzX3ByaW1hcnkgJiZcbiAgICAgICAgICAhZGJGb3JlaWducy5maW5kKChkYkZvcmVpZ24pID0+IGRiSW5kZXguaW5kZXhfbmFtZS5pbmNsdWRlcyhkYkZvcmVpZ24uY29uc3RyYWludF9uYW1lKSksXG4gICAgICApLFxuICAgICAgKGRiSW5kZXgpID0+IGRiSW5kZXguaW5kZXhfbmFtZSxcbiAgICApO1xuXG4gICAgLy8gaW5kZXhlcyDsspjrpqxcbiAgICBjb25zdCBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdID0gW107XG4gICAgZm9yIChjb25zdCBpbmRleE5hbWUgb2YgT2JqZWN0LmtleXMoZGJJbmRleGVzR3JvdXApKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IGRiSW5kZXhlc0dyb3VwW2luZGV4TmFtZV0/LnRvU29ydGVkKFxuICAgICAgICAobGVmdCwgcmlnaHQpID0+IGxlZnQuY29sdW1uX29yZGVyIC0gcmlnaHQuY29sdW1uX29yZGVyLFxuICAgICAgKTtcbiAgICAgIGFzc2VydChjdXJyZW50SW5kZXhlcyk7XG5cbiAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBjdXJyZW50SW5kZXhlc1swXTtcbiAgICAgIGNvbnN0IHBhcnNlZEluZGV4RGVmaW5pdGlvbiA9IHRoaXMucGFyc2VJbmRleERlZmluaXRpb24oZmlyc3RJbmRleC5pbmRleF9kZWZpbml0aW9uKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkSW5kZXhUeXBlID0gdGhpcy5yZXN0b3JlTWlncmF0aW9uSW5kZXhUeXBlKFxuICAgICAgICBmaXJzdEluZGV4LFxuICAgICAgICBwYXJzZWRJbmRleERlZmluaXRpb24uYWNjZXNzTWV0aG9kLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVzaW5nID0gdGhpcy5yZXN0b3JlR2VuZXJpY1VzaW5nKFxuICAgICAgICBwYXJzZWRJbmRleERlZmluaXRpb24uYWNjZXNzTWV0aG9kID8/IGZpcnN0SW5kZXguaW5kZXhfdHlwZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGluZGV4Q29sdW1uczogTWlncmF0aW9uSW5kZXhbXCJjb2x1bW5zXCJdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRJbmRleCBvZiBjdXJyZW50SW5kZXhlcykge1xuICAgICAgICBjb25zdCBvcGNsYXNzID0gdGhpcy5leHRyYWN0SW5kZXhDb2x1bW5PcGNsYXNzKFxuICAgICAgICAgIHBhcnNlZEluZGV4RGVmaW5pdGlvbi5jb2x1bW5EZWZpbml0aW9uc1tjdXJyZW50SW5kZXguY29sdW1uX29yZGVyIC0gMV0sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbHVtbjogTWlncmF0aW9uSW5kZXhbXCJjb2x1bW5zXCJdW251bWJlcl0gPSB7XG4gICAgICAgICAgbmFtZTogY3VycmVudEluZGV4LmNvbHVtbl9uYW1lLFxuICAgICAgICB9O1xuICAgICAgICBpZiAob3BjbGFzcykge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uLCB7IG9wY2xhc3MgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh1c2luZykge1xuICAgICAgICAgIGNhc2UgXCJidHJlZVwiOlxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgICAgICAgc29ydE9yZGVyOiBjdXJyZW50SW5kZXguc29ydF9vcmRlcixcbiAgICAgICAgICAgICAgbnVsbHNGaXJzdDogY3VycmVudEluZGV4Lm51bGxzX2ZpcnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpbmRleENvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXg6IE1pZ3JhdGlvbkluZGV4ID0ge1xuICAgICAgICB0eXBlOiByZXN0b3JlZEluZGV4VHlwZSxcbiAgICAgICAgbmFtZTogaW5kZXhOYW1lLFxuICAgICAgICBjb2x1bW5zOiBpbmRleENvbHVtbnMsXG4gICAgICAgIG51bGxzTm90RGlzdGluY3Q6IGZpcnN0SW5kZXgubnVsbHNfbm90X2Rpc3RpbmN0LFxuICAgICAgICAuLi50aGlzLnBhcnNlVmVjdG9ySW5kZXhPcHRpb25zKHJlc3RvcmVkSW5kZXhUeXBlLCBwYXJzZWRJbmRleERlZmluaXRpb24ud2l0aE9wdGlvbnMpLFxuICAgICAgfTtcbiAgICAgIGlmIChmaXJzdEluZGV4LnByZWRpY2F0ZSkge1xuICAgICAgICBpbmRleC53aGVyZSA9IGZpcnN0SW5kZXgucHJlZGljYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHVzaW5nKSB7XG4gICAgICAgIGluZGV4LnVzaW5nID0gdXNpbmc7XG4gICAgICB9XG4gICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgIH1cblxuICAgIC8vIGZvcmVpZ25zIOyymOumrFxuICAgIGNvbnN0IGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10gPSBkYkZvcmVpZ25zLm1hcCgoZGJGb3JlaWduKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5zOiBbZGJGb3JlaWduLmNvbHVtbl9uYW1lXSxcbiAgICAgICAgdG86IGAke2RiRm9yZWlnbi5mb3JlaWduX3RhYmxlX25hbWV9LiR7ZGJGb3JlaWduLmZvcmVpZ25fY29sdW1uX25hbWV9YCxcbiAgICAgICAgb25VcGRhdGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihkYkZvcmVpZ24udXBkYXRlX3J1bGUpLFxuICAgICAgICBvbkRlbGV0ZTogdGhpcy5tYXBDb25zdHJhaW50QWN0aW9uKGRiRm9yZWlnbi5kZWxldGVfcnVsZSksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGluZGV4ZXMsXG4gICAgICBmb3JlaWducyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc3RncmVTUUzsnZggY29uc3RyYWludCBhY3Rpb27snYQgS25leCDtmJXsi53snLzroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIG1hcENvbnN0cmFpbnRBY3Rpb24oYWN0aW9uOiBzdHJpbmcpOiBSZWxhdGlvbk9uIHtcbiAgICBjb25zdCBhY3Rpb25NYXAgPSBuZXcgTWFwPHN0cmluZywgUmVsYXRpb25Pbj4oW1xuICAgICAgW1wiTk8gQUNUSU9OXCIsIFwiTk8gQUNUSU9OXCJdLFxuICAgICAgW1wiUkVTVFJJQ1RcIiwgXCJSRVNUUklDVFwiXSxcbiAgICAgIFtcIkNBU0NBREVcIiwgXCJDQVNDQURFXCJdLFxuICAgICAgW1wiU0VUIE5VTExcIiwgXCJTRVQgTlVMTFwiXSxcbiAgICAgIFtcIlNFVCBERUZBVUxUXCIsIFwiU0VUIERFRkFVTFRcIl0sXG4gICAgXSk7XG4gICAgcmV0dXJuIGFjdGlvbk1hcC5nZXQoYWN0aW9uKSA/PyBcIk5PIEFDVElPTlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIOq4sOyhtCDthYzsnbTruJQg7J297Ja07IScIGNvbHMsIGluZGV4ZXMsIGZvcmVpZ25zIOuwmO2ZmFxuICAgKi9cbiAgYXN5bmMgcmVhZFRhYmxlKFxuICAgIGNvbXBhcmVEQjogUmF3Q2FwYWJsZUtuZXgsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8W1BnQ29sdW1uW10sIFBnSW5kZXhbXSwgUGdGb3JlaWduW11dPiB7XG4gICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5yZWFkVGFibGVzKGNvbXBhcmVEQiwgdGFibGVOYW1lKTtcbiAgICBjb25zdCByb3dzID0gdGFibGVzLmdldCh0YWJsZU5hbWUpO1xuICAgIGlmIChyb3dzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgbm90IGZvdW5kOiAke3RhYmxlTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyb3dzLmNvbHVtbnMsIHJvd3MuaW5kZXhlcywgcm93cy5mb3JlaWduc107XG4gIH1cblxuICAvKipcbiAgICogcHVibGljIOyKpO2CpOuniCDthYzsnbTruJTrk6TsnZggY29scy9pbmRleGVzL2ZvcmVpZ25z66W8IO2FjOydtOu4lOuzhOuhnCDrrLbslrTshJwg67CY7ZmY7ZWp64uI64ukLlxuICAgKlxuICAgKiB0YWJsZU5hbWXsnYQg7KO866m0IOq3uCDthYzsnbTruJTrp4wsIOyDneuete2VmOuptCDsoITssrTrpbwg7KGw7ZqM7ZWp64uI64ukLiDsv7zrpqzripQg65GQIOqyveuhnOqwgCDqs7XsnKDtlZjrr4DroZxcbiAgICog64uo7J28IOyhsO2ajOyZgCDsnbzqtIQg7KGw7ZqM7J2YIO2VtOyEneydtCDqsIjrnbzsp4Dsp4Ag7JWK7Iq164uI64ukLiDsoITssrQg7KGw7ZqMIOyLnOyXkOuKlCDthYzsnbTruJTrp4jri6QgNOuyiOyUqVxuICAgKiDsmZXrs7XtlZjripQg64yA7IugIOyiheulmOuzhOuhnCDtlZwg67KI7JSp66eMIOuPjOq4sCDrlYzrrLjsl5AsIOybkOqyqSBEQuyXkOyEnCDsmZXrs7Ug67mE7Jqp7J20IO2BrOqyjCDspITslrTrk63ri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlYWRUYWJsZXMoXG4gICAgY29tcGFyZURCOiBSYXdDYXBhYmxlS25leCxcbiAgICB0YWJsZU5hbWU/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8TWFwPHN0cmluZywgVGFibGVTY2hlbWFSb3dzPj4ge1xuICAgIGNvbnN0IGJpbmRpbmdzID0gdGFibGVOYW1lID09PSB1bmRlZmluZWQgPyBbXSA6IFt0YWJsZU5hbWUsIHRhYmxlTmFtZSwgdGFibGVOYW1lXTtcbiAgICBjb25zdCB0YWJsZUZpbHRlciA9IChjb2x1bW46IHN0cmluZykgPT4gKHRhYmxlTmFtZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGBBTkQgJHtjb2x1bW59ID0gP2ApO1xuXG4gICAgLy8gQ29sdW1ucyDsobDtmowgKEdlbmVyYXRlZCBDb2x1bW4g7KCV67O0IO2PrO2VqClcbiAgICBjb25zdCBjb2x1bW5zUXVlcnkgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgYy50YWJsZV9uYW1lLFxuICAgICAgICBjLmNvbHVtbl9uYW1lLFxuICAgICAgICBjLmRhdGFfdHlwZSxcbiAgICAgICAgYy51ZHRfbmFtZSxcbiAgICAgICAgQ09BTEVTQ0UoXG4gICAgICAgICAgYy5jaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsXG4gICAgICAgICAgQ0FTRSBXSEVOIGMuZGF0YV90eXBlID0gJ0FSUkFZJyBBTkQgYS5hdHR0eXBtb2QgPiAwXG4gICAgICAgICAgICBUSEVOIGEuYXR0dHlwbW9kIC0gNFxuICAgICAgICAgICAgRUxTRSBOVUxMXG4gICAgICAgICAgRU5EXG4gICAgICAgICkgQVMgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgICBDT0FMRVNDRShjLmRhdGV0aW1lX3ByZWNpc2lvbiwgYy5udW1lcmljX3ByZWNpc2lvbikgQVMgcHJlY2lzaW9uLFxuICAgICAgICBjLm51bWVyaWNfc2NhbGUsXG4gICAgICAgIGEuYXR0dHlwbW9kLFxuICAgICAgICBjLmlzX251bGxhYmxlLFxuICAgICAgICBjLmNvbHVtbl9kZWZhdWx0LFxuICAgICAgICBDT0FMRVNDRShhLmF0dGdlbmVyYXRlZCwgJycpIGFzIGlzX2dlbmVyYXRlZCxcbiAgICAgICAgYy5nZW5lcmF0aW9uX2V4cHJlc3Npb25cbiAgICAgIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgY1xuICAgICAgTEVGVCBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0bmFtZSA9IGMuY29sdW1uX25hbWVcbiAgICAgICAgQU5EIGEuYXR0cmVsaWQgPSAoXG4gICAgICAgICAgU0VMRUNUIG9pZCBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSBjLnRhYmxlX25hbWVcbiAgICAgICAgICBBTkQgcmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IGMudGFibGVfc2NoZW1hKVxuICAgICAgICApXG4gICAgICBXSEVSRSBjLnRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnXG4gICAgICAgICR7dGFibGVGaWx0ZXIoXCJjLnRhYmxlX25hbWVcIil9XG4gICAgICBPUkRFUiBCWSBjLnRhYmxlX25hbWUsIGMub3JkaW5hbF9wb3NpdGlvblxuICAgIGA7XG5cbiAgICAvLyBJbmRleGVzIOyhsO2ajCAoUEdyb29uZ2Eg7ZGc7ZiE7IudIOyduOuNseyKpCDtj6ztlagpXG4gICAgY29uc3QgaW5kZXhlc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgICAgdC5yZWxuYW1lIEFTIHRhYmxlX25hbWUsXG4gICAgICAgICAgaS5yZWxuYW1lIEFTIGluZGV4X25hbWUsXG4gICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICBXSEVOIGFtLmFtbmFtZSA9ICdwZ3Jvb25nYScgQU5EIHUuYXR0bnVtID0gMCBUSEVOXG4gICAgICAgICAgICAgICAgICByZWdleHBfcmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICByZWdleHBfcmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgVFJJTShwZ3Jvb25nYV9jb2wuY29sdW1uX2V4cHIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnOjp0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdnJ1xuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgJ1soKV0nLFxuICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICdnJ1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBFTFNFIGEuYXR0bmFtZVxuICAgICAgICAgIEVORCBBUyBjb2x1bW5fbmFtZSxcbiAgICAgICAgICBpeC5pbmRpc3VuaXF1ZSBBUyBpc191bmlxdWUsXG4gICAgICAgICAgaXguaW5kaXNwcmltYXJ5IEFTIGlzX3ByaW1hcnksXG4gICAgICAgICAgYW0uYW1uYW1lIEFTIGluZGV4X3R5cGUsXG4gICAgICAgICAgQ09BTEVTQ0UoKHUub3B0ICYgMikgPSAyLCBGQUxTRSkgQVMgbnVsbHNfZmlyc3QsXG4gICAgICAgICAgQ0FTRSBcbiAgICAgICAgICAgICAgV0hFTiAodS5vcHQgJiAxKSA9IDEgVEhFTiAnREVTQydcbiAgICAgICAgICAgICAgRUxTRSAnQVNDJ1xuICAgICAgICAgIEVORCBBUyBzb3J0X29yZGVyLFxuICAgICAgICAgIGl4LmluZG51bGxzbm90ZGlzdGluY3QgQVMgbnVsbHNfbm90X2Rpc3RpbmN0LFxuICAgICAgICAgIHUub3JkIEFTIGNvbHVtbl9vcmRlcixcbiAgICAgICAgICBwZ19nZXRfaW5kZXhkZWYoaXguaW5kZXhyZWxpZCkgQVMgaW5kZXhfZGVmaW5pdGlvbixcbiAgICAgICAgICBwZ19nZXRfZXhwcihpeC5pbmRwcmVkLCBpeC5pbmRyZWxpZCkgQVMgcHJlZGljYXRlXG4gICAgICBGUk9NIHBnX2NsYXNzIHRcbiAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIG5zIE9OIG5zLm9pZCA9IHQucmVsbmFtZXNwYWNlXG4gICAgICBKT0lOIHBnX2luZGV4IGl4IE9OIHQub2lkID0gaXguaW5kcmVsaWRcbiAgICAgIEpPSU4gcGdfY2xhc3MgaSBPTiBpLm9pZCA9IGl4LmluZGV4cmVsaWRcbiAgICAgIEpPSU4gcGdfYW0gYW0gT04gaS5yZWxhbSA9IGFtLm9pZFxuICAgICAgSk9JTiBMQVRFUkFMIHVubmVzdChpeC5pbmRrZXksIGl4LmluZG9wdGlvbilcbiAgICAgICAgICBXSVRIIE9SRElOQUxJVFkgQVMgdShhdHRudW0sIG9wdCwgb3JkKSBPTiB0cnVlXG4gICAgICBMRUZUIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHQub2lkIFxuICAgICAgICAgIEFORCBhLmF0dG51bSA9IHUuYXR0bnVtIFxuICAgICAgICAgIEFORCB1LmF0dG51bSA+IDBcbiAgICAgIExFRlQgSk9JTiBMQVRFUkFMIChcbiAgICAgICAgICAtLSBQR3Jvb25nYSDtkZztmITsi50g7J24642x7Iqk64qUIOuqqOuToCDtlonsnZggYXR0bnVt7J20IDDsnbTrnbwgdS5vcmTqsIAg6rCZ64ukLlxuICAgICAgICAgIC0tIO2RnO2YhOyLnSDrsLDsl7TsnZgg7Iic67KIKGV4cHJfb3JkKeydhCDtlajqu5gg672R7JWEIOygleugrOydhCDtmZXsoJXtlZzri6QuXG4gICAgICAgICAgU0VMRUNUIGV4cHIuY29sdW1uX2V4cHIsIGV4cHIuZXhwcl9vcmRcbiAgICAgICAgICBGUk9NIHVubmVzdChcbiAgICAgICAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICAgICAgICBXSEVOIHBnX2dldF9leHByKGl4LmluZGV4cHJzLCBpeC5pbmRyZWxpZCkgfiAnXkFSUkFZXFxcXFsnIFRIRU5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3RvX2FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhwX3JlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIoaXguaW5kZXhwcnMsIGl4LmluZHJlbGlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXkFSUkFZXFxcXFsoLiopXFxcXF0kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxcXDEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJywgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgRUxTRVxuICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWVtwZ19nZXRfZXhwcihpeC5pbmRleHBycywgaXguaW5kcmVsaWQpXVxuICAgICAgICAgICAgICAgICAgRU5EXG4gICAgICAgICAgICAgICkgV0lUSCBPUkRJTkFMSVRZIEFTIGV4cHIoY29sdW1uX2V4cHIsIGV4cHJfb3JkKVxuICAgICAgKSBwZ3Jvb25nYV9jb2wgT04gYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwXG4gICAgICBXSEVSRSB0LnJlbGtpbmQgPSAncidcbiAgICAgICAgICBBTkQgbnMubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgJHt0YWJsZUZpbHRlcihcInQucmVsbmFtZVwiKX1cbiAgICAgICAgICBBTkQgKHUuYXR0bnVtID4gMCBPUiAoYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwKSlcbiAgICAgIE9SREVSIEJZIHQucmVsbmFtZSwgaS5yZWxuYW1lLCB1Lm9yZCwgcGdyb29uZ2FfY29sLmV4cHJfb3JkO1xuYDtcblxuICAgIC8vIEZvcmVpZ24gS2V5cyDsobDtmoxcbiAgICAvL1xuICAgIC8vIGluZm9ybWF0aW9uX3NjaGVtYSh0YWJsZV9jb25zdHJhaW50cyDDlyBrZXlfY29sdW1uX3VzYWdlIMOXIGNvbnN0cmFpbnRfY29sdW1uX3VzYWdlXG4gICAgLy8gw5cgcmVmZXJlbnRpYWxfY29uc3RyYWludHMpIDTspJEg7KGw7J24IOuMgOyLoCBwZ19jb25zdHJhaW5066W8IOyngeygkSDsnb3ripTri6QuXG4gICAgLy8gY29uc3RyYWludF9jb2x1bW5fdXNhZ2XripQg67ewIOyViOycvOuhnCDthYzsnbTruJQg7ZWE7YSw6rCAIOuwgOugpOuTpOyWtOqwgOyngCDslYrslYQgREIg7KCE7LK07J2YXG4gICAgLy8g7KCc7JW97KGw6rG07J2EIO2bkeuKlOuLpC4g7KCc7JW97J20IOyhsOq4iOunjCDrp47slYTsoLjrj4Qg7YWM7J2067iUIO2VmOuCmCDsobDtmozsl5AgMey0iCDsnbTsg4Eg6rG466as6rOgLFxuICAgIC8vIOu5hOq1kOuKlCDthYzsnbTruJTrp4jri6Qg7J20IOy/vOumrOulvCDrj4zrpqzrr4DroZwg7KCE7LK0IOyGjOyalOqwgCDquInqsqntnogg7Luk7KeE64ukLlxuICAgIC8vIGNvbnR5cGU9J2YnIOyduOuNseyKpCDsiqTsupTsnLzroZwg67CU6r6466m0IE5PVCBOVUxMIOygnOyVvShQRyAxNyvsl5DshJwgcGdfY29uc3RyYWludOyXkFxuICAgIC8vIOq4sOuhneuQnOuLpCkg65Ox7J2EIOyVhOyYiCDqsbTrhIjrm7Tri6QuXG4gICAgLy9cbiAgICAvLyBjb25rZXkvY29uZmtleeuKlCDsu6zrn7wg7Iic7ISc66W8IOuLtOydgCDrsLDsl7TsnbTrr4DroZwgV0lUSCBPUkRJTkFMSVRZ66GcIOqwmeydgCDsiJzrsojrgbzrpqxcbiAgICAvLyDsp53sp4DslrTslbwg67O17ZWpIEZL7JeQ7IScIOy7rOufvCDrjIDsnZHsnbQg7Ja06riL64KY7KeAIOyViuuKlOuLpC5cbiAgICBjb25zdCBmb3JlaWduc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIGNsLnJlbG5hbWUgQVMgdGFibGVfbmFtZSxcbiAgICAgICAgY29uLmNvbm5hbWUgQVMgY29uc3RyYWludF9uYW1lLFxuICAgICAgICBhdHQuYXR0bmFtZSBBUyBjb2x1bW5fbmFtZSxcbiAgICAgICAgcmVmX2NsLnJlbG5hbWUgQVMgZm9yZWlnbl90YWJsZV9uYW1lLFxuICAgICAgICByZWZfYXR0LmF0dG5hbWUgQVMgZm9yZWlnbl9jb2x1bW5fbmFtZSxcbiAgICAgICAgQ0FTRSBjb24uY29uZnVwZHR5cGVcbiAgICAgICAgICBXSEVOICdhJyBUSEVOICdOTyBBQ1RJT04nXG4gICAgICAgICAgV0hFTiAncicgVEhFTiAnUkVTVFJJQ1QnXG4gICAgICAgICAgV0hFTiAnYycgVEhFTiAnQ0FTQ0FERSdcbiAgICAgICAgICBXSEVOICduJyBUSEVOICdTRVQgTlVMTCdcbiAgICAgICAgICBXSEVOICdkJyBUSEVOICdTRVQgREVGQVVMVCdcbiAgICAgICAgRU5EIEFTIHVwZGF0ZV9ydWxlLFxuICAgICAgICBDQVNFIGNvbi5jb25mZGVsdHlwZVxuICAgICAgICAgIFdIRU4gJ2EnIFRIRU4gJ05PIEFDVElPTidcbiAgICAgICAgICBXSEVOICdyJyBUSEVOICdSRVNUUklDVCdcbiAgICAgICAgICBXSEVOICdjJyBUSEVOICdDQVNDQURFJ1xuICAgICAgICAgIFdIRU4gJ24nIFRIRU4gJ1NFVCBOVUxMJ1xuICAgICAgICAgIFdIRU4gJ2QnIFRIRU4gJ1NFVCBERUZBVUxUJ1xuICAgICAgICBFTkQgQVMgZGVsZXRlX3J1bGVcbiAgICAgIEZST00gcGdfY29uc3RyYWludCBjb25cbiAgICAgIEpPSU4gcGdfY2xhc3MgY2wgT04gY2wub2lkID0gY29uLmNvbnJlbGlkXG4gICAgICBKT0lOIHBnX25hbWVzcGFjZSBucyBPTiBucy5vaWQgPSBjbC5yZWxuYW1lc3BhY2VcbiAgICAgIEpPSU4gcGdfY2xhc3MgcmVmX2NsIE9OIHJlZl9jbC5vaWQgPSBjb24uY29uZnJlbGlkXG4gICAgICBKT0lOIExBVEVSQUwgdW5uZXN0KGNvbi5jb25rZXkpIFdJVEggT1JESU5BTElUWSBBUyBrZXlfY29sKGF0dG51bSwgb3JkKSBPTiB0cnVlXG4gICAgICBKT0lOIExBVEVSQUwgdW5uZXN0KGNvbi5jb25ma2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgcmVmX2tleV9jb2woYXR0bnVtLCBvcmQpXG4gICAgICAgIE9OIHJlZl9rZXlfY29sLm9yZCA9IGtleV9jb2wub3JkXG4gICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhdHRcbiAgICAgICAgT04gYXR0LmF0dHJlbGlkID0gY2wub2lkIEFORCBhdHQuYXR0bnVtID0ga2V5X2NvbC5hdHRudW1cbiAgICAgIEpPSU4gcGdfYXR0cmlidXRlIHJlZl9hdHRcbiAgICAgICAgT04gcmVmX2F0dC5hdHRyZWxpZCA9IHJlZl9jbC5vaWQgQU5EIHJlZl9hdHQuYXR0bnVtID0gcmVmX2tleV9jb2wuYXR0bnVtXG4gICAgICBXSEVSRSBjb24uY29udHlwZSA9ICdmJ1xuICAgICAgICBBTkQgbnMubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICR7dGFibGVGaWx0ZXIoXCJjbC5yZWxuYW1lXCIpfVxuICAgICAgT1JERVIgQlkgY2wucmVsbmFtZSwgY29uLmNvbm5hbWUsIGtleV9jb2wub3JkXG4gICAgYDtcblxuICAgIC8vIOyiheulmOuzhOuhnCDtlZwg67KI7JSp66eMIOyhsO2ajO2VnCDrkqQg7YWM7J2067iU66qF7Jy866GcIOustuyKteuLiOuLpC5cbiAgICBjb25zdCBbY29sdW1uUm93cywgaW5kZXhSb3dzLCBmb3JlaWduUm93c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBjb21wYXJlREJcbiAgICAgICAgLnJhdyhjb2x1bW5zUXVlcnksIGJpbmRpbmdzLnNsaWNlKDAsIDEpKVxuICAgICAgICAudGhlbigocmVzdWx0OiB7IHJvd3M6IChQZ0NvbHVtbiAmIHsgdGFibGVfbmFtZTogc3RyaW5nIH0pW10gfSkgPT4gcmVzdWx0LnJvd3MpLFxuICAgICAgY29tcGFyZURCXG4gICAgICAgIC5yYXcoaW5kZXhlc1F1ZXJ5LCBiaW5kaW5ncy5zbGljZSgxLCAyKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdDogeyByb3dzOiAoUGdJbmRleCAmIHsgdGFibGVfbmFtZTogc3RyaW5nIH0pW10gfSkgPT4gcmVzdWx0LnJvd3MpLFxuICAgICAgY29tcGFyZURCXG4gICAgICAgIC5yYXcoZm9yZWlnbnNRdWVyeSwgYmluZGluZ3Muc2xpY2UoMiwgMykpXG4gICAgICAgIC50aGVuKChyZXN1bHQ6IHsgcm93czogKFBnRm9yZWlnbiAmIHsgdGFibGVfbmFtZTogc3RyaW5nIH0pW10gfSkgPT4gcmVzdWx0LnJvd3MpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgdGFibGVzID0gbmV3IE1hcDxzdHJpbmcsIFRhYmxlU2NoZW1hUm93cz4oKTtcbiAgICBjb25zdCBlbnN1cmUgPSAodGFibGU6IHN0cmluZyk6IFRhYmxlU2NoZW1hUm93cyA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRhYmxlcy5nZXQodGFibGUpO1xuICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuICAgICAgY29uc3QgY3JlYXRlZDogVGFibGVTY2hlbWFSb3dzID0geyBjb2x1bW5zOiBbXSwgaW5kZXhlczogW10sIGZvcmVpZ25zOiBbXSB9O1xuICAgICAgdGFibGVzLnNldCh0YWJsZSwgY3JlYXRlZCk7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9O1xuXG4gICAgLy8g7Lus65+87J20IOyXhuuKlCDthYzsnbTruJTsnYAg7KG07J6s7ZWY7KeAIOyViuuKlCDqsoPsnLzroZwg7Leo6riJ7ZWY66+A66GcIOy7rOufvCDquLDspIDsnLzroZwg7ZWt66qp7J2EIOunjOuTreuLiOuLpC5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBjb2x1bW5Sb3dzKSB7XG4gICAgICBlbnN1cmUocm93LnRhYmxlX25hbWUpLmNvbHVtbnMucHVzaChyb3cpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBpbmRleFJvd3MpIHtcbiAgICAgIHRhYmxlcy5nZXQocm93LnRhYmxlX25hbWUpPy5pbmRleGVzLnB1c2gocm93KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByb3cgb2YgZm9yZWlnblJvd3MpIHtcbiAgICAgIHRhYmxlcy5nZXQocm93LnRhYmxlX25hbWUpPy5mb3JlaWducy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlcztcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZU1pZ3JhdGlvbkluZGV4VHlwZShcbiAgICBpbmRleDogUGljazxQZ0luZGV4LCBcImlzX3VuaXF1ZVwiIHwgXCJpbmRleF90eXBlXCI+LFxuICAgIGFjY2Vzc01ldGhvZD86IHN0cmluZyxcbiAgKTogTWlncmF0aW9uSW5kZXhbXCJ0eXBlXCJdIHtcbiAgICBjb25zdCByZXNvbHZlZEFjY2Vzc01ldGhvZCA9IChhY2Nlc3NNZXRob2QgPz8gaW5kZXguaW5kZXhfdHlwZSkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChyZXNvbHZlZEFjY2Vzc01ldGhvZCA9PT0gXCJobnN3XCIgfHwgcmVzb2x2ZWRBY2Nlc3NNZXRob2QgPT09IFwiaXZmZmxhdFwiKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRBY2Nlc3NNZXRob2Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4LmlzX3VuaXF1ZSA/IFwidW5pcXVlXCIgOiBcImluZGV4XCI7XG4gIH1cblxuICBwcml2YXRlIHJlc3RvcmVHZW5lcmljVXNpbmcoXG4gICAgYWNjZXNzTWV0aG9kOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IE1pZ3JhdGlvbkluZGV4W1widXNpbmdcIl0gfCB1bmRlZmluZWQge1xuICAgIGlmICghYWNjZXNzTWV0aG9kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBhY2Nlc3NNZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXRoaXMuZ2VuZXJpY0luZGV4VHlwZXMuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIG5vcm1hbGl6ZWQgYXMgTWlncmF0aW9uSW5kZXhbXCJ1c2luZ1wiXTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWZWN0b3JJbmRleE9wdGlvbnMoXG4gICAgdHlwZTogTWlncmF0aW9uSW5kZXhbXCJ0eXBlXCJdLFxuICAgIHdpdGhPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBQaWNrPE1pZ3JhdGlvbkluZGV4LCBcIm1cIiB8IFwiZWZDb25zdHJ1Y3Rpb25cIiB8IFwibGlzdHNcIj4ge1xuICAgIGlmICh0eXBlID09PSBcImhuc3dcIikge1xuICAgICAgY29uc3Qgb3B0aW9uczogUGljazxNaWdyYXRpb25JbmRleCwgXCJtXCIgfCBcImVmQ29uc3RydWN0aW9uXCI+ID0ge307XG4gICAgICBjb25zdCBtID0gdGhpcy5wYXJzZUludGVnZXJPcHRpb24od2l0aE9wdGlvbnMubSk7XG4gICAgICBjb25zdCBlZkNvbnN0cnVjdGlvbiA9IHRoaXMucGFyc2VJbnRlZ2VyT3B0aW9uKHdpdGhPcHRpb25zLmVmX2NvbnN0cnVjdGlvbik7XG4gICAgICBpZiAobSAhPT0gdW5kZWZpbmVkKSBvcHRpb25zLm0gPSBtO1xuICAgICAgaWYgKGVmQ29uc3RydWN0aW9uICE9PSB1bmRlZmluZWQpIG9wdGlvbnMuZWZDb25zdHJ1Y3Rpb24gPSBlZkNvbnN0cnVjdGlvbjtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VJbnRlZ2VyT3B0aW9uKHdpdGhPcHRpb25zLmxpc3RzKSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBsaXN0czogdGhpcy5wYXJzZUludGVnZXJPcHRpb24od2l0aE9wdGlvbnMubGlzdHMpIH1cbiAgICAgICAgOiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW50ZWdlck9wdGlvbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4ocGFyc2VkKSA/IHVuZGVmaW5lZCA6IHBhcnNlZDtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEluZGV4Q29sdW1uT3BjbGFzcyhjb2x1bW5EZWZpbml0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghY29sdW1uRGVmaW5pdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkID0gY29sdW1uRGVmaW5pdGlvblxuICAgICAgLnJlcGxhY2UoL1xccytOVUxMU1xccysoRklSU1R8TEFTVClcXHMqJC9pLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoL1xccysoQVNDfERFU0MpXFxzKiQvaSwgXCJcIilcbiAgICAgIC50cmltKCk7XG4gICAgY29uc3QgdG9rZW5zID0gdGhpcy50b2tlbml6ZVRvcExldmVsKHRyaW1tZWQpO1xuXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdPy50b1VwcGVyQ2FzZSgpID09PSBcIkNPTExBVEVcIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW5zLmF0KC0xKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbmRleERlZmluaXRpb24oaW5kZXhEZWZpbml0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY2Nlc3NNZXRob2QgPSBpbmRleERlZmluaXRpb24ubWF0Y2goL1xcYlVTSU5HXFxzKyhbYS16X11bXFx3XSopL2kpPy5bMV0/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdXNpbmdNYXRjaEluZGV4ID0gaW5kZXhEZWZpbml0aW9uLnNlYXJjaCgvXFxiVVNJTkdcXGIvaSk7XG4gICAgY29uc3QgY29sdW1uc1N0YXJ0ID0gdXNpbmdNYXRjaEluZGV4ID49IDAgPyBpbmRleERlZmluaXRpb24uaW5kZXhPZihcIihcIiwgdXNpbmdNYXRjaEluZGV4KSA6IC0xO1xuICAgIGNvbnN0IGNvbHVtbnNFbmQgPVxuICAgICAgY29sdW1uc1N0YXJ0ID49IDAgPyB0aGlzLmZpbmRNYXRjaGluZ1BhcmVudGhlc2lzKGluZGV4RGVmaW5pdGlvbiwgY29sdW1uc1N0YXJ0KSA6IC0xO1xuICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb25zID1cbiAgICAgIGNvbHVtbnNTdGFydCA+PSAwICYmIGNvbHVtbnNFbmQgPiBjb2x1bW5zU3RhcnRcbiAgICAgICAgPyB0aGlzLnNwbGl0VG9wTGV2ZWwoaW5kZXhEZWZpbml0aW9uLnNsaWNlKGNvbHVtbnNTdGFydCArIDEsIGNvbHVtbnNFbmQpLCBcIixcIilcbiAgICAgICAgOiBbXTtcblxuICAgIGNvbnN0IHdpdGhNYXRjaCA9IC9cXGJXSVRIXFxzKlxcKC9pLmV4ZWMoaW5kZXhEZWZpbml0aW9uKTtcbiAgICBjb25zdCB3aXRoU3RhcnQgPSB3aXRoTWF0Y2ggPyBpbmRleERlZmluaXRpb24uaW5kZXhPZihcIihcIiwgd2l0aE1hdGNoLmluZGV4KSA6IC0xO1xuICAgIGNvbnN0IHdpdGhFbmQgPSB3aXRoU3RhcnQgPj0gMCA/IHRoaXMuZmluZE1hdGNoaW5nUGFyZW50aGVzaXMoaW5kZXhEZWZpbml0aW9uLCB3aXRoU3RhcnQpIDogLTE7XG4gICAgY29uc3Qgd2l0aE9wdGlvbnMgPVxuICAgICAgd2l0aFN0YXJ0ID49IDAgJiYgd2l0aEVuZCA+IHdpdGhTdGFydFxuICAgICAgICA/IHRoaXMucGFyc2VJbmRleE9wdGlvbkVudHJpZXMoaW5kZXhEZWZpbml0aW9uLnNsaWNlKHdpdGhTdGFydCArIDEsIHdpdGhFbmQpKVxuICAgICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc01ldGhvZCxcbiAgICAgIGNvbHVtbkRlZmluaXRpb25zLFxuICAgICAgd2l0aE9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbmRleE9wdGlvbkVudHJpZXMob3B0aW9uU291cmNlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zcGxpdFRvcExldmVsKG9wdGlvblNvdXJjZSwgXCIsXCIpLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigocmVzdWx0LCBlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IGVudHJ5LnRyaW0oKS5tYXRjaCgvXihbYS16X11bXFx3XSopXFxzKj1cXHMqKC4rKSQvaSk7XG4gICAgICBpZiAoIW1hdGNoZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgWywga2V5LCByYXdWYWx1ZV0gPSBtYXRjaGVkO1xuICAgICAgcmVzdWx0W2tleS50b0xvd2VyQ2FzZSgpXSA9IHJhd1ZhbHVlLnRyaW0oKS5yZXBsYWNlKC9eWydcIl18WydcIl0kL2csIFwiXCIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIHNwbGl0VG9wTGV2ZWwoc291cmNlOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGl0ZW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgbGV0IHBhcmVuRGVwdGggPSAwO1xuICAgIGxldCBicmFja2V0RGVwdGggPSAwO1xuICAgIGxldCBpblNpbmdsZVF1b3RlID0gZmFsc2U7XG4gICAgbGV0IGluRG91YmxlUXVvdGUgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2UubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBjaGFyID0gc291cmNlW2luZGV4XTtcbiAgICAgIGNvbnN0IG5leHRDaGFyID0gc291cmNlW2luZGV4ICsgMV07XG5cbiAgICAgIGlmIChjaGFyID09PSBcIidcIiAmJiAhaW5Eb3VibGVRdW90ZSkge1xuICAgICAgICBpZiAoaW5TaW5nbGVRdW90ZSAmJiBuZXh0Q2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluU2luZ2xlUXVvdGUgPSAhaW5TaW5nbGVRdW90ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyID09PSAnXCInICYmICFpblNpbmdsZVF1b3RlKSB7XG4gICAgICAgIGlmIChpbkRvdWJsZVF1b3RlICYmIG5leHRDaGFyID09PSAnXCInKSB7XG4gICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpbkRvdWJsZVF1b3RlID0gIWluRG91YmxlUXVvdGU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5TaW5nbGVRdW90ZSB8fCBpbkRvdWJsZVF1b3RlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhciA9PT0gXCIoXCIpIHtcbiAgICAgICAgcGFyZW5EZXB0aCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFyID09PSBcIilcIikge1xuICAgICAgICBwYXJlbkRlcHRoIC09IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXIgPT09IFwiW1wiKSB7XG4gICAgICAgIGJyYWNrZXREZXB0aCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFyID09PSBcIl1cIikge1xuICAgICAgICBicmFja2V0RGVwdGggLT0gMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyID09PSBkZWxpbWl0ZXIgJiYgcGFyZW5EZXB0aCA9PT0gMCAmJiBicmFja2V0RGVwdGggPT09IDApIHtcbiAgICAgICAgaXRlbXMucHVzaChzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KS50cmltKCkpO1xuICAgICAgICBzdGFydCA9IGluZGV4ICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0YWlsID0gc291cmNlLnNsaWNlKHN0YXJ0KS50cmltKCk7XG4gICAgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbXMucHVzaCh0YWlsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuaXplVG9wTGV2ZWwoc291cmNlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBzdGFydCA9IC0xO1xuICAgIGxldCBwYXJlbkRlcHRoID0gMDtcbiAgICBsZXQgYnJhY2tldERlcHRoID0gMDtcbiAgICBsZXQgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICAgIGxldCBpbkRvdWJsZVF1b3RlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwdXNoVG9rZW4gPSAoZW5kSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gc291cmNlLnNsaWNlKHN0YXJ0LCBlbmRJbmRleCkudHJpbSgpO1xuICAgICAgaWYgKHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAtMTtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBzb3VyY2VbaW5kZXggKyAxXTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiJ1wiICYmICFpbkRvdWJsZVF1b3RlKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICBzdGFydCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpblNpbmdsZVF1b3RlICYmIG5leHRDaGFyID09PSBcIidcIikge1xuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5TaW5nbGVRdW90ZSA9ICFpblNpbmdsZVF1b3RlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09ICdcIicgJiYgIWluU2luZ2xlUXVvdGUpIHtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluRG91YmxlUXVvdGUgJiYgbmV4dENoYXIgPT09ICdcIicpIHtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluRG91YmxlUXVvdGUgPSAhaW5Eb3VibGVRdW90ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5TaW5nbGVRdW90ZSAmJiAhaW5Eb3VibGVRdW90ZSkge1xuICAgICAgICBpZiAoY2hhciA9PT0gXCIoXCIpIHtcbiAgICAgICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgICAgICBzdGFydCA9IGluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbkRlcHRoICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09IFwiKVwiKSB7XG4gICAgICAgICAgcGFyZW5EZXB0aCAtPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIltcIikge1xuICAgICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyYWNrZXREZXB0aCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIl1cIikge1xuICAgICAgICAgIGJyYWNrZXREZXB0aCAtPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKC9cXHMvLnRlc3QoY2hhcikgJiYgcGFyZW5EZXB0aCA9PT0gMCAmJiBicmFja2V0RGVwdGggPT09IDApIHtcbiAgICAgICAgICBwdXNoVG9rZW4oaW5kZXgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoVG9rZW4oc291cmNlLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHByaXZhdGUgZmluZE1hdGNoaW5nUGFyZW50aGVzaXMoc291cmNlOiBzdHJpbmcsIG9wZW5JbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIGxldCBpblNpbmdsZVF1b3RlID0gZmFsc2U7XG4gICAgbGV0IGluRG91YmxlUXVvdGUgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gb3BlbkluZGV4OyBpbmRleCA8IHNvdXJjZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBzb3VyY2VbaW5kZXggKyAxXTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiJ1wiICYmICFpbkRvdWJsZVF1b3RlKSB7XG4gICAgICAgIGlmIChpblNpbmdsZVF1b3RlICYmIG5leHRDaGFyID09PSBcIidcIikge1xuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5TaW5nbGVRdW90ZSA9ICFpblNpbmdsZVF1b3RlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09ICdcIicgJiYgIWluU2luZ2xlUXVvdGUpIHtcbiAgICAgICAgaWYgKGluRG91YmxlUXVvdGUgJiYgbmV4dENoYXIgPT09ICdcIicpIHtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluRG91YmxlUXVvdGUgPSAhaW5Eb3VibGVRdW90ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpblNpbmdsZVF1b3RlIHx8IGluRG91YmxlUXVvdGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyID09PSBcIihcIikge1xuICAgICAgICBkZXB0aCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09IFwiKVwiKSB7XG4gICAgICAgIGRlcHRoIC09IDE7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtirnsoJUg7YWM7J2067iU7J2YIFBL66W8IOywuOyhsO2VmOuKlCDri6Trpbgg7YWM7J2067iU7J2YIEZLIOuqqeuhneydhCDsobDtmoztlanri4jri6QuXG4gICAqIFBLIO2DgOyehSDrs4Dqsr0g7IucIOq0gOugqCBGSyDsoJzslb3sobDqsbTsnYQg7IKt7KCcL+uzteq1rO2VmOq4sCDsnITtlbQg7IKs7Jqp65Cp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZ2V0UmVmZXJlbmNpbmdGb3JlaWduS2V5cyhkYjogS25leCwgdGFibGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFJlZmVyZW5jaW5nRm9yZWlnbktleVtdPiB7XG4gICAgY29uc3QgcXVlcnkgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgdGMudGFibGVfbmFtZSxcbiAgICAgICAgdGMuY29uc3RyYWludF9uYW1lLFxuICAgICAgICBrY3UuY29sdW1uX25hbWUsXG4gICAgICAgIGNjdS50YWJsZV9uYW1lIEFTIHJlZmVyZW5jZWRfdGFibGVfbmFtZSxcbiAgICAgICAgY2N1LmNvbHVtbl9uYW1lIEFTIHJlZmVyZW5jZWRfY29sdW1uX25hbWUsXG4gICAgICAgIHJjLnVwZGF0ZV9ydWxlLFxuICAgICAgICByYy5kZWxldGVfcnVsZVxuICAgICAgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVfY29uc3RyYWludHMgQVMgdGNcbiAgICAgIEpPSU4gaW5mb3JtYXRpb25fc2NoZW1hLmtleV9jb2x1bW5fdXNhZ2UgQVMga2N1XG4gICAgICAgIE9OIHRjLmNvbnN0cmFpbnRfbmFtZSA9IGtjdS5jb25zdHJhaW50X25hbWVcbiAgICAgICAgQU5EIHRjLnRhYmxlX3NjaGVtYSA9IGtjdS50YWJsZV9zY2hlbWFcbiAgICAgIEpPSU4gaW5mb3JtYXRpb25fc2NoZW1hLmNvbnN0cmFpbnRfY29sdW1uX3VzYWdlIEFTIGNjdVxuICAgICAgICBPTiBjY3UuY29uc3RyYWludF9uYW1lID0gdGMuY29uc3RyYWludF9uYW1lXG4gICAgICAgIEFORCBjY3UudGFibGVfc2NoZW1hID0gdGMudGFibGVfc2NoZW1hXG4gICAgICBKT0lOIGluZm9ybWF0aW9uX3NjaGVtYS5yZWZlcmVudGlhbF9jb25zdHJhaW50cyBBUyByY1xuICAgICAgICBPTiByYy5jb25zdHJhaW50X25hbWUgPSB0Yy5jb25zdHJhaW50X25hbWVcbiAgICAgICAgQU5EIHJjLmNvbnN0cmFpbnRfc2NoZW1hID0gdGMudGFibGVfc2NoZW1hXG4gICAgICBXSEVSRSB0Yy5jb25zdHJhaW50X3R5cGUgPSAnRk9SRUlHTiBLRVknXG4gICAgICAgIEFORCBjY3UudGFibGVfbmFtZSA9ID9cbiAgICAgICAgQU5EIHRjLnRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnXG4gICAgYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiLnJhdyhxdWVyeSwgW3RhYmxlTmFtZV0pO1xuICAgIHJldHVybiByZXN1bHQucm93cy5tYXAoXG4gICAgICAocm93OiB7XG4gICAgICAgIHRhYmxlX25hbWU6IHN0cmluZztcbiAgICAgICAgY29uc3RyYWludF9uYW1lOiBzdHJpbmc7XG4gICAgICAgIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlZmVyZW5jZWRfdGFibGVfbmFtZTogc3RyaW5nO1xuICAgICAgICByZWZlcmVuY2VkX2NvbHVtbl9uYW1lOiBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZV9ydWxlOiBzdHJpbmc7XG4gICAgICAgIGRlbGV0ZV9ydWxlOiBzdHJpbmc7XG4gICAgICB9KSA9PiAoe1xuICAgICAgICB0YWJsZU5hbWU6IHJvdy50YWJsZV9uYW1lLFxuICAgICAgICBjb25zdHJhaW50TmFtZTogcm93LmNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgY29sdW1uTmFtZTogcm93LmNvbHVtbl9uYW1lLFxuICAgICAgICByZWZlcmVuY2VkVGFibGVOYW1lOiByb3cucmVmZXJlbmNlZF90YWJsZV9uYW1lLFxuICAgICAgICByZWZlcmVuY2VkQ29sdW1uTmFtZTogcm93LnJlZmVyZW5jZWRfY29sdW1uX25hbWUsXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLm1hcENvbnN0cmFpbnRBY3Rpb24ocm93LnVwZGF0ZV9ydWxlKSxcbiAgICAgICAgb25EZWxldGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihyb3cuZGVsZXRlX3J1bGUpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB2ZWN0b3Ig7Lus65+87J2YIGRpbWVuc2lvbnPrpbwg7KGw7ZqM7ZWp64uI64ukLlxuICAgKiBwZ19hdHRyaWJ1dGXsnZggYXR0dHlwbW9k7JeQ7IScIOywqOybkCDsiJjrpbwg7LaU7Lac7ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRWZWN0b3JEaW1lbnNpb25zKFxuICAgIGNvbXBhcmVEQjogUmF3Q2FwYWJsZUtuZXgsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zQWxsKGNvbXBhcmVEQiwgdGFibGVOYW1lKSkuZ2V0KHRhYmxlTmFtZSkgPz8ge307XG4gIH1cblxuICAvKipcbiAgICogdmVjdG9yIOy7rOufvOydmCBkaW1lbnNpb25z66W8IO2FjOydtOu4lOuzhOuhnCDsobDtmoztlanri4jri6QuXG4gICAqIHRhYmxlTmFtZeydhCDsg53rnrXtlZjrqbQgcHVibGljIOyKpO2CpOuniCDsoITssrTrpbwg7ZWcIOuyiOyXkCDsobDtmoztlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFZlY3RvckRpbWVuc2lvbnNBbGwoXG4gICAgY29tcGFyZURCOiBSYXdDYXBhYmxlS25leCxcbiAgICB0YWJsZU5hbWU/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8TWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgbnVtYmVyPj4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICBjLnJlbG5hbWUgYXMgdGFibGVfbmFtZSxcbiAgICAgICAgYS5hdHRuYW1lIGFzIGNvbHVtbl9uYW1lLFxuICAgICAgICBhLmF0dHR5cG1vZCBhcyBkaW1lbnNpb25zXG4gICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBhXG4gICAgICBKT0lOIHBnX2NsYXNzIGMgT04gYS5hdHRyZWxpZCA9IGMub2lkXG4gICAgICBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2VcbiAgICAgIEpPSU4gcGdfdHlwZSB0IE9OIGEuYXR0dHlwaWQgPSB0Lm9pZFxuICAgICAgV0hFUkUgdC50eXBuYW1lID0gJ3ZlY3RvcidcbiAgICAgICAgQU5EIGEuYXR0bnVtID4gMFxuICAgICAgICBBTkQgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgJHt0YWJsZU5hbWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIkFORCBjLnJlbG5hbWUgPSA/XCJ9XG4gICAgYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb21wYXJlREIucmF3KHF1ZXJ5LCB0YWJsZU5hbWUgPT09IHVuZGVmaW5lZCA/IFtdIDogW3RhYmxlTmFtZV0pO1xuXG4gICAgY29uc3QgZGltZW5zaW9uc0J5VGFibGUgPSBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByZXN1bHQucm93cykge1xuICAgICAgY29uc3QgZGltZW5zaW9ucyA9IGRpbWVuc2lvbnNCeVRhYmxlLmdldChyb3cudGFibGVfbmFtZSkgPz8ge307XG4gICAgICAvLyBhdHR0eXBtb2Tsl5DshJwg7Iuk7KCcIGRpbWVuc2lvbnMg6rCSIOy2lOy2nFxuICAgICAgZGltZW5zaW9uc1tyb3cuY29sdW1uX25hbWVdID0gcm93LmRpbWVuc2lvbnMgPiAwID8gcm93LmRpbWVuc2lvbnMgOiAwO1xuICAgICAgZGltZW5zaW9uc0J5VGFibGUuc2V0KHJvdy50YWJsZV9uYW1lLCBkaW1lbnNpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpbWVuc2lvbnNCeVRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc3RncmVTUUwg7Lus65+8IO2DgOyeheydhCDrtoTshJ3tlZjsl6wgTWlncmF0aW9uQ29sdW1uIOqwneyytOuhnCDrs4DtmZjtlanri4jri6QuXG4gICAqL1xuICByZXNvbHZlREJDb2xUeXBlKFxuICAgIGRiQ29sdW1uOiBQZ0NvbHVtbixcbiAgKTogUGljazxcbiAgICBNaWdyYXRpb25Db2x1bW4sXG4gICAgXCJ0eXBlXCIgfCBcImxlbmd0aFwiIHwgXCJwcmVjaXNpb25cIiB8IFwic2NhbGVcIiB8IFwibnVtYmVyVHlwZVwiIHwgXCJkaW1lbnNpb25zXCJcbiAgPiB7XG4gICAgY29uc3QgeyB1ZHRfbmFtZTogX3VkdF9uYW1lLCBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsIHByZWNpc2lvbiwgbnVtZXJpY19zY2FsZSB9ID0gZGJDb2x1bW47XG5cbiAgICBjb25zdCB7IHVkdF9uYW1lLCBzaW5nbGVPckFycmF5IH0gPSAoKCkgPT4ge1xuICAgICAgaWYgKF91ZHRfbmFtZS5zdGFydHNXaXRoKFwiX1wiKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVkdF9uYW1lOiBfdWR0X25hbWUuc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIHNpbmdsZU9yQXJyYXk6IFwiW11cIiBhcyBjb25zdCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVkdF9uYW1lOiBfdWR0X25hbWUsXG4gICAgICAgIHNpbmdsZU9yQXJyYXk6IFwiXCIgYXMgY29uc3QsXG4gICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICAvLyBVVUlEXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInV1aWRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYHV1aWQke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIEludGVnZXIgdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwiaW50NFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgaW50ZWdlciR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJpbnQ4XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBiaWdJbnRlZ2VyJHtzaW5nbGVPckFycmF5fWAgfTtcbiAgICB9XG5cbiAgICAvLyBTdHJpbmcgdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwidmFyY2hhclwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBgc3RyaW5nJHtzaW5nbGVPckFycmF5fWAsXG4gICAgICAgIC4uLihjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGggJiYge1xuICAgICAgICAgIGxlbmd0aDogY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBzdHJpbmcke3NpbmdsZU9yQXJyYXl9YCB9OyAvLyBTdHJpbmdQcm9wIHdpdGhvdXQgbGVuZ3RoXG4gICAgfVxuXG4gICAgLy8gTnVtYmVyT3JOdW1lcmljIHR5cGVzXG4gICAgaWYgKHVkdF9uYW1lID09PSBcIm51bWVyaWNcIikge1xuICAgICAgY29uc3QgbnVtZXJpY01ldGFkYXRhID1cbiAgICAgICAgZGVjb2RlTnVtZXJpY1R5cGVNb2RpZmllcihkYkNvbHVtbi5hdHR0eXBtb2QpID8/XG4gICAgICAgIChwcmVjaXNpb24gIT09IG51bGwgJiYgbnVtZXJpY19zY2FsZSAhPT0gbnVsbCA/IHsgcHJlY2lzaW9uLCBzY2FsZTogbnVtZXJpY19zY2FsZSB9IDoge30pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLFxuICAgICAgICBudW1iZXJUeXBlOiBcIm51bWVyaWNcIixcbiAgICAgICAgLi4ubnVtZXJpY01ldGFkYXRhLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcImZsb2F0NFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgbnVtYmVyT3JOdW1lcmljJHtzaW5nbGVPckFycmF5fWAsIG51bWJlclR5cGU6IFwicmVhbFwiIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJmbG9hdDhcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLCBudW1iZXJUeXBlOiBcImRvdWJsZSBwcmVjaXNpb25cIiB9O1xuICAgIH1cblxuICAgIC8vIEJvb2xlYW5cbiAgICBpZiAodWR0X25hbWUgPT09IFwiYm9vbFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgYm9vbGVhbiR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuXG4gICAgLy8gVGltZXN0YW1weiB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ0aW1lc3RhbXB0elwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBgZGF0ZSR7c2luZ2xlT3JBcnJheX1gLFxuICAgICAgICAuLi4ocHJlY2lzaW9uICE9PSBudWxsICYmIHtcbiAgICAgICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgICAgfSksXG4gICAgICB9OyAvLyBEYXRlUHJvcCDihpIgdGltZXN0YW1wdHpcbiAgICB9XG5cbiAgICAvLyBKU09OXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImpzb25cIiB8fCB1ZHRfbmFtZSA9PT0gXCJqc29uYlwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImpzb25cIiB9O1xuICAgIH1cblxuICAgIC8vIFZlY3RvciAocGd2ZWN0b3IpXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInZlY3RvclwiKSB7XG4gICAgICAvLyB2ZWN0b3Ig7YOA7J6F7J2YIOywqOybkCDsiJjripQgY29sdW1uX2RlZmF1bHTrgpgg67OE64+EIOy/vOumrOuhnCDtmZXsnbjtlbTslbwg7ZWoXG4gICAgICAvLyDtmITsnqzripQg6riw67O46rCSIDDsnLzroZwg7ISk7KCVICjsi6TsoJwgZGltZW5zaW9uc+uKlCBnZXRNaWdyYXRpb25TZXRGcm9tRELsl5DshJwg67OE64+EIOy/vOumrOuhnCDtmZXsnbgpXG4gICAgICByZXR1cm4geyB0eXBlOiBgdmVjdG9yJHtzaW5nbGVPckFycmF5fWAsIGRpbWVuc2lvbnM6IDAgfTtcbiAgICB9XG5cbiAgICAvLyB0c3ZlY3RvciAoUG9zdGdyZVNRTCDsoITrrLgg6rKA7IOJ7JqpIO2DgOyehSlcbiAgICBpZiAodWR0X25hbWUgPT09IFwidHN2ZWN0b3JcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0c3ZlY3RvclwiIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgOuKpe2VnCBQb3N0Z3JlU1FMIOy7rOufvCDtg4DsnoU6ICR7dWR0X25hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgPSBuZXcgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUErRUEsU0FBUywwQkFDUCxjQUNxRDtDQUNyRCxJQUFJLGlCQUFpQixVQUFhLGlCQUFpQixRQUFRLGVBQWUsR0FDeEUsT0FBTztDQUlULE1BQU0sV0FBVyxlQUFlO0NBQ2hDLE1BQU0sWUFBWSxhQUFhO0NBQy9CLE1BQU0sZ0JBQWdCLFdBQVc7Q0FFakMsT0FBTztFQUFFO0VBQVcsT0FETixpQkFBaUIsT0FBTyxnQkFBZ0IsT0FBTztDQUNuQztBQUM1Qjs7O0NBRU0sOEJBQU4sTUFBa0M7RUFDaEMsb0NBQXFDLElBQUksSUFBSTtHQUFDO0dBQVM7R0FBUTtHQUFPO0dBQVE7RUFBVSxDQUFDOzs7Ozs7O0VBUXpGLE1BQU0sc0JBQ0osV0FDQSxPQUM4QjtHQUM5QixJQUFJLFdBQXVCLFdBQXNCO0dBQ2pELElBQUk7SUFDRixDQUFDLFdBQVcsV0FBVyxjQUFjLE1BQU0sS0FBSyxVQUFVLFdBQVcsS0FBSztHQUM1RSxTQUFTLEdBQVk7SUFDbkIsSUFBSSxhQUFhLFNBQVMsRUFBRSxRQUFRLFNBQVMsaUJBQWlCLEdBQzVE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
|
|
675
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgZ3JvdXAgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQge1xuICB0eXBlIE1pZ3JhdGlvbkNvbHVtbixcbiAgdHlwZSBNaWdyYXRpb25Gb3JlaWduLFxuICB0eXBlIE1pZ3JhdGlvbkluZGV4LFxuICB0eXBlIE1pZ3JhdGlvblNldCxcbiAgdHlwZSBSZWxhdGlvbk9uLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuLyoqXG4gKiDtirnsoJUg7YWM7J2067iU7J2YIFBL66W8IOywuOyhsO2VmOuKlCDri6Trpbgg7YWM7J2067iU7J2YIEZLIOygleuztOyeheuLiOuLpC5cbiAqIFBLIO2DgOyehSDrs4Dqsr0g7IucIOq0gOugqCBGSyDsoJzslb3sobDqsbTsnYQg7LKY66as7ZWY6riwIOychO2VtCDsgqzsmqnrkKnri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFJlZmVyZW5jaW5nRm9yZWlnbktleSA9IHtcbiAgLyoqIEZL6rCAIOygleydmOuQnCDthYzsnbTruJTrqoUgKi9cbiAgdGFibGVOYW1lOiBzdHJpbmc7XG4gIC8qKiBGSyDsoJzslb3sobDqsbQg7J2066aEICovXG4gIGNvbnN0cmFpbnROYW1lOiBzdHJpbmc7XG4gIC8qKiBGSyDsu6zrn7zrqoUgKi9cbiAgY29sdW1uTmFtZTogc3RyaW5nO1xuICAvKiog7LC47KGw7ZWY64qUIO2FjOydtOu4lOuqhSAoUEvqsIAg7J6I64qUIO2FjOydtOu4lCkgKi9cbiAgcmVmZXJlbmNlZFRhYmxlTmFtZTogc3RyaW5nO1xuICAvKiog7LC47KGw7ZWY64qUIOy7rOufvOuqhSAo67O07Ya1ICdpZCcpICovXG4gIHJlZmVyZW5jZWRDb2x1bW5OYW1lOiBzdHJpbmc7XG4gIC8qKiBPTiBVUERBVEUg7JWh7IWYICovXG4gIG9uVXBkYXRlOiBSZWxhdGlvbk9uO1xuICAvKiogT04gREVMRVRFIOyVoeyFmCAqL1xuICBvbkRlbGV0ZTogUmVsYXRpb25Pbjtcbn07XG5cbmV4cG9ydCB0eXBlIFBnQ29sdW1uID0ge1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBkYXRhX3R5cGU6IHN0cmluZztcbiAgdWR0X25hbWU6IHN0cmluZztcbiAgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoOiBudW1iZXIgfCBudWxsO1xuICBwcmVjaXNpb246IG51bWJlciB8IG51bGw7XG4gIG51bWVyaWNfc2NhbGU6IG51bWJlciB8IG51bGw7XG4gIGF0dHR5cG1vZD86IG51bWJlciB8IG51bGw7XG4gIGlzX251bGxhYmxlOiBzdHJpbmc7XG4gIGNvbHVtbl9kZWZhdWx0OiBzdHJpbmcgfCBudWxsO1xuICBpc19nZW5lcmF0ZWQ6IHN0cmluZzsgLy8gJ3MnID0gU1RPUkVELCAndicgPSBWSVJUVUFMLCAnJyA9IG5vbmVcbiAgZ2VuZXJhdGlvbl9leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBQZ0luZGV4ID0ge1xuICBpbmRleF9uYW1lOiBzdHJpbmc7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGlzX3VuaXF1ZTogYm9vbGVhbjtcbiAgaXNfcHJpbWFyeTogYm9vbGVhbjtcbiAgaW5kZXhfdHlwZTogc3RyaW5nO1xuICBudWxsc19maXJzdDogYm9vbGVhbjtcbiAgc29ydF9vcmRlcjogXCJBU0NcIiB8IFwiREVTQ1wiO1xuICBudWxsc19ub3RfZGlzdGluY3Q6IGJvb2xlYW47XG4gIGNvbHVtbl9vcmRlcjogbnVtYmVyO1xuICBpbmRleF9kZWZpbml0aW9uOiBzdHJpbmc7XG4gIHByZWRpY2F0ZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIFBnRm9yZWlnbiA9IHtcbiAgY29uc3RyYWludF9uYW1lOiBzdHJpbmc7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGZvcmVpZ25fdGFibGVfbmFtZTogc3RyaW5nO1xuICBmb3JlaWduX2NvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIHVwZGF0ZV9ydWxlOiBzdHJpbmc7XG4gIGRlbGV0ZV9ydWxlOiBzdHJpbmc7XG59O1xuXG50eXBlIFRhYmxlU2NoZW1hUm93cyA9IHtcbiAgY29sdW1uczogUGdDb2x1bW5bXTtcbiAgaW5kZXhlczogUGdJbmRleFtdO1xuICBmb3JlaWduczogUGdGb3JlaWduW107XG59O1xuXG50eXBlIFJhd0NhcGFibGVLbmV4ID0gUGljazxLbmV4LCBcInJhd1wiPjtcblxuZnVuY3Rpb24gZGVjb2RlTnVtZXJpY1R5cGVNb2RpZmllcihcbiAgdHlwZU1vZGlmaWVyOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogUGljazxNaWdyYXRpb25Db2x1bW4sIFwicHJlY2lzaW9uXCIgfCBcInNjYWxlXCI+IHwgbnVsbCB7XG4gIGlmICh0eXBlTW9kaWZpZXIgPT09IHVuZGVmaW5lZCB8fCB0eXBlTW9kaWZpZXIgPT09IG51bGwgfHwgdHlwZU1vZGlmaWVyIDwgNCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gaW5mb3JtYXRpb25fc2NoZW1h6rCAIOyeg+uKlCDrsLDsl7QgdHlwbW9k7JmAIOydjOyImCBzY2FsZeydhCBQb3N0Z3JlU1FMIOuCtOu2gCDtkZztmITsl5DshJwg67O17JuQ7ZWc64ukLlxuICBjb25zdCBtb2RpZmllciA9IHR5cGVNb2RpZmllciAtIDQ7XG4gIGNvbnN0IHByZWNpc2lvbiA9IG1vZGlmaWVyID4+PiAxNjtcbiAgY29uc3QgdW5zaWduZWRTY2FsZSA9IG1vZGlmaWVyICYgMHg3ZmY7XG4gIGNvbnN0IHNjYWxlID0gdW5zaWduZWRTY2FsZSA+PSAxMDI0ID8gdW5zaWduZWRTY2FsZSAtIDIwNDggOiB1bnNpZ25lZFNjYWxlO1xuICByZXR1cm4geyBwcmVjaXNpb24sIHNjYWxlIH07XG59XG5cbmNsYXNzIFBvc3RncmVTUUxTY2hlbWFSZWFkZXJDbGFzcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJpY0luZGV4VHlwZXMgPSBuZXcgU2V0KFtcImJ0cmVlXCIsIFwiaGFzaFwiLCBcImdpblwiLCBcImdpc3RcIiwgXCJwZ3Jvb25nYVwiXSk7XG5cbiAgLyoqXG4gICAqIERC7JeQ7IScIO2FjOydtOu4lCDsoJXrs7Trpbwg7J297Ja07IScIE1pZ3JhdGlvblNldOydhCDrp4zrk6TslrTsmLXri4jri6QuXG4gICAqIEBwYXJhbSBjb21wYXJlREIgS25leCDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIHRhYmxlIO2FjOydtOu4lCDsnbTrpoRcbiAgICogQHJldHVybnMgTWlncmF0aW9uU2V0IOqwneyytFxuICAgKi9cbiAgYXN5bmMgZ2V0TWlncmF0aW9uU2V0RnJvbURCKFxuICAgIGNvbXBhcmVEQjogUmF3Q2FwYWJsZUtuZXgsXG4gICAgdGFibGU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxNaWdyYXRpb25TZXQgfCBudWxsPiB7XG4gICAgbGV0IGRiQ29sdW1uczogUGdDb2x1bW5bXSwgZGJJbmRleGVzOiBQZ0luZGV4W10sIGRiRm9yZWlnbnM6IFBnRm9yZWlnbltdO1xuICAgIHRyeSB7XG4gICAgICBbZGJDb2x1bW5zLCBkYkluZGV4ZXMsIGRiRm9yZWlnbnNdID0gYXdhaXQgdGhpcy5yZWFkVGFibGUoY29tcGFyZURCLCB0YWJsZSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoXCJUYWJsZSBub3QgZm91bmRcIikpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIC8vIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9ucyDsobDtmoxcbiAgICBjb25zdCB2ZWN0b3JEaW1lbnNpb25zID0gYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRNaWdyYXRpb25TZXQodGFibGUsIGRiQ29sdW1ucywgZGJJbmRleGVzLCBkYkZvcmVpZ25zLCB2ZWN0b3JEaW1lbnNpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdWJsaWMg7Iqk7YKk66eI7J2YIOuqqOuToCDthYzsnbTruJTsnYQg7ZWcIOuyiOyXkCDsnb3slrTshJwg7YWM7J2067iU67OEIE1pZ3JhdGlvblNldOydhCDrsJjtmZjtlanri4jri6QuXG4gICAqXG4gICAqIGdldE1pZ3JhdGlvblNldEZyb21EQuulvCDthYzsnbTruJTrp4jri6Qg7Zi47Lac7ZWY66m0ICjsu6zrn7wv7J24642x7IqkL0ZLL+uyoe2EsOywqOybkCkgw5cg7YWM7J2067iUIOyImCDrp4ztgbxcbiAgICog7JmV67O17J20IOuwnOyDne2VnOuLpC4g67mE6rWQIOuMgOyDgeydtCDsiJjsi60g6rCc66m0IOybkOqyqSBEQuyXkOyEnCDsmZXrs7Ug67mE7Jqp7J20IOyngOuwsOyggeydtCDrkJjrr4DroZwsXG4gICAqIOyiheulmOuzhOuhnCDtlZwg67KI7JSp66eMIOyhsO2ajO2VnOuLpC4g7ZaJIO2VtOyEneydgCBnZXRNaWdyYXRpb25TZXRGcm9tRELsmYAg64+Z7J287ZWcXG4gICAqIGJ1aWxkTWlncmF0aW9uU2V07J2EIOqzteycoO2VnOuLpC5cbiAgICpcbiAgICogQHJldHVybnMg7YWM7J2067iU66qFIOKGkiBNaWdyYXRpb25TZXQuIERC7JeQIOyXhuuKlCDthYzsnbTruJTsnYAg7ZWt66qp7J20IOyXhuuLpC5cbiAgICovXG4gIGFzeW5jIGdldE1pZ3JhdGlvblNldEZyb21EQkFsbChjb21wYXJlREI6IFJhd0NhcGFibGVLbmV4KTogUHJvbWlzZTxNYXA8c3RyaW5nLCBNaWdyYXRpb25TZXQ+PiB7XG4gICAgY29uc3QgW3RhYmxlcywgdmVjdG9yRGltZW5zaW9uc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnJlYWRUYWJsZXMoY29tcGFyZURCKSxcbiAgICAgIHRoaXMuZ2V0VmVjdG9yRGltZW5zaW9uc0FsbChjb21wYXJlREIpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgbWlncmF0aW9uU2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBNaWdyYXRpb25TZXQ+KCk7XG4gICAgZm9yIChjb25zdCBbdGFibGUsIHJvd3NdIG9mIHRhYmxlcykge1xuICAgICAgbWlncmF0aW9uU2V0cy5zZXQoXG4gICAgICAgIHRhYmxlLFxuICAgICAgICB0aGlzLmJ1aWxkTWlncmF0aW9uU2V0KFxuICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgIHJvd3MuY29sdW1ucyxcbiAgICAgICAgICByb3dzLmluZGV4ZXMsXG4gICAgICAgICAgcm93cy5mb3JlaWducyxcbiAgICAgICAgICB2ZWN0b3JEaW1lbnNpb25zLmdldCh0YWJsZSkgPz8ge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbWlncmF0aW9uU2V0cztcbiAgfVxuXG4gIC8qKlxuICAgKiDsobDtmowg6rKw6rO8IO2WieuTpOydhCBNaWdyYXRpb25TZXTsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgKiDthYzsnbTruJQg64uo7JyEIOyhsO2ajChnZXRNaWdyYXRpb25TZXRGcm9tREIp7JmAIOyghOyytCDsnbzqtIQg7KGw7ZqMKGdldE1pZ3JhdGlvblNldEZyb21EQkFsbCnqsIBcbiAgICog7J20IOuhnOyngeydhCDqs7XsnKDtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTWlncmF0aW9uU2V0KFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZGJDb2x1bW5zOiBQZ0NvbHVtbltdLFxuICAgIGRiSW5kZXhlczogUGdJbmRleFtdLFxuICAgIGRiRm9yZWlnbnM6IFBnRm9yZWlnbltdLFxuICAgIHZlY3RvckRpbWVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICk6IE1pZ3JhdGlvblNldCB7XG4gICAgY29uc3QgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10gPSBkYkNvbHVtbnMubWFwKChkYkNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZGJDb2xUeXBlID0gdGhpcy5yZXNvbHZlREJDb2xUeXBlKGRiQ29sdW1uKTtcblxuICAgICAgLy8gdmVjdG9yIO2DgOyeheyduCDqsr3smrAgZGltZW5zaW9ucyDshKTsoJVcbiAgICAgIGlmIChkYkNvbFR5cGUudHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgICAgICBkYkNvbFR5cGUuZGltZW5zaW9ucyA9IHZlY3RvckRpbWVuc2lvbnNbZGJDb2x1bW4uY29sdW1uX25hbWVdID8/IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRiQ29sdW1uLmNvbHVtbl9uYW1lLFxuICAgICAgICBudWxsYWJsZTogZGJDb2x1bW4uaXNfbnVsbGFibGUgPT09IFwiWUVTXCIsXG4gICAgICAgIC4uLmRiQ29sVHlwZSxcbiAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsspjrpqxcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb2x1bW4uaXNfZ2VuZXJhdGVkID09PSBcInNcIiB8fCBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwidlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiID8gXCJTVE9SRURcIiA6IFwiVklSVFVBTFwiLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGRiQ29sdW1uLmdlbmVyYXRpb25fZXhwcmVzc2lvbiA/PyBcIlwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9KSgpLFxuICAgICAgICAvLyBEZWZhdWx0IOqwkiDsspjrpqwgKEdlbmVyYXRlZCBDb2x1bW7snbQg7JWE64uMIOqyveyasOunjClcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIGRlZmF1bHQg6rCS7J20IOyXhuydjFxuICAgICAgICAgIGlmIChkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiIHx8IGRiQ29sdW1uLmlzX2dlbmVyYXRlZCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFBvc3RncmVTUUwgZGVmYXVsdCDqsJIg7KCV66asIChuZXh0dmFsLCBDVVJSRU5UX1RJTUVTVEFNUCDrk7EpXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQ7XG5cbiAgICAgICAgICAgIC8vIG5leHR2YWwg7KCc6rGwIChTRVJJQUwg7YOA7J6FKVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZS5zdGFydHNXaXRoKFwibmV4dHZhbChcIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDtg4DsnoUg7LqQ7Iqk7YyFIOygnOqxsCAo7JiIOiAnMSc6OmludGVnZXIg4oaSIDEpXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUucmVwbGFjZSgvOjpbXFx3XFxzXSskL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAvLyDrlLDsmLTtkZzqsIAgc2luZ2xlIHF1b3Rl7J24IOqyveyasCBkb3VibGUgcXVvdGXroZwg67OA7ZmYXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIGRlZmF1bHRWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnJlcGxhY2VBbGwoXCInXCIsICdcIicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkZWZhdWx0VG86IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSkoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBQUklNQVJZIEtFWeyZgCBmb3JlaWduIGtleeyaqSDsnbjrjbHsiqQg7KCc7Jm4XG4gICAgY29uc3QgZGJJbmRleGVzR3JvdXAgPSBncm91cChcbiAgICAgIGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgICAgIChkYkluZGV4KSA9PlxuICAgICAgICAgICFkYkluZGV4LmlzX3ByaW1hcnkgJiZcbiAgICAgICAgICAhZGJGb3JlaWducy5maW5kKChkYkZvcmVpZ24pID0+IGRiSW5kZXguaW5kZXhfbmFtZS5pbmNsdWRlcyhkYkZvcmVpZ24uY29uc3RyYWludF9uYW1lKSksXG4gICAgICApLFxuICAgICAgKGRiSW5kZXgpID0+IGRiSW5kZXguaW5kZXhfbmFtZSxcbiAgICApO1xuXG4gICAgLy8gaW5kZXhlcyDsspjrpqxcbiAgICBjb25zdCBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdID0gW107XG4gICAgZm9yIChjb25zdCBpbmRleE5hbWUgb2YgT2JqZWN0LmtleXMoZGJJbmRleGVzR3JvdXApKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IGRiSW5kZXhlc0dyb3VwW2luZGV4TmFtZV0/LnRvU29ydGVkKFxuICAgICAgICAobGVmdCwgcmlnaHQpID0+IGxlZnQuY29sdW1uX29yZGVyIC0gcmlnaHQuY29sdW1uX29yZGVyLFxuICAgICAgKTtcbiAgICAgIGFzc2VydChjdXJyZW50SW5kZXhlcyk7XG5cbiAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBjdXJyZW50SW5kZXhlc1swXTtcbiAgICAgIGNvbnN0IHBhcnNlZEluZGV4RGVmaW5pdGlvbiA9IHRoaXMucGFyc2VJbmRleERlZmluaXRpb24oZmlyc3RJbmRleC5pbmRleF9kZWZpbml0aW9uKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkSW5kZXhUeXBlID0gdGhpcy5yZXN0b3JlTWlncmF0aW9uSW5kZXhUeXBlKFxuICAgICAgICBmaXJzdEluZGV4LFxuICAgICAgICBwYXJzZWRJbmRleERlZmluaXRpb24uYWNjZXNzTWV0aG9kLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVzaW5nID0gdGhpcy5yZXN0b3JlR2VuZXJpY1VzaW5nKFxuICAgICAgICBwYXJzZWRJbmRleERlZmluaXRpb24uYWNjZXNzTWV0aG9kID8/IGZpcnN0SW5kZXguaW5kZXhfdHlwZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGluZGV4Q29sdW1uczogTWlncmF0aW9uSW5kZXhbXCJjb2x1bW5zXCJdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRJbmRleCBvZiBjdXJyZW50SW5kZXhlcykge1xuICAgICAgICBjb25zdCBvcGNsYXNzID0gdGhpcy5leHRyYWN0SW5kZXhDb2x1bW5PcGNsYXNzKFxuICAgICAgICAgIHBhcnNlZEluZGV4RGVmaW5pdGlvbi5jb2x1bW5EZWZpbml0aW9uc1tjdXJyZW50SW5kZXguY29sdW1uX29yZGVyIC0gMV0sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbHVtbjogTWlncmF0aW9uSW5kZXhbXCJjb2x1bW5zXCJdW251bWJlcl0gPSB7XG4gICAgICAgICAgbmFtZTogY3VycmVudEluZGV4LmNvbHVtbl9uYW1lLFxuICAgICAgICB9O1xuICAgICAgICBpZiAob3BjbGFzcykge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uLCB7IG9wY2xhc3MgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh1c2luZykge1xuICAgICAgICAgIGNhc2UgXCJidHJlZVwiOlxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgICAgICAgc29ydE9yZGVyOiBjdXJyZW50SW5kZXguc29ydF9vcmRlcixcbiAgICAgICAgICAgICAgbnVsbHNGaXJzdDogY3VycmVudEluZGV4Lm51bGxzX2ZpcnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpbmRleENvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXg6IE1pZ3JhdGlvbkluZGV4ID0ge1xuICAgICAgICB0eXBlOiByZXN0b3JlZEluZGV4VHlwZSxcbiAgICAgICAgbmFtZTogaW5kZXhOYW1lLFxuICAgICAgICBjb2x1bW5zOiBpbmRleENvbHVtbnMsXG4gICAgICAgIG51bGxzTm90RGlzdGluY3Q6IGZpcnN0SW5kZXgubnVsbHNfbm90X2Rpc3RpbmN0LFxuICAgICAgICAuLi50aGlzLnBhcnNlVmVjdG9ySW5kZXhPcHRpb25zKHJlc3RvcmVkSW5kZXhUeXBlLCBwYXJzZWRJbmRleERlZmluaXRpb24ud2l0aE9wdGlvbnMpLFxuICAgICAgfTtcbiAgICAgIGlmIChmaXJzdEluZGV4LnByZWRpY2F0ZSkge1xuICAgICAgICBpbmRleC53aGVyZSA9IGZpcnN0SW5kZXgucHJlZGljYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHVzaW5nKSB7XG4gICAgICAgIGluZGV4LnVzaW5nID0gdXNpbmc7XG4gICAgICB9XG4gICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgIH1cblxuICAgIC8vIGZvcmVpZ25zIOyymOumrFxuICAgIGNvbnN0IGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10gPSBkYkZvcmVpZ25zLm1hcCgoZGJGb3JlaWduKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5zOiBbZGJGb3JlaWduLmNvbHVtbl9uYW1lXSxcbiAgICAgICAgdG86IGAke2RiRm9yZWlnbi5mb3JlaWduX3RhYmxlX25hbWV9LiR7ZGJGb3JlaWduLmZvcmVpZ25fY29sdW1uX25hbWV9YCxcbiAgICAgICAgb25VcGRhdGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihkYkZvcmVpZ24udXBkYXRlX3J1bGUpLFxuICAgICAgICBvbkRlbGV0ZTogdGhpcy5tYXBDb25zdHJhaW50QWN0aW9uKGRiRm9yZWlnbi5kZWxldGVfcnVsZSksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGluZGV4ZXMsXG4gICAgICBmb3JlaWducyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc3RncmVTUUzsnZggY29uc3RyYWludCBhY3Rpb27snYQgS25leCDtmJXsi53snLzroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIG1hcENvbnN0cmFpbnRBY3Rpb24oYWN0aW9uOiBzdHJpbmcpOiBSZWxhdGlvbk9uIHtcbiAgICBjb25zdCBhY3Rpb25NYXAgPSBuZXcgTWFwPHN0cmluZywgUmVsYXRpb25Pbj4oW1xuICAgICAgW1wiTk8gQUNUSU9OXCIsIFwiTk8gQUNUSU9OXCJdLFxuICAgICAgW1wiUkVTVFJJQ1RcIiwgXCJSRVNUUklDVFwiXSxcbiAgICAgIFtcIkNBU0NBREVcIiwgXCJDQVNDQURFXCJdLFxuICAgICAgW1wiU0VUIE5VTExcIiwgXCJTRVQgTlVMTFwiXSxcbiAgICAgIFtcIlNFVCBERUZBVUxUXCIsIFwiU0VUIERFRkFVTFRcIl0sXG4gICAgXSk7XG4gICAgcmV0dXJuIGFjdGlvbk1hcC5nZXQoYWN0aW9uKSA/PyBcIk5PIEFDVElPTlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIOq4sOyhtCDthYzsnbTruJQg7J297Ja07IScIGNvbHMsIGluZGV4ZXMsIGZvcmVpZ25zIOuwmO2ZmFxuICAgKi9cbiAgYXN5bmMgcmVhZFRhYmxlKFxuICAgIGNvbXBhcmVEQjogUmF3Q2FwYWJsZUtuZXgsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8W1BnQ29sdW1uW10sIFBnSW5kZXhbXSwgUGdGb3JlaWduW11dPiB7XG4gICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5yZWFkVGFibGVzKGNvbXBhcmVEQiwgdGFibGVOYW1lKTtcbiAgICBjb25zdCByb3dzID0gdGFibGVzLmdldCh0YWJsZU5hbWUpO1xuICAgIGlmIChyb3dzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgbm90IGZvdW5kOiAke3RhYmxlTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyb3dzLmNvbHVtbnMsIHJvd3MuaW5kZXhlcywgcm93cy5mb3JlaWduc107XG4gIH1cblxuICAvKipcbiAgICogcHVibGljIOyKpO2CpOuniCDthYzsnbTruJTrk6TsnZggY29scy9pbmRleGVzL2ZvcmVpZ25z66W8IO2FjOydtOu4lOuzhOuhnCDrrLbslrTshJwg67CY7ZmY7ZWp64uI64ukLlxuICAgKlxuICAgKiB0YWJsZU5hbWXsnYQg7KO866m0IOq3uCDthYzsnbTruJTrp4wsIOyDneuete2VmOuptCDsoITssrTrpbwg7KGw7ZqM7ZWp64uI64ukLiDsv7zrpqzripQg65GQIOqyveuhnOqwgCDqs7XsnKDtlZjrr4DroZxcbiAgICog64uo7J28IOyhsO2ajOyZgCDsnbzqtIQg7KGw7ZqM7J2YIO2VtOyEneydtCDqsIjrnbzsp4Dsp4Ag7JWK7Iq164uI64ukLiDsoITssrQg7KGw7ZqMIOyLnOyXkOuKlCDthYzsnbTruJTrp4jri6QgNOuyiOyUqVxuICAgKiDsmZXrs7XtlZjripQg64yA7IugIOyiheulmOuzhOuhnCDtlZwg67KI7JSp66eMIOuPjOq4sCDrlYzrrLjsl5AsIOybkOqyqSBEQuyXkOyEnCDsmZXrs7Ug67mE7Jqp7J20IO2BrOqyjCDspITslrTrk63ri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlYWRUYWJsZXMoXG4gICAgY29tcGFyZURCOiBSYXdDYXBhYmxlS25leCxcbiAgICB0YWJsZU5hbWU/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8TWFwPHN0cmluZywgVGFibGVTY2hlbWFSb3dzPj4ge1xuICAgIGNvbnN0IGJpbmRpbmdzID0gdGFibGVOYW1lID09PSB1bmRlZmluZWQgPyBbXSA6IFt0YWJsZU5hbWUsIHRhYmxlTmFtZSwgdGFibGVOYW1lXTtcbiAgICBjb25zdCB0YWJsZUZpbHRlciA9IChjb2x1bW46IHN0cmluZykgPT4gKHRhYmxlTmFtZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGBBTkQgJHtjb2x1bW59ID0gP2ApO1xuXG4gICAgLy8gQ29sdW1ucyDsobDtmowgKEdlbmVyYXRlZCBDb2x1bW4g7KCV67O0IO2PrO2VqClcbiAgICBjb25zdCBjb2x1bW5zUXVlcnkgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgYy50YWJsZV9uYW1lLFxuICAgICAgICBjLmNvbHVtbl9uYW1lLFxuICAgICAgICBjLmRhdGFfdHlwZSxcbiAgICAgICAgYy51ZHRfbmFtZSxcbiAgICAgICAgQ09BTEVTQ0UoXG4gICAgICAgICAgYy5jaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsXG4gICAgICAgICAgQ0FTRSBXSEVOIGMuZGF0YV90eXBlID0gJ0FSUkFZJyBBTkQgYS5hdHR0eXBtb2QgPiAwXG4gICAgICAgICAgICBUSEVOIGEuYXR0dHlwbW9kIC0gNFxuICAgICAgICAgICAgRUxTRSBOVUxMXG4gICAgICAgICAgRU5EXG4gICAgICAgICkgQVMgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgICBDT0FMRVNDRShjLmRhdGV0aW1lX3ByZWNpc2lvbiwgYy5udW1lcmljX3ByZWNpc2lvbikgQVMgcHJlY2lzaW9uLFxuICAgICAgICBjLm51bWVyaWNfc2NhbGUsXG4gICAgICAgIGEuYXR0dHlwbW9kLFxuICAgICAgICBjLmlzX251bGxhYmxlLFxuICAgICAgICBjLmNvbHVtbl9kZWZhdWx0LFxuICAgICAgICBDT0FMRVNDRShhLmF0dGdlbmVyYXRlZCwgJycpIGFzIGlzX2dlbmVyYXRlZCxcbiAgICAgICAgYy5nZW5lcmF0aW9uX2V4cHJlc3Npb25cbiAgICAgIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgY1xuICAgICAgTEVGVCBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0bmFtZSA9IGMuY29sdW1uX25hbWVcbiAgICAgICAgQU5EIGEuYXR0cmVsaWQgPSAoXG4gICAgICAgICAgU0VMRUNUIG9pZCBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSBjLnRhYmxlX25hbWVcbiAgICAgICAgICBBTkQgcmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IGMudGFibGVfc2NoZW1hKVxuICAgICAgICApXG4gICAgICBXSEVSRSBjLnRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnXG4gICAgICAgICR7dGFibGVGaWx0ZXIoXCJjLnRhYmxlX25hbWVcIil9XG4gICAgICBPUkRFUiBCWSBjLnRhYmxlX25hbWUsIGMub3JkaW5hbF9wb3NpdGlvblxuICAgIGA7XG5cbiAgICAvLyBJbmRleGVzIOyhsO2ajCAoUEdyb29uZ2Eg7ZGc7ZiE7IudIOyduOuNseyKpCDtj6ztlagpXG4gICAgY29uc3QgaW5kZXhlc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgICAgdC5yZWxuYW1lIEFTIHRhYmxlX25hbWUsXG4gICAgICAgICAgaS5yZWxuYW1lIEFTIGluZGV4X25hbWUsXG4gICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICBXSEVOIGFtLmFtbmFtZSA9ICdwZ3Jvb25nYScgQU5EIHUuYXR0bnVtID0gMCBUSEVOXG4gICAgICAgICAgICAgICAgICByZWdleHBfcmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICByZWdleHBfcmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgVFJJTShwZ3Jvb25nYV9jb2wuY29sdW1uX2V4cHIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnOjp0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdnJ1xuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgJ1soKV0nLFxuICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICdnJ1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBFTFNFIGEuYXR0bmFtZVxuICAgICAgICAgIEVORCBBUyBjb2x1bW5fbmFtZSxcbiAgICAgICAgICBpeC5pbmRpc3VuaXF1ZSBBUyBpc191bmlxdWUsXG4gICAgICAgICAgaXguaW5kaXNwcmltYXJ5IEFTIGlzX3ByaW1hcnksXG4gICAgICAgICAgYW0uYW1uYW1lIEFTIGluZGV4X3R5cGUsXG4gICAgICAgICAgQ09BTEVTQ0UoKHUub3B0ICYgMikgPSAyLCBGQUxTRSkgQVMgbnVsbHNfZmlyc3QsXG4gICAgICAgICAgQ0FTRSBcbiAgICAgICAgICAgICAgV0hFTiAodS5vcHQgJiAxKSA9IDEgVEhFTiAnREVTQydcbiAgICAgICAgICAgICAgRUxTRSAnQVNDJ1xuICAgICAgICAgIEVORCBBUyBzb3J0X29yZGVyLFxuICAgICAgICAgIGl4LmluZG51bGxzbm90ZGlzdGluY3QgQVMgbnVsbHNfbm90X2Rpc3RpbmN0LFxuICAgICAgICAgIHUub3JkIEFTIGNvbHVtbl9vcmRlcixcbiAgICAgICAgICBwZ19nZXRfaW5kZXhkZWYoaXguaW5kZXhyZWxpZCkgQVMgaW5kZXhfZGVmaW5pdGlvbixcbiAgICAgICAgICBwZ19nZXRfZXhwcihpeC5pbmRwcmVkLCBpeC5pbmRyZWxpZCkgQVMgcHJlZGljYXRlXG4gICAgICBGUk9NIHBnX2NsYXNzIHRcbiAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIG5zIE9OIG5zLm9pZCA9IHQucmVsbmFtZXNwYWNlXG4gICAgICBKT0lOIHBnX2luZGV4IGl4IE9OIHQub2lkID0gaXguaW5kcmVsaWRcbiAgICAgIEpPSU4gcGdfY2xhc3MgaSBPTiBpLm9pZCA9IGl4LmluZGV4cmVsaWRcbiAgICAgIEpPSU4gcGdfYW0gYW0gT04gaS5yZWxhbSA9IGFtLm9pZFxuICAgICAgSk9JTiBMQVRFUkFMIHVubmVzdChpeC5pbmRrZXksIGl4LmluZG9wdGlvbilcbiAgICAgICAgICBXSVRIIE9SRElOQUxJVFkgQVMgdShhdHRudW0sIG9wdCwgb3JkKSBPTiB0cnVlXG4gICAgICBMRUZUIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHQub2lkIFxuICAgICAgICAgIEFORCBhLmF0dG51bSA9IHUuYXR0bnVtIFxuICAgICAgICAgIEFORCB1LmF0dG51bSA+IDBcbiAgICAgIExFRlQgSk9JTiBMQVRFUkFMIChcbiAgICAgICAgICAtLSBQR3Jvb25nYSDtkZztmITsi50g7J24642x7Iqk64qUIOuqqOuToCDtlonsnZggYXR0bnVt7J20IDDsnbTrnbwgdS5vcmTqsIAg6rCZ64ukLlxuICAgICAgICAgIC0tIO2RnO2YhOyLnSDrsLDsl7TsnZgg7Iic67KIKGV4cHJfb3JkKeydhCDtlajqu5gg672R7JWEIOygleugrOydhCDtmZXsoJXtlZzri6QuXG4gICAgICAgICAgU0VMRUNUIGV4cHIuY29sdW1uX2V4cHIsIGV4cHIuZXhwcl9vcmRcbiAgICAgICAgICBGUk9NIHVubmVzdChcbiAgICAgICAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICAgICAgICBXSEVOIHBnX2dldF9leHByKGl4LmluZGV4cHJzLCBpeC5pbmRyZWxpZCkgfiAnXkFSUkFZXFxcXFsnIFRIRU5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3RvX2FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhwX3JlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIoaXguaW5kZXhwcnMsIGl4LmluZHJlbGlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXkFSUkFZXFxcXFsoLiopXFxcXF0kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxcXDEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJywgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgRUxTRVxuICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWVtwZ19nZXRfZXhwcihpeC5pbmRleHBycywgaXguaW5kcmVsaWQpXVxuICAgICAgICAgICAgICAgICAgRU5EXG4gICAgICAgICAgICAgICkgV0lUSCBPUkRJTkFMSVRZIEFTIGV4cHIoY29sdW1uX2V4cHIsIGV4cHJfb3JkKVxuICAgICAgKSBwZ3Jvb25nYV9jb2wgT04gYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwXG4gICAgICBXSEVSRSB0LnJlbGtpbmQgPSAncidcbiAgICAgICAgICBBTkQgbnMubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgJHt0YWJsZUZpbHRlcihcInQucmVsbmFtZVwiKX1cbiAgICAgICAgICBBTkQgKHUuYXR0bnVtID4gMCBPUiAoYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwKSlcbiAgICAgIE9SREVSIEJZIHQucmVsbmFtZSwgaS5yZWxuYW1lLCB1Lm9yZCwgcGdyb29uZ2FfY29sLmV4cHJfb3JkO1xuYDtcblxuICAgIC8vIEZvcmVpZ24gS2V5cyDsobDtmoxcbiAgICAvL1xuICAgIC8vIGluZm9ybWF0aW9uX3NjaGVtYSh0YWJsZV9jb25zdHJhaW50cyDDlyBrZXlfY29sdW1uX3VzYWdlIMOXIGNvbnN0cmFpbnRfY29sdW1uX3VzYWdlXG4gICAgLy8gw5cgcmVmZXJlbnRpYWxfY29uc3RyYWludHMpIDTspJEg7KGw7J24IOuMgOyLoCBwZ19jb25zdHJhaW5066W8IOyngeygkSDsnb3ripTri6QuXG4gICAgLy8gY29uc3RyYWludF9jb2x1bW5fdXNhZ2XripQg67ewIOyViOycvOuhnCDthYzsnbTruJQg7ZWE7YSw6rCAIOuwgOugpOuTpOyWtOqwgOyngCDslYrslYQgREIg7KCE7LK07J2YXG4gICAgLy8g7KCc7JW97KGw6rG07J2EIO2bkeuKlOuLpC4g7KCc7JW97J20IOyhsOq4iOunjCDrp47slYTsoLjrj4Qg7YWM7J2067iUIO2VmOuCmCDsobDtmozsl5AgMey0iCDsnbTsg4Eg6rG466as6rOgLFxuICAgIC8vIOu5hOq1kOuKlCDthYzsnbTruJTrp4jri6Qg7J20IOy/vOumrOulvCDrj4zrpqzrr4DroZwg7KCE7LK0IOyGjOyalOqwgCDquInqsqntnogg7Luk7KeE64ukLlxuICAgIC8vIGNvbnR5cGU9J2YnIOyduOuNseyKpCDsiqTsupTsnLzroZwg67CU6r6466m0IE5PVCBOVUxMIOygnOyVvShQRyAxNyvsl5DshJwgcGdfY29uc3RyYWludOyXkFxuICAgIC8vIOq4sOuhneuQnOuLpCkg65Ox7J2EIOyVhOyYiCDqsbTrhIjrm7Tri6QuXG4gICAgLy9cbiAgICAvLyBjb25rZXkvY29uZmtleeuKlCDsu6zrn7wg7Iic7ISc66W8IOuLtOydgCDrsLDsl7TsnbTrr4DroZwgV0lUSCBPUkRJTkFMSVRZ66GcIOqwmeydgCDsiJzrsojrgbzrpqxcbiAgICAvLyDsp53sp4DslrTslbwg67O17ZWpIEZL7JeQ7IScIOy7rOufvCDrjIDsnZHsnbQg7Ja06riL64KY7KeAIOyViuuKlOuLpC5cbiAgICBjb25zdCBmb3JlaWduc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIGNsLnJlbG5hbWUgQVMgdGFibGVfbmFtZSxcbiAgICAgICAgY29uLmNvbm5hbWUgQVMgY29uc3RyYWludF9uYW1lLFxuICAgICAgICBhdHQuYXR0bmFtZSBBUyBjb2x1bW5fbmFtZSxcbiAgICAgICAgcmVmX2NsLnJlbG5hbWUgQVMgZm9yZWlnbl90YWJsZV9uYW1lLFxuICAgICAgICByZWZfYXR0LmF0dG5hbWUgQVMgZm9yZWlnbl9jb2x1bW5fbmFtZSxcbiAgICAgICAgQ0FTRSBjb24uY29uZnVwZHR5cGVcbiAgICAgICAgICBXSEVOICdhJyBUSEVOICdOTyBBQ1RJT04nXG4gICAgICAgICAgV0hFTiAncicgVEhFTiAnUkVTVFJJQ1QnXG4gICAgICAgICAgV0hFTiAnYycgVEhFTiAnQ0FTQ0FERSdcbiAgICAgICAgICBXSEVOICduJyBUSEVOICdTRVQgTlVMTCdcbiAgICAgICAgICBXSEVOICdkJyBUSEVOICdTRVQgREVGQVVMVCdcbiAgICAgICAgRU5EIEFTIHVwZGF0ZV9ydWxlLFxuICAgICAgICBDQVNFIGNvbi5jb25mZGVsdHlwZVxuICAgICAgICAgIFdIRU4gJ2EnIFRIRU4gJ05PIEFDVElPTidcbiAgICAgICAgICBXSEVOICdyJyBUSEVOICdSRVNUUklDVCdcbiAgICAgICAgICBXSEVOICdjJyBUSEVOICdDQVNDQURFJ1xuICAgICAgICAgIFdIRU4gJ24nIFRIRU4gJ1NFVCBOVUxMJ1xuICAgICAgICAgIFdIRU4gJ2QnIFRIRU4gJ1NFVCBERUZBVUxUJ1xuICAgICAgICBFTkQgQVMgZGVsZXRlX3J1bGVcbiAgICAgIEZST00gcGdfY29uc3RyYWludCBjb25cbiAgICAgIEpPSU4gcGdfY2xhc3MgY2wgT04gY2wub2lkID0gY29uLmNvbnJlbGlkXG4gICAgICBKT0lOIHBnX25hbWVzcGFjZSBucyBPTiBucy5vaWQgPSBjbC5yZWxuYW1lc3BhY2VcbiAgICAgIEpPSU4gcGdfY2xhc3MgcmVmX2NsIE9OIHJlZl9jbC5vaWQgPSBjb24uY29uZnJlbGlkXG4gICAgICBKT0lOIExBVEVSQUwgdW5uZXN0KGNvbi5jb25rZXkpIFdJVEggT1JESU5BTElUWSBBUyBrZXlfY29sKGF0dG51bSwgb3JkKSBPTiB0cnVlXG4gICAgICBKT0lOIExBVEVSQUwgdW5uZXN0KGNvbi5jb25ma2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgcmVmX2tleV9jb2woYXR0bnVtLCBvcmQpXG4gICAgICAgIE9OIHJlZl9rZXlfY29sLm9yZCA9IGtleV9jb2wub3JkXG4gICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhdHRcbiAgICAgICAgT04gYXR0LmF0dHJlbGlkID0gY2wub2lkIEFORCBhdHQuYXR0bnVtID0ga2V5X2NvbC5hdHRudW1cbiAgICAgIEpPSU4gcGdfYXR0cmlidXRlIHJlZl9hdHRcbiAgICAgICAgT04gcmVmX2F0dC5hdHRyZWxpZCA9IHJlZl9jbC5vaWQgQU5EIHJlZl9hdHQuYXR0bnVtID0gcmVmX2tleV9jb2wuYXR0bnVtXG4gICAgICBXSEVSRSBjb24uY29udHlwZSA9ICdmJ1xuICAgICAgICBBTkQgbnMubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICR7dGFibGVGaWx0ZXIoXCJjbC5yZWxuYW1lXCIpfVxuICAgICAgT1JERVIgQlkgY2wucmVsbmFtZSwgY29uLmNvbm5hbWUsIGtleV9jb2wub3JkXG4gICAgYDtcblxuICAgIC8vIOyiheulmOuzhOuhnCDtlZwg67KI7JSp66eMIOyhsO2ajO2VnCDrkqQg7YWM7J2067iU66qF7Jy866GcIOustuyKteuLiOuLpC5cbiAgICBjb25zdCBbY29sdW1uUm93cywgaW5kZXhSb3dzLCBmb3JlaWduUm93c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBjb21wYXJlREJcbiAgICAgICAgLnJhdyhjb2x1bW5zUXVlcnksIGJpbmRpbmdzLnNsaWNlKDAsIDEpKVxuICAgICAgICAudGhlbigocmVzdWx0OiB7IHJvd3M6IChQZ0NvbHVtbiAmIHsgdGFibGVfbmFtZTogc3RyaW5nIH0pW10gfSkgPT4gcmVzdWx0LnJvd3MpLFxuICAgICAgY29tcGFyZURCXG4gICAgICAgIC5yYXcoaW5kZXhlc1F1ZXJ5LCBiaW5kaW5ncy5zbGljZSgxLCAyKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdDogeyByb3dzOiAoUGdJbmRleCAmIHsgdGFibGVfbmFtZTogc3RyaW5nIH0pW10gfSkgPT4gcmVzdWx0LnJvd3MpLFxuICAgICAgY29tcGFyZURCXG4gICAgICAgIC5yYXcoZm9yZWlnbnNRdWVyeSwgYmluZGluZ3Muc2xpY2UoMiwgMykpXG4gICAgICAgIC50aGVuKChyZXN1bHQ6IHsgcm93czogKFBnRm9yZWlnbiAmIHsgdGFibGVfbmFtZTogc3RyaW5nIH0pW10gfSkgPT4gcmVzdWx0LnJvd3MpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgdGFibGVzID0gbmV3IE1hcDxzdHJpbmcsIFRhYmxlU2NoZW1hUm93cz4oKTtcbiAgICBjb25zdCBlbnN1cmUgPSAodGFibGU6IHN0cmluZyk6IFRhYmxlU2NoZW1hUm93cyA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRhYmxlcy5nZXQodGFibGUpO1xuICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuICAgICAgY29uc3QgY3JlYXRlZDogVGFibGVTY2hlbWFSb3dzID0geyBjb2x1bW5zOiBbXSwgaW5kZXhlczogW10sIGZvcmVpZ25zOiBbXSB9O1xuICAgICAgdGFibGVzLnNldCh0YWJsZSwgY3JlYXRlZCk7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9O1xuXG4gICAgLy8g7Lus65+87J20IOyXhuuKlCDthYzsnbTruJTsnYAg7KG07J6s7ZWY7KeAIOyViuuKlCDqsoPsnLzroZwg7Leo6riJ7ZWY66+A66GcIOy7rOufvCDquLDspIDsnLzroZwg7ZWt66qp7J2EIOunjOuTreuLiOuLpC5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBjb2x1bW5Sb3dzKSB7XG4gICAgICBlbnN1cmUocm93LnRhYmxlX25hbWUpLmNvbHVtbnMucHVzaChyb3cpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBpbmRleFJvd3MpIHtcbiAgICAgIHRhYmxlcy5nZXQocm93LnRhYmxlX25hbWUpPy5pbmRleGVzLnB1c2gocm93KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByb3cgb2YgZm9yZWlnblJvd3MpIHtcbiAgICAgIHRhYmxlcy5nZXQocm93LnRhYmxlX25hbWUpPy5mb3JlaWducy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlcztcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZU1pZ3JhdGlvbkluZGV4VHlwZShcbiAgICBpbmRleDogUGljazxQZ0luZGV4LCBcImlzX3VuaXF1ZVwiIHwgXCJpbmRleF90eXBlXCI+LFxuICAgIGFjY2Vzc01ldGhvZD86IHN0cmluZyxcbiAgKTogTWlncmF0aW9uSW5kZXhbXCJ0eXBlXCJdIHtcbiAgICBjb25zdCByZXNvbHZlZEFjY2Vzc01ldGhvZCA9IChhY2Nlc3NNZXRob2QgPz8gaW5kZXguaW5kZXhfdHlwZSkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChyZXNvbHZlZEFjY2Vzc01ldGhvZCA9PT0gXCJobnN3XCIgfHwgcmVzb2x2ZWRBY2Nlc3NNZXRob2QgPT09IFwiaXZmZmxhdFwiKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRBY2Nlc3NNZXRob2Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4LmlzX3VuaXF1ZSA/IFwidW5pcXVlXCIgOiBcImluZGV4XCI7XG4gIH1cblxuICBwcml2YXRlIHJlc3RvcmVHZW5lcmljVXNpbmcoXG4gICAgYWNjZXNzTWV0aG9kOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IE1pZ3JhdGlvbkluZGV4W1widXNpbmdcIl0gfCB1bmRlZmluZWQge1xuICAgIGlmICghYWNjZXNzTWV0aG9kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBhY2Nlc3NNZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXRoaXMuZ2VuZXJpY0luZGV4VHlwZXMuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIG5vcm1hbGl6ZWQgYXMgTWlncmF0aW9uSW5kZXhbXCJ1c2luZ1wiXTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWZWN0b3JJbmRleE9wdGlvbnMoXG4gICAgdHlwZTogTWlncmF0aW9uSW5kZXhbXCJ0eXBlXCJdLFxuICAgIHdpdGhPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBQaWNrPE1pZ3JhdGlvbkluZGV4LCBcIm1cIiB8IFwiZWZDb25zdHJ1Y3Rpb25cIiB8IFwibGlzdHNcIj4ge1xuICAgIGlmICh0eXBlID09PSBcImhuc3dcIikge1xuICAgICAgY29uc3Qgb3B0aW9uczogUGljazxNaWdyYXRpb25JbmRleCwgXCJtXCIgfCBcImVmQ29uc3RydWN0aW9uXCI+ID0ge307XG4gICAgICBjb25zdCBtID0gdGhpcy5wYXJzZUludGVnZXJPcHRpb24od2l0aE9wdGlvbnMubSk7XG4gICAgICBjb25zdCBlZkNvbnN0cnVjdGlvbiA9IHRoaXMucGFyc2VJbnRlZ2VyT3B0aW9uKHdpdGhPcHRpb25zLmVmX2NvbnN0cnVjdGlvbik7XG4gICAgICBpZiAobSAhPT0gdW5kZWZpbmVkKSBvcHRpb25zLm0gPSBtO1xuICAgICAgaWYgKGVmQ29uc3RydWN0aW9uICE9PSB1bmRlZmluZWQpIG9wdGlvbnMuZWZDb25zdHJ1Y3Rpb24gPSBlZkNvbnN0cnVjdGlvbjtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VJbnRlZ2VyT3B0aW9uKHdpdGhPcHRpb25zLmxpc3RzKSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBsaXN0czogdGhpcy5wYXJzZUludGVnZXJPcHRpb24od2l0aE9wdGlvbnMubGlzdHMpIH1cbiAgICAgICAgOiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW50ZWdlck9wdGlvbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4ocGFyc2VkKSA/IHVuZGVmaW5lZCA6IHBhcnNlZDtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEluZGV4Q29sdW1uT3BjbGFzcyhjb2x1bW5EZWZpbml0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghY29sdW1uRGVmaW5pdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkID0gY29sdW1uRGVmaW5pdGlvblxuICAgICAgLnJlcGxhY2UoL1xccytOVUxMU1xccysoRklSU1R8TEFTVClcXHMqJC9pLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoL1xccysoQVNDfERFU0MpXFxzKiQvaSwgXCJcIilcbiAgICAgIC50cmltKCk7XG4gICAgY29uc3QgdG9rZW5zID0gdGhpcy50b2tlbml6ZVRvcExldmVsKHRyaW1tZWQpO1xuXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdPy50b1VwcGVyQ2FzZSgpID09PSBcIkNPTExBVEVcIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW5zLmF0KC0xKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbmRleERlZmluaXRpb24oaW5kZXhEZWZpbml0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY2Nlc3NNZXRob2QgPSBpbmRleERlZmluaXRpb24ubWF0Y2goL1xcYlVTSU5HXFxzKyhbYS16X11bXFx3XSopL2kpPy5bMV0/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdXNpbmdNYXRjaEluZGV4ID0gaW5kZXhEZWZpbml0aW9uLnNlYXJjaCgvXFxiVVNJTkdcXGIvaSk7XG4gICAgY29uc3QgY29sdW1uc1N0YXJ0ID0gdXNpbmdNYXRjaEluZGV4ID49IDAgPyBpbmRleERlZmluaXRpb24uaW5kZXhPZihcIihcIiwgdXNpbmdNYXRjaEluZGV4KSA6IC0xO1xuICAgIGNvbnN0IGNvbHVtbnNFbmQgPVxuICAgICAgY29sdW1uc1N0YXJ0ID49IDAgPyB0aGlzLmZpbmRNYXRjaGluZ1BhcmVudGhlc2lzKGluZGV4RGVmaW5pdGlvbiwgY29sdW1uc1N0YXJ0KSA6IC0xO1xuICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb25zID1cbiAgICAgIGNvbHVtbnNTdGFydCA+PSAwICYmIGNvbHVtbnNFbmQgPiBjb2x1bW5zU3RhcnRcbiAgICAgICAgPyB0aGlzLnNwbGl0VG9wTGV2ZWwoaW5kZXhEZWZpbml0aW9uLnNsaWNlKGNvbHVtbnNTdGFydCArIDEsIGNvbHVtbnNFbmQpLCBcIixcIilcbiAgICAgICAgOiBbXTtcblxuICAgIGNvbnN0IHdpdGhNYXRjaCA9IC9cXGJXSVRIXFxzKlxcKC9pLmV4ZWMoaW5kZXhEZWZpbml0aW9uKTtcbiAgICBjb25zdCB3aXRoU3RhcnQgPSB3aXRoTWF0Y2ggPyBpbmRleERlZmluaXRpb24uaW5kZXhPZihcIihcIiwgd2l0aE1hdGNoLmluZGV4KSA6IC0xO1xuICAgIGNvbnN0IHdpdGhFbmQgPSB3aXRoU3RhcnQgPj0gMCA/IHRoaXMuZmluZE1hdGNoaW5nUGFyZW50aGVzaXMoaW5kZXhEZWZpbml0aW9uLCB3aXRoU3RhcnQpIDogLTE7XG4gICAgY29uc3Qgd2l0aE9wdGlvbnMgPVxuICAgICAgd2l0aFN0YXJ0ID49IDAgJiYgd2l0aEVuZCA+IHdpdGhTdGFydFxuICAgICAgICA/IHRoaXMucGFyc2VJbmRleE9wdGlvbkVudHJpZXMoaW5kZXhEZWZpbml0aW9uLnNsaWNlKHdpdGhTdGFydCArIDEsIHdpdGhFbmQpKVxuICAgICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc01ldGhvZCxcbiAgICAgIGNvbHVtbkRlZmluaXRpb25zLFxuICAgICAgd2l0aE9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbmRleE9wdGlvbkVudHJpZXMob3B0aW9uU291cmNlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zcGxpdFRvcExldmVsKG9wdGlvblNvdXJjZSwgXCIsXCIpLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigocmVzdWx0LCBlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IGVudHJ5LnRyaW0oKS5tYXRjaCgvXihbYS16X11bXFx3XSopXFxzKj1cXHMqKC4rKSQvaSk7XG4gICAgICBpZiAoIW1hdGNoZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgWywga2V5LCByYXdWYWx1ZV0gPSBtYXRjaGVkO1xuICAgICAgcmVzdWx0W2tleS50b0xvd2VyQ2FzZSgpXSA9IHJhd1ZhbHVlLnRyaW0oKS5yZXBsYWNlKC9eWydcIl18WydcIl0kL2csIFwiXCIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIHNwbGl0VG9wTGV2ZWwoc291cmNlOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGl0ZW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgbGV0IHBhcmVuRGVwdGggPSAwO1xuICAgIGxldCBicmFja2V0RGVwdGggPSAwO1xuICAgIGxldCBpblNpbmdsZVF1b3RlID0gZmFsc2U7XG4gICAgbGV0IGluRG91YmxlUXVvdGUgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2UubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBjaGFyID0gc291cmNlW2luZGV4XTtcbiAgICAgIGNvbnN0IG5leHRDaGFyID0gc291cmNlW2luZGV4ICsgMV07XG5cbiAgICAgIGlmIChjaGFyID09PSBcIidcIiAmJiAhaW5Eb3VibGVRdW90ZSkge1xuICAgICAgICBpZiAoaW5TaW5nbGVRdW90ZSAmJiBuZXh0Q2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluU2luZ2xlUXVvdGUgPSAhaW5TaW5nbGVRdW90ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyID09PSAnXCInICYmICFpblNpbmdsZVF1b3RlKSB7XG4gICAgICAgIGlmIChpbkRvdWJsZVF1b3RlICYmIG5leHRDaGFyID09PSAnXCInKSB7XG4gICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpbkRvdWJsZVF1b3RlID0gIWluRG91YmxlUXVvdGU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5TaW5nbGVRdW90ZSB8fCBpbkRvdWJsZVF1b3RlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhciA9PT0gXCIoXCIpIHtcbiAgICAgICAgcGFyZW5EZXB0aCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFyID09PSBcIilcIikge1xuICAgICAgICBwYXJlbkRlcHRoIC09IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXIgPT09IFwiW1wiKSB7XG4gICAgICAgIGJyYWNrZXREZXB0aCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFyID09PSBcIl1cIikge1xuICAgICAgICBicmFja2V0RGVwdGggLT0gMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyID09PSBkZWxpbWl0ZXIgJiYgcGFyZW5EZXB0aCA9PT0gMCAmJiBicmFja2V0RGVwdGggPT09IDApIHtcbiAgICAgICAgaXRlbXMucHVzaChzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KS50cmltKCkpO1xuICAgICAgICBzdGFydCA9IGluZGV4ICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0YWlsID0gc291cmNlLnNsaWNlKHN0YXJ0KS50cmltKCk7XG4gICAgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbXMucHVzaCh0YWlsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuaXplVG9wTGV2ZWwoc291cmNlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBzdGFydCA9IC0xO1xuICAgIGxldCBwYXJlbkRlcHRoID0gMDtcbiAgICBsZXQgYnJhY2tldERlcHRoID0gMDtcbiAgICBsZXQgaW5TaW5nbGVRdW90ZSA9IGZhbHNlO1xuICAgIGxldCBpbkRvdWJsZVF1b3RlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwdXNoVG9rZW4gPSAoZW5kSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gc291cmNlLnNsaWNlKHN0YXJ0LCBlbmRJbmRleCkudHJpbSgpO1xuICAgICAgaWYgKHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAtMTtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBzb3VyY2VbaW5kZXggKyAxXTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiJ1wiICYmICFpbkRvdWJsZVF1b3RlKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICBzdGFydCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpblNpbmdsZVF1b3RlICYmIG5leHRDaGFyID09PSBcIidcIikge1xuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5TaW5nbGVRdW90ZSA9ICFpblNpbmdsZVF1b3RlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09ICdcIicgJiYgIWluU2luZ2xlUXVvdGUpIHtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluRG91YmxlUXVvdGUgJiYgbmV4dENoYXIgPT09ICdcIicpIHtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluRG91YmxlUXVvdGUgPSAhaW5Eb3VibGVRdW90ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5TaW5nbGVRdW90ZSAmJiAhaW5Eb3VibGVRdW90ZSkge1xuICAgICAgICBpZiAoY2hhciA9PT0gXCIoXCIpIHtcbiAgICAgICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgICAgICBzdGFydCA9IGluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbkRlcHRoICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09IFwiKVwiKSB7XG4gICAgICAgICAgcGFyZW5EZXB0aCAtPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIltcIikge1xuICAgICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyYWNrZXREZXB0aCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIl1cIikge1xuICAgICAgICAgIGJyYWNrZXREZXB0aCAtPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKC9cXHMvLnRlc3QoY2hhcikgJiYgcGFyZW5EZXB0aCA9PT0gMCAmJiBicmFja2V0RGVwdGggPT09IDApIHtcbiAgICAgICAgICBwdXNoVG9rZW4oaW5kZXgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoVG9rZW4oc291cmNlLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHByaXZhdGUgZmluZE1hdGNoaW5nUGFyZW50aGVzaXMoc291cmNlOiBzdHJpbmcsIG9wZW5JbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIGxldCBpblNpbmdsZVF1b3RlID0gZmFsc2U7XG4gICAgbGV0IGluRG91YmxlUXVvdGUgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gb3BlbkluZGV4OyBpbmRleCA8IHNvdXJjZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgY29uc3QgbmV4dENoYXIgPSBzb3VyY2VbaW5kZXggKyAxXTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiJ1wiICYmICFpbkRvdWJsZVF1b3RlKSB7XG4gICAgICAgIGlmIChpblNpbmdsZVF1b3RlICYmIG5leHRDaGFyID09PSBcIidcIikge1xuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5TaW5nbGVRdW90ZSA9ICFpblNpbmdsZVF1b3RlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09ICdcIicgJiYgIWluU2luZ2xlUXVvdGUpIHtcbiAgICAgICAgaWYgKGluRG91YmxlUXVvdGUgJiYgbmV4dENoYXIgPT09ICdcIicpIHtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluRG91YmxlUXVvdGUgPSAhaW5Eb3VibGVRdW90ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpblNpbmdsZVF1b3RlIHx8IGluRG91YmxlUXVvdGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyID09PSBcIihcIikge1xuICAgICAgICBkZXB0aCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT09IFwiKVwiKSB7XG4gICAgICAgIGRlcHRoIC09IDE7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtirnsoJUg7YWM7J2067iU7J2YIFBL66W8IOywuOyhsO2VmOuKlCDri6Trpbgg7YWM7J2067iU7J2YIEZLIOuqqeuhneydhCDsobDtmoztlanri4jri6QuXG4gICAqIFBLIO2DgOyehSDrs4Dqsr0g7IucIOq0gOugqCBGSyDsoJzslb3sobDqsbTsnYQg7IKt7KCcL+uzteq1rO2VmOq4sCDsnITtlbQg7IKs7Jqp65Cp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZ2V0UmVmZXJlbmNpbmdGb3JlaWduS2V5cyhkYjogS25leCwgdGFibGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFJlZmVyZW5jaW5nRm9yZWlnbktleVtdPiB7XG4gICAgY29uc3QgcXVlcnkgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgdGMudGFibGVfbmFtZSxcbiAgICAgICAgdGMuY29uc3RyYWludF9uYW1lLFxuICAgICAgICBrY3UuY29sdW1uX25hbWUsXG4gICAgICAgIGNjdS50YWJsZV9uYW1lIEFTIHJlZmVyZW5jZWRfdGFibGVfbmFtZSxcbiAgICAgICAgY2N1LmNvbHVtbl9uYW1lIEFTIHJlZmVyZW5jZWRfY29sdW1uX25hbWUsXG4gICAgICAgIHJjLnVwZGF0ZV9ydWxlLFxuICAgICAgICByYy5kZWxldGVfcnVsZVxuICAgICAgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVfY29uc3RyYWludHMgQVMgdGNcbiAgICAgIEpPSU4gaW5mb3JtYXRpb25fc2NoZW1hLmtleV9jb2x1bW5fdXNhZ2UgQVMga2N1XG4gICAgICAgIE9OIHRjLmNvbnN0cmFpbnRfbmFtZSA9IGtjdS5jb25zdHJhaW50X25hbWVcbiAgICAgICAgQU5EIHRjLnRhYmxlX3NjaGVtYSA9IGtjdS50YWJsZV9zY2hlbWFcbiAgICAgIEpPSU4gaW5mb3JtYXRpb25fc2NoZW1hLmNvbnN0cmFpbnRfY29sdW1uX3VzYWdlIEFTIGNjdVxuICAgICAgICBPTiBjY3UuY29uc3RyYWludF9uYW1lID0gdGMuY29uc3RyYWludF9uYW1lXG4gICAgICAgIEFORCBjY3UudGFibGVfc2NoZW1hID0gdGMudGFibGVfc2NoZW1hXG4gICAgICBKT0lOIGluZm9ybWF0aW9uX3NjaGVtYS5yZWZlcmVudGlhbF9jb25zdHJhaW50cyBBUyByY1xuICAgICAgICBPTiByYy5jb25zdHJhaW50X25hbWUgPSB0Yy5jb25zdHJhaW50X25hbWVcbiAgICAgICAgQU5EIHJjLmNvbnN0cmFpbnRfc2NoZW1hID0gdGMudGFibGVfc2NoZW1hXG4gICAgICBXSEVSRSB0Yy5jb25zdHJhaW50X3R5cGUgPSAnRk9SRUlHTiBLRVknXG4gICAgICAgIEFORCBjY3UudGFibGVfbmFtZSA9ID9cbiAgICAgICAgQU5EIHRjLnRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnXG4gICAgYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiLnJhdyhxdWVyeSwgW3RhYmxlTmFtZV0pO1xuICAgIHJldHVybiByZXN1bHQucm93cy5tYXAoXG4gICAgICAocm93OiB7XG4gICAgICAgIHRhYmxlX25hbWU6IHN0cmluZztcbiAgICAgICAgY29uc3RyYWludF9uYW1lOiBzdHJpbmc7XG4gICAgICAgIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlZmVyZW5jZWRfdGFibGVfbmFtZTogc3RyaW5nO1xuICAgICAgICByZWZlcmVuY2VkX2NvbHVtbl9uYW1lOiBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZV9ydWxlOiBzdHJpbmc7XG4gICAgICAgIGRlbGV0ZV9ydWxlOiBzdHJpbmc7XG4gICAgICB9KSA9PiAoe1xuICAgICAgICB0YWJsZU5hbWU6IHJvdy50YWJsZV9uYW1lLFxuICAgICAgICBjb25zdHJhaW50TmFtZTogcm93LmNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgY29sdW1uTmFtZTogcm93LmNvbHVtbl9uYW1lLFxuICAgICAgICByZWZlcmVuY2VkVGFibGVOYW1lOiByb3cucmVmZXJlbmNlZF90YWJsZV9uYW1lLFxuICAgICAgICByZWZlcmVuY2VkQ29sdW1uTmFtZTogcm93LnJlZmVyZW5jZWRfY29sdW1uX25hbWUsXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLm1hcENvbnN0cmFpbnRBY3Rpb24ocm93LnVwZGF0ZV9ydWxlKSxcbiAgICAgICAgb25EZWxldGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihyb3cuZGVsZXRlX3J1bGUpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB2ZWN0b3Ig7Lus65+87J2YIGRpbWVuc2lvbnPrpbwg7KGw7ZqM7ZWp64uI64ukLlxuICAgKiBwZ19hdHRyaWJ1dGXsnZggYXR0dHlwbW9k7JeQ7IScIOywqOybkCDsiJjrpbwg7LaU7Lac7ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRWZWN0b3JEaW1lbnNpb25zKFxuICAgIGNvbXBhcmVEQjogUmF3Q2FwYWJsZUtuZXgsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zQWxsKGNvbXBhcmVEQiwgdGFibGVOYW1lKSkuZ2V0KHRhYmxlTmFtZSkgPz8ge307XG4gIH1cblxuICAvKipcbiAgICogdmVjdG9yIOy7rOufvOydmCBkaW1lbnNpb25z66W8IO2FjOydtOu4lOuzhOuhnCDsobDtmoztlanri4jri6QuXG4gICAqIHRhYmxlTmFtZeydhCDsg53rnrXtlZjrqbQgcHVibGljIOyKpO2CpOuniCDsoITssrTrpbwg7ZWcIOuyiOyXkCDsobDtmoztlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFZlY3RvckRpbWVuc2lvbnNBbGwoXG4gICAgY29tcGFyZURCOiBSYXdDYXBhYmxlS25leCxcbiAgICB0YWJsZU5hbWU/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8TWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgbnVtYmVyPj4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICBjLnJlbG5hbWUgYXMgdGFibGVfbmFtZSxcbiAgICAgICAgYS5hdHRuYW1lIGFzIGNvbHVtbl9uYW1lLFxuICAgICAgICBhLmF0dHR5cG1vZCBhcyBkaW1lbnNpb25zXG4gICAgICBGUk9NIHBnX2F0dHJpYnV0ZSBhXG4gICAgICBKT0lOIHBnX2NsYXNzIGMgT04gYS5hdHRyZWxpZCA9IGMub2lkXG4gICAgICBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2VcbiAgICAgIEpPSU4gcGdfdHlwZSB0IE9OIGEuYXR0dHlwaWQgPSB0Lm9pZFxuICAgICAgV0hFUkUgdC50eXBuYW1lID0gJ3ZlY3RvcidcbiAgICAgICAgQU5EIGEuYXR0bnVtID4gMFxuICAgICAgICBBTkQgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgJHt0YWJsZU5hbWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIkFORCBjLnJlbG5hbWUgPSA/XCJ9XG4gICAgYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb21wYXJlREIucmF3KHF1ZXJ5LCB0YWJsZU5hbWUgPT09IHVuZGVmaW5lZCA/IFtdIDogW3RhYmxlTmFtZV0pO1xuXG4gICAgY29uc3QgZGltZW5zaW9uc0J5VGFibGUgPSBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByZXN1bHQucm93cykge1xuICAgICAgY29uc3QgZGltZW5zaW9ucyA9IGRpbWVuc2lvbnNCeVRhYmxlLmdldChyb3cudGFibGVfbmFtZSkgPz8ge307XG4gICAgICAvLyBhdHR0eXBtb2Tsl5DshJwg7Iuk7KCcIGRpbWVuc2lvbnMg6rCSIOy2lOy2nFxuICAgICAgZGltZW5zaW9uc1tyb3cuY29sdW1uX25hbWVdID0gcm93LmRpbWVuc2lvbnMgPiAwID8gcm93LmRpbWVuc2lvbnMgOiAwO1xuICAgICAgZGltZW5zaW9uc0J5VGFibGUuc2V0KHJvdy50YWJsZV9uYW1lLCBkaW1lbnNpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpbWVuc2lvbnNCeVRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc3RncmVTUUwg7Lus65+8IO2DgOyeheydhCDrtoTshJ3tlZjsl6wgTWlncmF0aW9uQ29sdW1uIOqwneyytOuhnCDrs4DtmZjtlanri4jri6QuXG4gICAqL1xuICByZXNvbHZlREJDb2xUeXBlKFxuICAgIGRiQ29sdW1uOiBQZ0NvbHVtbixcbiAgKTogUGljazxcbiAgICBNaWdyYXRpb25Db2x1bW4sXG4gICAgXCJ0eXBlXCIgfCBcImxlbmd0aFwiIHwgXCJwcmVjaXNpb25cIiB8IFwic2NhbGVcIiB8IFwibnVtYmVyVHlwZVwiIHwgXCJkaW1lbnNpb25zXCJcbiAgPiB7XG4gICAgY29uc3QgeyB1ZHRfbmFtZTogX3VkdF9uYW1lLCBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsIHByZWNpc2lvbiwgbnVtZXJpY19zY2FsZSB9ID0gZGJDb2x1bW47XG5cbiAgICBjb25zdCB7IHVkdF9uYW1lLCBzaW5nbGVPckFycmF5IH0gPSAoKCkgPT4ge1xuICAgICAgaWYgKF91ZHRfbmFtZS5zdGFydHNXaXRoKFwiX1wiKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVkdF9uYW1lOiBfdWR0X25hbWUuc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIHNpbmdsZU9yQXJyYXk6IFwiW11cIiBhcyBjb25zdCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVkdF9uYW1lOiBfdWR0X25hbWUsXG4gICAgICAgIHNpbmdsZU9yQXJyYXk6IFwiXCIgYXMgY29uc3QsXG4gICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICAvLyBVVUlEXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInV1aWRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYHV1aWQke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIEludGVnZXIgdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwiaW50NFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgaW50ZWdlciR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJpbnQ4XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBiaWdJbnRlZ2VyJHtzaW5nbGVPckFycmF5fWAgfTtcbiAgICB9XG5cbiAgICAvLyBTdHJpbmcgdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwidmFyY2hhclwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBgc3RyaW5nJHtzaW5nbGVPckFycmF5fWAsXG4gICAgICAgIC4uLihjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGggJiYge1xuICAgICAgICAgIGxlbmd0aDogY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBzdHJpbmcke3NpbmdsZU9yQXJyYXl9YCB9OyAvLyBTdHJpbmdQcm9wIHdpdGhvdXQgbGVuZ3RoXG4gICAgfVxuXG4gICAgLy8gTnVtYmVyT3JOdW1lcmljIHR5cGVzXG4gICAgaWYgKHVkdF9uYW1lID09PSBcIm51bWVyaWNcIikge1xuICAgICAgY29uc3QgbnVtZXJpY01ldGFkYXRhID1cbiAgICAgICAgZGVjb2RlTnVtZXJpY1R5cGVNb2RpZmllcihkYkNvbHVtbi5hdHR0eXBtb2QpID8/XG4gICAgICAgIChwcmVjaXNpb24gIT09IG51bGwgJiYgbnVtZXJpY19zY2FsZSAhPT0gbnVsbCA/IHsgcHJlY2lzaW9uLCBzY2FsZTogbnVtZXJpY19zY2FsZSB9IDoge30pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLFxuICAgICAgICBudW1iZXJUeXBlOiBcIm51bWVyaWNcIixcbiAgICAgICAgLi4ubnVtZXJpY01ldGFkYXRhLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcImZsb2F0NFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgbnVtYmVyT3JOdW1lcmljJHtzaW5nbGVPckFycmF5fWAsIG51bWJlclR5cGU6IFwicmVhbFwiIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJmbG9hdDhcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLCBudW1iZXJUeXBlOiBcImRvdWJsZSBwcmVjaXNpb25cIiB9O1xuICAgIH1cblxuICAgIC8vIEJvb2xlYW5cbiAgICBpZiAodWR0X25hbWUgPT09IFwiYm9vbFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgYm9vbGVhbiR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuXG4gICAgLy8gVGltZXN0YW1weiB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ0aW1lc3RhbXB0elwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBgZGF0ZSR7c2luZ2xlT3JBcnJheX1gLFxuICAgICAgICAuLi4ocHJlY2lzaW9uICE9PSBudWxsICYmIHtcbiAgICAgICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgICAgfSksXG4gICAgICB9OyAvLyBEYXRlUHJvcCDihpIgdGltZXN0YW1wdHpcbiAgICB9XG5cbiAgICAvLyBKU09OXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImpzb25cIiB8fCB1ZHRfbmFtZSA9PT0gXCJqc29uYlwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImpzb25cIiB9O1xuICAgIH1cblxuICAgIC8vIFZlY3RvciAocGd2ZWN0b3IpXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInZlY3RvclwiKSB7XG4gICAgICAvLyB2ZWN0b3Ig7YOA7J6F7J2YIOywqOybkCDsiJjripQgY29sdW1uX2RlZmF1bHTrgpgg67OE64+EIOy/vOumrOuhnCDtmZXsnbjtlbTslbwg7ZWoXG4gICAgICAvLyDtmITsnqzripQg6riw67O46rCSIDDsnLzroZwg7ISk7KCVICjsi6TsoJwgZGltZW5zaW9uc+uKlCBnZXRNaWdyYXRpb25TZXRGcm9tRELsl5DshJwg67OE64+EIOy/vOumrOuhnCDtmZXsnbgpXG4gICAgICByZXR1cm4geyB0eXBlOiBgdmVjdG9yJHtzaW5nbGVPckFycmF5fWAsIGRpbWVuc2lvbnM6IDAgfTtcbiAgICB9XG5cbiAgICAvLyB0c3ZlY3RvciAoUG9zdGdyZVNRTCDsoITrrLgg6rKA7IOJ7JqpIO2DgOyehSlcbiAgICBpZiAodWR0X25hbWUgPT09IFwidHN2ZWN0b3JcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0c3ZlY3RvclwiIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgOuKpe2VnCBQb3N0Z3JlU1FMIOy7rOufvCDtg4DsnoU6ICR7dWR0X25hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgPSBuZXcgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUErRUEsU0FBUywwQkFDUCxjQUNxRDtDQUNyRCxJQUFJLGlCQUFpQixVQUFhLGlCQUFpQixRQUFRLGVBQWUsR0FDeEUsT0FBTztDQUlULE1BQU0sV0FBVyxlQUFlO0NBQ2hDLE1BQU0sWUFBWSxhQUFhO0NBQy9CLE1BQU0sZ0JBQWdCLFdBQVc7Q0FFakMsT0FBTztFQUFFO0VBQVcsT0FETixpQkFBaUIsT0FBTyxnQkFBZ0IsT0FBTztDQUNuQztBQUM1Qjs7O0NBRU0sOEJBQU4sTUFBa0M7RUFDaEMsb0NBQXFDLElBQUksSUFBSTtHQUFDO0dBQVM7R0FBUTtHQUFPO0dBQVE7RUFBVSxDQUFDOzs7Ozs7O0VBUXpGLE1BQU0sc0JBQ0osV0FDQSxPQUM4QjtHQUM5QixJQUFJLFdBQXVCLFdBQXNCO0dBQ2pELElBQUk7SUFDRixDQUFDLFdBQVcsV0FBVyxjQUFjLE1BQU0sS0FBSyxVQUFVLFdBQVcsS0FBSztHQUM1RSxTQUFTLEdBQVk7SUFDbkIsSUFBSSxhQUFhLFNBQVMsRUFBRSxRQUFRLFNBQVMsaUJBQWlCLEdBQzVE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
|
|
@@ -6,7 +6,7 @@ import path from "path";
|
|
|
6
6
|
import fs from "fs/promises";
|
|
7
7
|
import os from "os";
|
|
8
8
|
import crypto from "crypto";
|
|
9
|
-
|
|
9
|
+
// src/migration/slack-confirm.ts
|
|
10
10
|
var SlackConfirm;
|
|
11
11
|
var init_slack_confirm = __esmMin((() => {
|
|
12
12
|
init_sonamu();
|
|
@@ -199,8 +199,7 @@ ${migrationsText}`;
|
|
|
199
199
|
}
|
|
200
200
|
};
|
|
201
201
|
}));
|
|
202
|
-
//#endregion
|
|
203
202
|
init_slack_confirm();
|
|
204
203
|
export { SlackConfirm, init_slack_confirm };
|
|
205
204
|
|
|
206
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stY29uZmlybS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9uL3NsYWNrLWNvbmZpcm0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi9kaWN0L3NkXCI7XG5pbXBvcnQgeyB0eXBlIE1pZ3JhdGlvblJlc3VsdCB9IGZyb20gXCIuL21pZ3JhdG9yXCI7XG5cbmV4cG9ydCB0eXBlIFNsYWNrQ29uZmlybVJlc3VsdCA9IHtcbiAgc3RhdHVzOiBcImFwcHJvdmVkXCIgfCBcInJlamVjdGVkXCIgfCBcInBlbmRpbmdcIiB8IFwibm90X2NvbmZpZ3VyZWRcIiB8IFwiZXJyb3JcIjtcbiAgdHM/OiBzdHJpbmc7XG4gIGNoYW5uZWw/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdCA9IHtcbiAgdHlwZTogXCJwZW5kaW5nXCI7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgdHM6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBTbGFja0NvbmZpcm0ge1xuICBwcml2YXRlIGNvbmZpZyA9IFNvbmFtdS5jb25maWcuc2xhY2tDb25maXJtO1xuXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWd1cmVkVGFyZ2V0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRUYXJnZXRzID0gT2JqZWN0LmtleXMoU29uYW11LmRiQ29uZmlnKTtcbiAgICBjb25zdCBpbnZhbGlkVGFyZ2V0cyA9IHRoaXMuY29uZmlnLnRhcmdldHMuZmlsdGVyKCh0YXJnZXQpID0+ICF2YWxpZFRhcmdldHMuaW5jbHVkZXModGFyZ2V0KSk7XG5cbiAgICBpZiAoaW52YWxpZFRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgYXNzZXJ0LmZhaWwoXG4gICAgICAgIFNEKFwic29uYW11LmVycm9yLnNsYWNrQ29uZmlybUludmFsaWRUYXJnZXRzXCIpKFxuICAgICAgICAgIGludmFsaWRUYXJnZXRzLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICB2YWxpZFRhcmdldHMuam9pbihcIiwgXCIpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7ISk7KCV7J20IOyeiOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqL1xuICBpc0NvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gICAgdGhpcy52YWxpZGF0ZUNvbmZpZ3VyZWRUYXJnZXRzKCk7XG4gICAgcmV0dXJuICEhKHRoaXMuY29uZmlnPy5ib3RUb2tlbiAmJiB0aGlzLmNvbmZpZz8uY2hhbm5lbElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlbTri7kgdGFyZ2V07J20IOyKueyduCDrjIDsg4Hsnbjsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgKi9cbiAgaXNUYXJnZXRSZXF1aXJlc0FwcHJvdmFsKHRhcmdldDoga2V5b2YgU29uYW11REJDb25maWcpOiBib29sZWFuIHtcbiAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJlZFRhcmdldHMoKTtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnRhcmdldHM/LmluY2x1ZGVzKHRhcmdldCkgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICog66eI7J206re466CI7J207IWYIOuqqeuhneydmCDtlbTsi5zrpbwg7IOd7ISx7ZWp64uI64ukLlxuICAgKi9cbiAgZ2V0TWlncmF0aW9uc0hhc2gobWlncmF0aW9uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5taWdyYXRpb25zXS50b1NvcnRlZCgpO1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUoc29ydGVkLmpvaW4oXCIsXCIpKS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgMTIpO1xuICB9XG5cbiAgLyoqXG4gICAqIOuhnOy7rCDtjIzsnbwg6rK966Gc66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q29uZmlybUZpbGVQYXRoKGhhc2g6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwibWlncmF0aW9uc1wiLCBgLnNsYWNrLWNvbmZpcm0tJHtoYXNofWApO1xuICB9XG5cbiAgLyoqXG4gICAqIOq4sOyhtCDsirnsnbgg7JqU7LKt7J2EIOyhsO2ajO2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGdldEV4aXN0aW5nUmVxdWVzdChtaWdyYXRpb25zOiBzdHJpbmdbXSk6IFByb21pc2U8eyBjaGFubmVsOiBzdHJpbmc7IHRzOiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRNaWdyYXRpb25zSGFzaChtaWdyYXRpb25zKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0Q29uZmlybUZpbGVQYXRoKGhhc2gpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IFtjaGFubmVsLCB0c10gPSBjb250ZW50LnRyaW0oKS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2hhbm5lbCAmJiB0cykge1xuICAgICAgICByZXR1cm4geyBjaGFubmVsLCB0cyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7Iq57J24IOyalOyyreydhCDsoIDsnqXtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBzYXZlUmVxdWVzdChtaWdyYXRpb25zOiBzdHJpbmdbXSwgY2hhbm5lbDogc3RyaW5nLCB0czogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0TWlncmF0aW9uc0hhc2gobWlncmF0aW9ucyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldENvbmZpcm1GaWxlUGF0aChoYXNoKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIGAke2NoYW5uZWx9OiR7dHN9YCwgXCJ1dGYtOFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtmITsnqwg7IKs7Jqp7J6QIOydtOumhOydhCDrsJjtmZjtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGdldFJlcXVlc3RvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5VU0VSID8/IG9zLnVzZXJJbmZvKCkudXNlcm5hbWUgPz8gXCJVbmtub3duXCI7XG4gIH1cblxuICAvKipcbiAgICog7Iqs656ZIOuplOyLnOyngOulvCDrsJzshqHtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBwb3N0QXBwcm92YWxSZXF1ZXN0KFxuICAgIG1pZ3JhdGlvbnM6IHN0cmluZ1tdLFxuICAgIHRhcmdldHM6IHN0cmluZ1tdLFxuICAgIHJlcXVlc3Rvcj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IGNoYW5uZWw6IHN0cmluZzsgdHM6IHN0cmluZyB9PiB7XG4gICAgYXNzZXJ0KHRoaXMuY29uZmlnLCBTRChcInNvbmFtdS5lcnJvci5zbGFja0NvbmZpcm1Ob3RDb25maWd1cmVkXCIpKTtcbiAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJlZFRhcmdldHMoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwczovL3NsYWNrLmNvbS9hcGkvY2hhdC5wb3N0TWVzc2FnZVwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jb25maWcuYm90VG9rZW59YCxcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjaGFubmVsOiB0aGlzLmNvbmZpZy5jaGFubmVsSWQsXG4gICAgICAgIHRleHQ6IHRoaXMuYnVpbGRNZXNzYWdlVGV4dChtaWdyYXRpb25zLCB0YXJnZXRzLCByZXF1ZXN0b3IgPz8gdGhpcy5nZXRSZXF1ZXN0b3IoKSksXG4gICAgICAgIHVuZnVybF9saW5rczogZmFsc2UsXG4gICAgICAgIHVuZnVybF9tZWRpYTogZmFsc2UsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIEhUVFAgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPVxuICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgIG9rOiBib29sZWFuO1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgICAgY2hhbm5lbDogc3RyaW5nO1xuICAgICAgICB0czogc3RyaW5nO1xuICAgICAgfTtcbiAgICBpZiAoIWRhdGEub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIGVycm9yOiAke2RhdGEuZXJyb3J9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcbiAgICAgIHRzOiBkYXRhLnRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog66mU7Iuc7KeAIO2FjeyKpO2KuOulvCDsg53shLHtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTWVzc2FnZVRleHQobWlncmF0aW9uczogc3RyaW5nW10sIHRhcmdldHM6IHN0cmluZ1tdLCByZXF1ZXN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJvamVjdE5hbWUgPSBTb25hbXUuY29uZmlnLnByb2plY3ROYW1lID8/IFwiVW5rbm93blwiO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoXCJrby1LUlwiLCB7XG4gICAgICB0aW1lWm9uZTogXCJBc2lhL1Nlb3VsXCIsXG4gICAgfSk7XG4gICAgY29uc3QgbWlncmF0aW9uc1RleHQgPSBtaWdyYXRpb25zLm1hcCgobSkgPT4gYOKAoiAke219YCkuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCB0YXJnZXRzVGV4dCA9IHRhcmdldHMuam9pbihcIiwgXCIpO1xuXG4gICAgcmV0dXJuIGDwn5eE77iPICpbJHtwcm9qZWN0TmFtZX1dIFByb2R1Y3Rpb24g66eI7J206re466CI7J207IWYIOyKueyduCDsmpTssq0qXG5cbirsmpTssq3snpA6KiAke3JlcXVlc3Rvcn1cbirrjIDsg4EgREI6KiAke3RhcmdldHNUZXh0fVxuKuyLnOqwhDoqICR7dGltZXN0YW1wfVxuXG4q7KCB7JqpIOyYiOyglSDrp4jsnbTqt7jroIjsnbTshZg6KlxuJHttaWdyYXRpb25zVGV4dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOyKueyduCDsg4Htg5zrpbwg7ZmV7J247ZWp64uI64ukIChyZWFjdGlvbnMuZ2V0KS5cbiAgICovXG4gIGFzeW5jIGNoZWNrQXBwcm92YWwoXG4gICAgY2hhbm5lbDogc3RyaW5nLFxuICAgIHRzOiBzdHJpbmcsXG4gICk6IFByb21pc2U8e1xuICAgIGFwcHJvdmVkOiBib29sZWFuO1xuICAgIHJlamVjdGVkOiBib29sZWFuO1xuICAgIGFwcHJvdmVyPzogc3RyaW5nO1xuICB9PiB7XG4gICAgYXNzZXJ0KHRoaXMuY29uZmlnLCBTRChcInNvbmFtdS5lcnJvci5zbGFja0NvbmZpcm1Ob3RDb25maWd1cmVkXCIpKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICBgaHR0cHM6Ly9zbGFjay5jb20vYXBpL3JlYWN0aW9ucy5nZXQ/Y2hhbm5lbD0ke2NoYW5uZWx9JnRpbWVzdGFtcD0ke3RzfWAsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmNvbmZpZy5ib3RUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbGFjayBBUEkgSFRUUCBlcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgb2s6IGJvb2xlYW47XG4gICAgICAgIGVycm9yPzogc3RyaW5nO1xuICAgICAgICBtZXNzYWdlPzoge1xuICAgICAgICAgIHJlYWN0aW9ucz86IEFycmF5PHtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHVzZXJzPzogc3RyaW5nW107XG4gICAgICAgICAgfT47XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIGlmICghZGF0YS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbGFjayBBUEkgZXJyb3I6ICR7ZGF0YS5lcnJvcn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWFjdGlvbnMgPSBkYXRhLm1lc3NhZ2U/LnJlYWN0aW9ucyA/PyBbXTtcbiAgICBjb25zdCBhcHByb3ZlZCA9IHJlYWN0aW9ucy5maW5kKChyKSA9PiByLm5hbWUgPT09IFwid2hpdGVfY2hlY2tfbWFya1wiKTtcbiAgICBjb25zdCByZWplY3RlZCA9IHJlYWN0aW9ucy5maW5kKChyKSA9PiByLm5hbWUgPT09IFwieFwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhcHByb3ZlZDogISFhcHByb3ZlZCxcbiAgICAgIHJlamVjdGVkOiAhIXJlamVjdGVkLFxuICAgICAgYXBwcm92ZXI6IGFwcHJvdmVkPy51c2Vycz8uWzBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yY2Ug7Iq57J24IOyymOumrOulvCDsiJjtlontlanri4jri6QgKOuzuOyduOydtCDinIUg7LCN6rOgIOyKpOugiOuTnOyXkCDsgqzsnKAg64Ko6rmAKS5cbiAgICovXG4gIGFzeW5jIGZvcmNlQXBwcm92YWwoXG4gICAgY2hhbm5lbDogc3RyaW5nLFxuICAgIHRzOiBzdHJpbmcsXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICAgcmVxdWVzdG9yPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhc3NlcnQodGhpcy5jb25maWcsIFNEKFwic29uYW11LmVycm9yLnNsYWNrQ29uZmlybU5vdENvbmZpZ3VyZWRcIikpO1xuICAgIGNvbnN0IGFjdHVhbFJlcXVlc3RvciA9IHJlcXVlc3RvciA/PyB0aGlzLmdldFJlcXVlc3RvcigpO1xuXG4gICAgLy8gMS4g4pyFIOydtOuqqOyngCDstpTqsIBcbiAgICBjb25zdCBhZGRSZWFjdGlvblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwczovL3NsYWNrLmNvbS9hcGkvcmVhY3Rpb25zLmFkZFwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jb25maWcuYm90VG9rZW59YCxcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjaGFubmVsLFxuICAgICAgICB0aW1lc3RhbXA6IHRzLFxuICAgICAgICBuYW1lOiBcIndoaXRlX2NoZWNrX21hcmtcIixcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgaWYgKCFhZGRSZWFjdGlvblJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNsYWNrIEFQSSBIVFRQIGVycm9yOiAke2FkZFJlYWN0aW9uUmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIC8vIDIuIOyKpOugiOuTnOyXkCDsgqzsnKAg64Ko6rmAXG4gICAgY29uc3QgcG9zdE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9zbGFjay5jb20vYXBpL2NoYXQucG9zdE1lc3NhZ2VcIiwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY29uZmlnLmJvdFRva2VufWAsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgdGhyZWFkX3RzOiB0cyxcbiAgICAgICAgdGV4dDogYOKaoO+4jyAqRm9yY2Ug7Iq57J24KlxcbuyalOyyreyekDogJHthY3R1YWxSZXF1ZXN0b3J9XFxu7IKs7JygOiAke3JlYXNvbn1gLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXBvc3RNZXNzYWdlUmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIEhUVFAgZXJyb3I6ICR7cG9zdE1lc3NhZ2VSZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOyLpO2WiSDsmYTro4wg66Gc6re466W8IOuCqOq5geuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGxvZ0V4ZWN1dGlvbihcbiAgICBjaGFubmVsOiBzdHJpbmcsXG4gICAgdHM6IHN0cmluZyxcbiAgICByZXN1bHRzOiBNaWdyYXRpb25SZXN1bHQsXG4gICAgcmVxdWVzdG9yPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBhc3NlcnQoY29uZmlnLCBTRChcInNvbmFtdS5lcnJvci5zbGFja0NvbmZpcm1Ob3RDb25maWd1cmVkXCIpKTtcblxuICAgIGNvbnN0IGFjdHVhbFJlcXVlc3RvciA9IHJlcXVlc3RvciA/PyB0aGlzLmdldFJlcXVlc3RvcigpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoXCJrby1LUlwiLCB7XG4gICAgICB0aW1lWm9uZTogXCJBc2lhL1Nlb3VsXCIsXG4gICAgfSk7XG5cbiAgICAvLyBEQuuzhOuhnCDqt7jro7ntmZTtlZjsl6wg7ZGc7Iuc7ZWp64uI64ukLlxuICAgIGNvbnN0IGFwcGxpZWRUZXh0ID1cbiAgICAgIHJlc3VsdHMubGVuZ3RoID4gMFxuICAgICAgICA/IHJlc3VsdHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHIpID0+IHIuYXBwbGllZC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgocikgPT4gYFske3IuY29ubktleX1dXFxuJHtyLmFwcGxpZWQubWFwKChtKSA9PiBg4oCiICR7bX1gKS5qb2luKFwiXFxuXCIpfWApXG4gICAgICAgICAgICAuam9pbihcIlxcblxcblwiKVxuICAgICAgICA6IFwiKOyXhuydjClcIjtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwczovL3NsYWNrLmNvbS9hcGkvY2hhdC5wb3N0TWVzc2FnZVwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLmJvdFRva2VufWAsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgdGhyZWFkX3RzOiB0cyxcbiAgICAgICAgdGV4dDogYOKchSAq66eI7J206re466CI7J207IWYIOyLpO2WiSDsmYTro4wqXFxu7Iuk7ZaJ7J6QOiAke2FjdHVhbFJlcXVlc3Rvcn1cXG7si5zqsIQ6ICR7dGltZXN0YW1wfVxcblxcbuyggeyaqeuQqDpcXG4ke2FwcGxpZWRUZXh0fWAsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIEhUVFAgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OzthQU1zQztTQUVQO0NBZ0JsQixlQUFiLE1BQTBCO0VBQ3hCLFNBQWlCLE9BQU8sT0FBTztFQUUvQiw0QkFBMEM7R0FDeEMsSUFBSSxDQUFDLEtBQUssUUFDUjtHQUdGLE1BQU0sZUFBZSxPQUFPLEtBQUssT0FBTyxRQUFRO0dBQ2hELE1BQU0saUJBQWlCLEtBQUssT0FBTyxRQUFRLFFBQVEsV0FBVyxDQUFDLGFBQWEsU0FBUyxNQUFNLENBQUM7R0FFNUYsSUFBSSxlQUFlLFNBQVMsR0FDMUIsT0FBTyxLQUNMLEdBQUcseUNBQXlDLENBQUMsQ0FDM0MsZUFBZSxLQUFLLElBQUksR0FDeEIsYUFBYSxLQUFLLElBQUksQ0FDeEIsQ0FDRjtFQUVKOzs7O0VBS0EsZUFBd0I7R0FDdEIsS0FBSywwQkFBMEI7R0FDL0IsT0FBTyxDQUFDLEVBQUUsS0FBSyxRQUFRLFlBQVksS0FBSyxRQUFRO0VBQ2xEOzs7O0VBS0EseUJBQXlCLFFBQXVDO0dBQzlELEtBQUssMEJBQTBCO0dBQy9CLE9BQU8sS0FBSyxRQUFRLFNBQVMsU0FBUyxNQUFNLEtBQUs7RUFDbkQ7Ozs7RUFLQSxrQkFBa0IsWUFBOEI7R0FDOUMsTUFBTSxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxTQUFTO0dBQ3hDLE9BQU8sT0FBTyxXQUFXLEtBQUssQ0FBQyxDQUFDLE9BQU8sT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRTtFQUNwRjs7OztFQUtBLG1CQUEyQixNQUFzQjtHQUMvQyxPQUFPLEtBQUssS0FBSyxPQUFPLGFBQWEsT0FBTyxjQUFjLGtCQUFrQixNQUFNO0VBQ3BGOzs7O0VBS0EsTUFBTSxtQkFBbUIsWUFBdUU7R0FDOUYsTUFBTSxPQUFPLEtBQUssa0JBQWtCLFVBQVU7R0FDOUMsTUFBTSxXQUFXLEtBQUssbUJBQW1CLElBQUk7R0FFN0MsSUFBSTtJQUVGLE1BQU0sQ0FBQyxTQUFTLE9BQU0sTUFEQSxHQUFHLFNBQVMsVUFBVSxPQUFPLEVBQzdCLENBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHO0lBQzlDLElBQUksV0FBVyxJQUNiLE9BQU87S0FBRTtLQUFTO0lBQUc7SUFFdkIsT0FBTztHQUNULFFBQVE7SUFDTixPQUFPO0dBQ1Q7RUFDRjs7OztFQUtBLE1BQU0sWUFBWSxZQUFzQixTQUFpQixJQUEyQjtHQUNsRixNQUFNLE9BQU8sS0FBSyxrQkFBa0IsVUFBVTtHQUM5QyxNQUFNLFdBQVcsS0FBSyxtQkFBbUIsSUFBSTtHQUM3QyxNQUFNLEdBQUcsVUFBVSxVQUFVLEdBQUcsUUFBUSxHQUFHLE1BQU0sT0FBTztFQUMxRDs7OztFQUtBLGVBQStCO0dBQzdCLE9BQU8sUUFBUSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxZQUFZO0VBQ3ZEOzs7O0VBS0EsTUFBTSxvQkFDSixZQUNBLFNBQ0EsV0FDMEM7R0FDMUMsT0FBTyxLQUFLLFFBQVEsR0FBRyx3Q0FBd0MsQ0FBQztHQUNoRSxLQUFLLDBCQUEwQjtHQUUvQixNQUFNLFdBQVcsTUFBTSxNQUFNLDBDQUEwQztJQUNyRSxRQUFRO0lBQ1IsU0FBUztLQUNQLGVBQWUsVUFBVSxLQUFLLE9BQU87S0FDckMsZ0JBQWdCO0lBQ2xCO0lBQ0EsTUFBTSxLQUFLLFVBQVU7S0FDbkIsU0FBUyxLQUFLLE9BQU87S0FDckIsTUFBTSxLQUFLLGlCQUFpQixZQUFZLFNBQVMsYUFBYSxLQUFLLGFBQWEsQ0FBQztLQUNqRixjQUFjO0tBQ2QsY0FBYztJQUNoQixDQUFDO0dBQ0gsQ0FBQztHQUVELElBQUksQ0FBQyxTQUFTLElBQ1osTUFBTSxJQUFJLE1BQU0seUJBQXlCLFNBQVMsUUFBUTtHQUc1RCxNQUFNLE9BQ3NELE1BQU0sU0FBUyxLQUFLO0dBTWhGLElBQUksQ0FBQyxLQUFLLElBQ1IsTUFBTSxJQUFJLE1BQU0sb0JBQW9CLEtBQUssT0FBTztHQUdsRCxPQUFPO0lBQ0wsU0FBUyxLQUFLO0lBQ2QsSUFBSSxLQUFLO0dBQ1g7RUFDRjs7OztFQUtBLGlCQUF5QixZQUFzQixTQUFtQixXQUEyQjtHQUMzRixNQUFNLGNBQWMsT0FBTyxPQUFPLGVBQWU7R0FDakQsTUFBTSw2QkFBWSxJQUFJLEtBQUssRUFBQyxDQUFDLGVBQWUsU0FBUyxFQUNuRCxVQUFVLGFBQ1osQ0FBQztHQUNELE1BQU0saUJBQWlCLFdBQVcsS0FBSyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJO0dBR2hFLE9BQU8sU0FBUyxZQUFZOztTQUV2QixVQUFVO1dBSkssUUFBUSxLQUFLLElBSzFCLEVBQVk7UUFDZixVQUFVOzs7RUFHaEI7RUFDQTs7OztFQUtBLE1BQU0sY0FDSixTQUNBLElBS0M7R0FDRCxPQUFPLEtBQUssUUFBUSxHQUFHLHdDQUF3QyxDQUFDO0dBRWhFLE1BQU0sV0FBVyxNQUFNLE1BQ3JCLCtDQUErQyxRQUFRLGFBQWEsTUFDcEU7SUFDRSxRQUFRO0lBQ1IsU0FBUyxFQUNQLGVBQWUsVUFBVSxLQUFLLE9BQU8sV0FDdkM7R0FDRixDQUNGO0dBRUEsSUFBSSxDQUFDLFNBQVMsSUFDWixNQUFNLElBQUksTUFBTSx5QkFBeUIsU0FBUyxRQUFRO0dBRzVELE1BQU0sT0FDc0QsTUFBTSxTQUFTLEtBQUs7R0FVaEYsSUFBSSxDQUFDLEtBQUssSUFDUixNQUFNLElBQUksTUFBTSxvQkFBb0IsS0FBSyxPQUFPO0dBR2xELE1BQU0sWUFBWSxLQUFLLFNBQVMsYUFBYSxDQUFDO0dBQzlDLE1BQU0sV0FBVyxVQUFVLE1BQU0sTUFBTSxFQUFFLFNBQVMsa0JBQWtCO0dBQ3BFLE1BQU0sV0FBVyxVQUFVLE1BQU0sTUFBTSxFQUFFLFNBQVMsR0FBRztHQUVyRCxPQUFPO0lBQ0wsVUFBVSxDQUFDLENBQUM7SUFDWixVQUFVLENBQUMsQ0FBQztJQUNaLFVBQVUsVUFBVSxRQUFRO0dBQzlCO0VBQ0Y7Ozs7RUFLQSxNQUFNLGNBQ0osU0FDQSxJQUNBLFFBQ0EsV0FDZTtHQUNmLE9BQU8sS0FBSyxRQUFRLEdBQUcsd0NBQXdDLENBQUM7R0FDaEUsTUFBTSxrQkFBa0IsYUFBYSxLQUFLLGFBQWE7R0FHdkQsTUFBTSxzQkFBc0IsTUFBTSxNQUFNLHVDQUF1QztJQUM3RSxRQUFRO0lBQ1IsU0FBUztLQUNQLGVBQWUsVUFBVSxLQUFLLE9BQU87S0FDckMsZ0JBQWdCO0lBQ2xCO0lBQ0EsTUFBTSxLQUFLLFVBQVU7S0FDbkI7S0FDQSxXQUFXO0tBQ1gsTUFBTTtJQUNSLENBQUM7R0FDSCxDQUFDO0dBRUQsSUFBSSxDQUFDLG9CQUFvQixJQUN2QixNQUFNLElBQUksTUFBTSx5QkFBeUIsb0JBQW9CLFFBQVE7R0FJdkUsTUFBTSxzQkFBc0IsTUFBTSxNQUFNLDBDQUEwQztJQUNoRixRQUFRO0lBQ1IsU0FBUztLQUNQLGVBQWUsVUFBVSxLQUFLLE9BQU87S0FDckMsZ0JBQWdCO0lBQ2xCO0lBQ0EsTUFBTSxLQUFLLFVBQVU7S0FDbkI7S0FDQSxXQUFXO0tBQ1gsTUFBTSx1QkFBdUIsZ0JBQWdCLFFBQVE7SUFDdkQsQ0FBQztHQUNILENBQUM7R0FFRCxJQUFJLENBQUMsb0JBQW9CLElBQ3ZCLE1BQU0sSUFBSSxNQUFNLHlCQUF5QixvQkFBb0IsUUFBUTtFQUV6RTs7OztFQUtBLE1BQU0sYUFDSixTQUNBLElBQ0EsU0FDQSxXQUNlO0dBQ2YsTUFBTSxTQUFTLEtBQUs7R0FDcEIsT0FBTyxRQUFRLEdBQUcsd0NBQXdDLENBQUM7R0FFM0QsTUFBTSxrQkFBa0IsYUFBYSxLQUFLLGFBQWE7R0FDdkQsTUFBTSw2QkFBWSxJQUFJLEtBQUssRUFBQyxDQUFDLGVBQWUsU0FBUyxFQUNuRCxVQUFVLGFBQ1osQ0FBQztHQUdELE1BQU0sY0FDSixRQUFRLFNBQVMsSUFDYixRQUNHLFFBQVEsTUFBTSxFQUFFLFFBQVEsU0FBUyxDQUFDLENBQUMsQ0FDbkMsS0FBSyxNQUFNLElBQUksRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FDMUUsS0FBSyxNQUFNLElBQ2Q7R0FFTixNQUFNLFdBQVcsTUFBTSxNQUFNLDBDQUEwQztJQUNyRSxRQUFRO0lBQ1IsU0FBUztLQUNQLGVBQWUsVUFBVSxPQUFPO0tBQ2hDLGdCQUFnQjtJQUNsQjtJQUNBLE1BQU0sS0FBSyxVQUFVO0tBQ25CO0tBQ0EsV0FBVztLQUNYLE1BQU0sMEJBQTBCLGdCQUFnQixRQUFRLFVBQVUsWUFBWTtJQUNoRixDQUFDO0dBQ0gsQ0FBQztHQUVELElBQUksQ0FBQyxTQUFTLElBQ1osTUFBTSxJQUFJLE1BQU0seUJBQXlCLFNBQVMsUUFBUTtFQUU5RDtDQUNGIn0=
|
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stY29uZmlybS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9uL3NsYWNrLWNvbmZpcm0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi9kaWN0L3NkXCI7XG5pbXBvcnQgeyB0eXBlIE1pZ3JhdGlvblJlc3VsdCB9IGZyb20gXCIuL21pZ3JhdG9yXCI7XG5cbmV4cG9ydCB0eXBlIFNsYWNrQ29uZmlybVJlc3VsdCA9IHtcbiAgc3RhdHVzOiBcImFwcHJvdmVkXCIgfCBcInJlamVjdGVkXCIgfCBcInBlbmRpbmdcIiB8IFwibm90X2NvbmZpZ3VyZWRcIiB8IFwiZXJyb3JcIjtcbiAgdHM/OiBzdHJpbmc7XG4gIGNoYW5uZWw/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdCA9IHtcbiAgdHlwZTogXCJwZW5kaW5nXCI7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgdHM6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBTbGFja0NvbmZpcm0ge1xuICBwcml2YXRlIGNvbmZpZyA9IFNvbmFtdS5jb25maWcuc2xhY2tDb25maXJtO1xuXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWd1cmVkVGFyZ2V0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRUYXJnZXRzID0gT2JqZWN0LmtleXMoU29uYW11LmRiQ29uZmlnKTtcbiAgICBjb25zdCBpbnZhbGlkVGFyZ2V0cyA9IHRoaXMuY29uZmlnLnRhcmdldHMuZmlsdGVyKCh0YXJnZXQpID0+ICF2YWxpZFRhcmdldHMuaW5jbHVkZXModGFyZ2V0KSk7XG5cbiAgICBpZiAoaW52YWxpZFRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgYXNzZXJ0LmZhaWwoXG4gICAgICAgIFNEKFwic29uYW11LmVycm9yLnNsYWNrQ29uZmlybUludmFsaWRUYXJnZXRzXCIpKFxuICAgICAgICAgIGludmFsaWRUYXJnZXRzLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICB2YWxpZFRhcmdldHMuam9pbihcIiwgXCIpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7ISk7KCV7J20IOyeiOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqL1xuICBpc0NvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gICAgdGhpcy52YWxpZGF0ZUNvbmZpZ3VyZWRUYXJnZXRzKCk7XG4gICAgcmV0dXJuICEhKHRoaXMuY29uZmlnPy5ib3RUb2tlbiAmJiB0aGlzLmNvbmZpZz8uY2hhbm5lbElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlbTri7kgdGFyZ2V07J20IOyKueyduCDrjIDsg4Hsnbjsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgKi9cbiAgaXNUYXJnZXRSZXF1aXJlc0FwcHJvdmFsKHRhcmdldDoga2V5b2YgU29uYW11REJDb25maWcpOiBib29sZWFuIHtcbiAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJlZFRhcmdldHMoKTtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnRhcmdldHM/LmluY2x1ZGVzKHRhcmdldCkgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICog66eI7J206re466CI7J207IWYIOuqqeuhneydmCDtlbTsi5zrpbwg7IOd7ISx7ZWp64uI64ukLlxuICAgKi9cbiAgZ2V0TWlncmF0aW9uc0hhc2gobWlncmF0aW9uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5taWdyYXRpb25zXS50b1NvcnRlZCgpO1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUoc29ydGVkLmpvaW4oXCIsXCIpKS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgMTIpO1xuICB9XG5cbiAgLyoqXG4gICAqIOuhnOy7rCDtjIzsnbwg6rK966Gc66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q29uZmlybUZpbGVQYXRoKGhhc2g6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwibWlncmF0aW9uc1wiLCBgLnNsYWNrLWNvbmZpcm0tJHtoYXNofWApO1xuICB9XG5cbiAgLyoqXG4gICAqIOq4sOyhtCDsirnsnbgg7JqU7LKt7J2EIOyhsO2ajO2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGdldEV4aXN0aW5nUmVxdWVzdChtaWdyYXRpb25zOiBzdHJpbmdbXSk6IFByb21pc2U8eyBjaGFubmVsOiBzdHJpbmc7IHRzOiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRNaWdyYXRpb25zSGFzaChtaWdyYXRpb25zKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0Q29uZmlybUZpbGVQYXRoKGhhc2gpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IFtjaGFubmVsLCB0c10gPSBjb250ZW50LnRyaW0oKS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2hhbm5lbCAmJiB0cykge1xuICAgICAgICByZXR1cm4geyBjaGFubmVsLCB0cyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7Iq57J24IOyalOyyreydhCDsoIDsnqXtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBzYXZlUmVxdWVzdChtaWdyYXRpb25zOiBzdHJpbmdbXSwgY2hhbm5lbDogc3RyaW5nLCB0czogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0TWlncmF0aW9uc0hhc2gobWlncmF0aW9ucyk7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldENvbmZpcm1GaWxlUGF0aChoYXNoKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIGAke2NoYW5uZWx9OiR7dHN9YCwgXCJ1dGYtOFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtmITsnqwg7IKs7Jqp7J6QIOydtOumhOydhCDrsJjtmZjtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGdldFJlcXVlc3RvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5VU0VSID8/IG9zLnVzZXJJbmZvKCkudXNlcm5hbWUgPz8gXCJVbmtub3duXCI7XG4gIH1cblxuICAvKipcbiAgICog7Iqs656ZIOuplOyLnOyngOulvCDrsJzshqHtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBwb3N0QXBwcm92YWxSZXF1ZXN0KFxuICAgIG1pZ3JhdGlvbnM6IHN0cmluZ1tdLFxuICAgIHRhcmdldHM6IHN0cmluZ1tdLFxuICAgIHJlcXVlc3Rvcj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IGNoYW5uZWw6IHN0cmluZzsgdHM6IHN0cmluZyB9PiB7XG4gICAgYXNzZXJ0KHRoaXMuY29uZmlnLCBTRChcInNvbmFtdS5lcnJvci5zbGFja0NvbmZpcm1Ob3RDb25maWd1cmVkXCIpKTtcbiAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJlZFRhcmdldHMoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwczovL3NsYWNrLmNvbS9hcGkvY2hhdC5wb3N0TWVzc2FnZVwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jb25maWcuYm90VG9rZW59YCxcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjaGFubmVsOiB0aGlzLmNvbmZpZy5jaGFubmVsSWQsXG4gICAgICAgIHRleHQ6IHRoaXMuYnVpbGRNZXNzYWdlVGV4dChtaWdyYXRpb25zLCB0YXJnZXRzLCByZXF1ZXN0b3IgPz8gdGhpcy5nZXRSZXF1ZXN0b3IoKSksXG4gICAgICAgIHVuZnVybF9saW5rczogZmFsc2UsXG4gICAgICAgIHVuZnVybF9tZWRpYTogZmFsc2UsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIEhUVFAgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPVxuICAgICAgLyogU0FGRVRZOiBLbmV47JmAIFBvc3RncmVTUUwg7Iqk7YKk66eIIOyhsO2ajCDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgIG9rOiBib29sZWFuO1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgICAgY2hhbm5lbDogc3RyaW5nO1xuICAgICAgICB0czogc3RyaW5nO1xuICAgICAgfTtcbiAgICBpZiAoIWRhdGEub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIGVycm9yOiAke2RhdGEuZXJyb3J9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYW5uZWw6IGRhdGEuY2hhbm5lbCxcbiAgICAgIHRzOiBkYXRhLnRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog66mU7Iuc7KeAIO2FjeyKpO2KuOulvCDsg53shLHtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTWVzc2FnZVRleHQobWlncmF0aW9uczogc3RyaW5nW10sIHRhcmdldHM6IHN0cmluZ1tdLCByZXF1ZXN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJvamVjdE5hbWUgPSBTb25hbXUuY29uZmlnLnByb2plY3ROYW1lID8/IFwiVW5rbm93blwiO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoXCJrby1LUlwiLCB7XG4gICAgICB0aW1lWm9uZTogXCJBc2lhL1Nlb3VsXCIsXG4gICAgfSk7XG4gICAgY29uc3QgbWlncmF0aW9uc1RleHQgPSBtaWdyYXRpb25zLm1hcCgobSkgPT4gYOKAoiAke219YCkuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCB0YXJnZXRzVGV4dCA9IHRhcmdldHMuam9pbihcIiwgXCIpO1xuXG4gICAgcmV0dXJuIGDwn5eE77iPICpbJHtwcm9qZWN0TmFtZX1dIFByb2R1Y3Rpb24g66eI7J206re466CI7J207IWYIOyKueyduCDsmpTssq0qXG5cbirsmpTssq3snpA6KiAke3JlcXVlc3Rvcn1cbirrjIDsg4EgREI6KiAke3RhcmdldHNUZXh0fVxuKuyLnOqwhDoqICR7dGltZXN0YW1wfVxuXG4q7KCB7JqpIOyYiOyglSDrp4jsnbTqt7jroIjsnbTshZg6KlxuJHttaWdyYXRpb25zVGV4dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOyKueyduCDsg4Htg5zrpbwg7ZmV7J247ZWp64uI64ukIChyZWFjdGlvbnMuZ2V0KS5cbiAgICovXG4gIGFzeW5jIGNoZWNrQXBwcm92YWwoXG4gICAgY2hhbm5lbDogc3RyaW5nLFxuICAgIHRzOiBzdHJpbmcsXG4gICk6IFByb21pc2U8e1xuICAgIGFwcHJvdmVkOiBib29sZWFuO1xuICAgIHJlamVjdGVkOiBib29sZWFuO1xuICAgIGFwcHJvdmVyPzogc3RyaW5nO1xuICB9PiB7XG4gICAgYXNzZXJ0KHRoaXMuY29uZmlnLCBTRChcInNvbmFtdS5lcnJvci5zbGFja0NvbmZpcm1Ob3RDb25maWd1cmVkXCIpKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICBgaHR0cHM6Ly9zbGFjay5jb20vYXBpL3JlYWN0aW9ucy5nZXQ/Y2hhbm5lbD0ke2NoYW5uZWx9JnRpbWVzdGFtcD0ke3RzfWAsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmNvbmZpZy5ib3RUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbGFjayBBUEkgSFRUUCBlcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICAvKiBTQUZFVFk6IEtuZXjsmYAgUG9zdGdyZVNRTCDsiqTtgqTrp4gg7KGw7ZqMIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgb2s6IGJvb2xlYW47XG4gICAgICAgIGVycm9yPzogc3RyaW5nO1xuICAgICAgICBtZXNzYWdlPzoge1xuICAgICAgICAgIHJlYWN0aW9ucz86IEFycmF5PHtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHVzZXJzPzogc3RyaW5nW107XG4gICAgICAgICAgfT47XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIGlmICghZGF0YS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbGFjayBBUEkgZXJyb3I6ICR7ZGF0YS5lcnJvcn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWFjdGlvbnMgPSBkYXRhLm1lc3NhZ2U/LnJlYWN0aW9ucyA/PyBbXTtcbiAgICBjb25zdCBhcHByb3ZlZCA9IHJlYWN0aW9ucy5maW5kKChyKSA9PiByLm5hbWUgPT09IFwid2hpdGVfY2hlY2tfbWFya1wiKTtcbiAgICBjb25zdCByZWplY3RlZCA9IHJlYWN0aW9ucy5maW5kKChyKSA9PiByLm5hbWUgPT09IFwieFwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhcHByb3ZlZDogISFhcHByb3ZlZCxcbiAgICAgIHJlamVjdGVkOiAhIXJlamVjdGVkLFxuICAgICAgYXBwcm92ZXI6IGFwcHJvdmVkPy51c2Vycz8uWzBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yY2Ug7Iq57J24IOyymOumrOulvCDsiJjtlontlanri4jri6QgKOuzuOyduOydtCDinIUg7LCN6rOgIOyKpOugiOuTnOyXkCDsgqzsnKAg64Ko6rmAKS5cbiAgICovXG4gIGFzeW5jIGZvcmNlQXBwcm92YWwoXG4gICAgY2hhbm5lbDogc3RyaW5nLFxuICAgIHRzOiBzdHJpbmcsXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICAgcmVxdWVzdG9yPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhc3NlcnQodGhpcy5jb25maWcsIFNEKFwic29uYW11LmVycm9yLnNsYWNrQ29uZmlybU5vdENvbmZpZ3VyZWRcIikpO1xuICAgIGNvbnN0IGFjdHVhbFJlcXVlc3RvciA9IHJlcXVlc3RvciA/PyB0aGlzLmdldFJlcXVlc3RvcigpO1xuXG4gICAgLy8gMS4g4pyFIOydtOuqqOyngCDstpTqsIBcbiAgICBjb25zdCBhZGRSZWFjdGlvblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwczovL3NsYWNrLmNvbS9hcGkvcmVhY3Rpb25zLmFkZFwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jb25maWcuYm90VG9rZW59YCxcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjaGFubmVsLFxuICAgICAgICB0aW1lc3RhbXA6IHRzLFxuICAgICAgICBuYW1lOiBcIndoaXRlX2NoZWNrX21hcmtcIixcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgaWYgKCFhZGRSZWFjdGlvblJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNsYWNrIEFQSSBIVFRQIGVycm9yOiAke2FkZFJlYWN0aW9uUmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIC8vIDIuIOyKpOugiOuTnOyXkCDsgqzsnKAg64Ko6rmAXG4gICAgY29uc3QgcG9zdE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9zbGFjay5jb20vYXBpL2NoYXQucG9zdE1lc3NhZ2VcIiwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY29uZmlnLmJvdFRva2VufWAsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgdGhyZWFkX3RzOiB0cyxcbiAgICAgICAgdGV4dDogYOKaoO+4jyAqRm9yY2Ug7Iq57J24KlxcbuyalOyyreyekDogJHthY3R1YWxSZXF1ZXN0b3J9XFxu7IKs7JygOiAke3JlYXNvbn1gLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXBvc3RNZXNzYWdlUmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIEhUVFAgZXJyb3I6ICR7cG9zdE1lc3NhZ2VSZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOyLpO2WiSDsmYTro4wg66Gc6re466W8IOuCqOq5geuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGxvZ0V4ZWN1dGlvbihcbiAgICBjaGFubmVsOiBzdHJpbmcsXG4gICAgdHM6IHN0cmluZyxcbiAgICByZXN1bHRzOiBNaWdyYXRpb25SZXN1bHQsXG4gICAgcmVxdWVzdG9yPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBhc3NlcnQoY29uZmlnLCBTRChcInNvbmFtdS5lcnJvci5zbGFja0NvbmZpcm1Ob3RDb25maWd1cmVkXCIpKTtcblxuICAgIGNvbnN0IGFjdHVhbFJlcXVlc3RvciA9IHJlcXVlc3RvciA/PyB0aGlzLmdldFJlcXVlc3RvcigpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoXCJrby1LUlwiLCB7XG4gICAgICB0aW1lWm9uZTogXCJBc2lhL1Nlb3VsXCIsXG4gICAgfSk7XG5cbiAgICAvLyBEQuuzhOuhnCDqt7jro7ntmZTtlZjsl6wg7ZGc7Iuc7ZWp64uI64ukLlxuICAgIGNvbnN0IGFwcGxpZWRUZXh0ID1cbiAgICAgIHJlc3VsdHMubGVuZ3RoID4gMFxuICAgICAgICA/IHJlc3VsdHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHIpID0+IHIuYXBwbGllZC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgocikgPT4gYFske3IuY29ubktleX1dXFxuJHtyLmFwcGxpZWQubWFwKChtKSA9PiBg4oCiICR7bX1gKS5qb2luKFwiXFxuXCIpfWApXG4gICAgICAgICAgICAuam9pbihcIlxcblxcblwiKVxuICAgICAgICA6IFwiKOyXhuydjClcIjtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCJodHRwczovL3NsYWNrLmNvbS9hcGkvY2hhdC5wb3N0TWVzc2FnZVwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLmJvdFRva2VufWAsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgdGhyZWFkX3RzOiB0cyxcbiAgICAgICAgdGV4dDogYOKchSAq66eI7J206re466CI7J207IWYIOyLpO2WiSDsmYTro4wqXFxu7Iuk7ZaJ7J6QOiAke2FjdHVhbFJlcXVlc3Rvcn1cXG7si5zqsIQ6ICR7dGltZXN0YW1wfVxcblxcbuyggeyaqeuQqDpcXG4ke2FwcGxpZWRUZXh0fWAsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2xhY2sgQVBJIEhUVFAgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztDQU1zQyxZQUFBO0NBRVAsUUFBQTtDQWdCbEIsZUFBYixNQUEwQjtFQUN4QixTQUFpQixPQUFPLE9BQU87RUFFL0IsNEJBQTBDO0dBQ3hDLElBQUksQ0FBQyxLQUFLLFFBQ1I7R0FHRixNQUFNLGVBQWUsT0FBTyxLQUFLLE9BQU8sUUFBUTtHQUNoRCxNQUFNLGlCQUFpQixLQUFLLE9BQU8sUUFBUSxRQUFRLFdBQVcsQ0FBQyxhQUFhLFNBQVMsTUFBTSxDQUFDO0dBRTVGLElBQUksZUFBZSxTQUFTLEdBQzFC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
|
|
@@ -3,7 +3,7 @@ import { join } from "path";
|
|
|
3
3
|
import { homedir } from "os";
|
|
4
4
|
import { createHash } from "crypto";
|
|
5
5
|
import { connect } from "net";
|
|
6
|
-
|
|
6
|
+
// src/naite/naite-reporter.ts
|
|
7
7
|
/**
|
|
8
8
|
* NaiteReporter
|
|
9
9
|
*
|
|
@@ -123,7 +123,6 @@ var NaiteReporterClass = class {
|
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
125
|
const NaiteReporter = new NaiteReporterClass();
|
|
126
|
-
//#endregion
|
|
127
126
|
export { NaiteReporter };
|
|
128
127
|
|
|
129
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFpdGUtcmVwb3J0ZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25haXRlL25haXRlLXJlcG9ydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFpdGVSZXBvcnRlclxuICpcbiAqIO2FjOyKpO2KuCDqsrDqs7zsmYAgVHJhY2Ug7KCV67O066W8IFVuaXggU29ja2V07Jy866GcIFZTIENvZGUgZXh0ZW5zaW9u7JeQIOyghOuLrO2VqeuLiOuLpC5cbiAqIGV4dGVuc2lvbuydtCB+Ly5zb25hbXUvbmFpdGUte2hhc2h9LnNvY2vsl5Ag7IaM7LyTIOyEnOuyhOulvCDsl7TslrTrkaHri4jri6QuXG4gKlxuICog7ZSE66Gc7KCd7Yq467OE66GcIOqzoOycoO2VnCDshozsvJPsnYQg7IKs7Jqp7ZWY6riwIOychO2VtCBzb25hbXUuY29uZmlnLnRzIOqyveuhnOydmCDtlbTsi5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOuqqOuTiCDsi7HquIDthLTsnbTsp4Drp4wg7J247Iqk7YS07Iqk64qUIO2UhOuhnOyEuOyKpOuniOuLpCDrs4TqsJzsnoXri4jri6QuIHJ1bi9zdGFydMK3cnVuL2VuZOuKlFxuICogVml0ZXN0IOuplOyduCDtlITroZzshLjsiqQoTmFpdGVWaXRlc3RSZXBvcnRlciDsu6TsiqTthYAg66as7Y+s7YSwKeyXkOyEnCwgdGVzdC9yZXN1bHTripRcbiAqIOqwgSB3b3JrZXIg7ZSE66Gc7IS47IqkKGJvb3RzdHJhcOydmCBhZnRlckVhY2gp7JeQ7IScIOyghOyGoeuQmOuvgOuhnCBidWZmZXLsmYAg7IaM7LyTXG4gKiDsl7DqsrDsnYQg7ISc66GcIOqzteycoO2VmOyngCDslYrsirXri4jri6QuXG4gKlxuICogZnMgbW9jayDstqnrj4zsnYQg7ZS87ZWY6riwIOychO2VtCBuZXQg66qo65OI66eMIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuLyogb3hsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvLyBOYWl0ZeuKlCBleHBlY3TsmYAg7Zi47J2R7ZWY64+E66GdIGFueeulvCDtl4jsmqntlahcblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgeyB0eXBlIFNvY2tldCB9IGZyb20gXCJuZXRcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBmaW5kQXBpUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgTmFpdGVNZXNzYWdpbmdUeXBlcyB9IGZyb20gXCIuL21lc3NhZ2luZy10eXBlc1wiO1xuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg6rK966Gc66W8IOuwm+yVhOyEnCDtlITroZzsoJ3tirjrs4Qg6rOg7JygIO2VtOyLnOulvCDsg53shLHtlanri4jri6QuXG4gKiDsnbXsiqTthZDshZjqs7wg64+Z7J287ZWcIOuwqeyLneycvOuhnCDqs4TsgrDtlbTslbwg7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRQcm9qZWN0SGFzaChjb25maWdQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUoY29uZmlnUGF0aCkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDgpO1xufVxuXG4vKipcbiAqIO2YhOyerCDtlITroZzsoJ3tirjsnZgg7IaM7LyTIOqyveuhnOulvCDqs4TsgrDtlanri4jri6QuXG4gKiBTb25hbXUuYXBpUm9vdFBhdGjqsIAg7ISk7KCV65CcIO2bhOyXkCDtmLjstpztlbTslbwg7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRTb2NrZXRQYXRoKCk6IHN0cmluZyB7XG4gIC8vIHNvbmFtdS5jb25maWcudHPsnZgg7KCI64yAIOqyveuhnCDqs4TsgrBcbiAgLy8gYXBpUm9vdFBhdGjripQgL3Byb2plY3QvYXBpIO2Yle2DnOydtOqzoCwgY29uZmln64qUIC9wcm9qZWN0L2FwaS9zcmMvc29uYW11LmNvbmZpZy50c+yXkCDsnojsnYxcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oZmluZEFwaVJvb3RQYXRoKCksIFwic3JjXCIsIFwic29uYW11LmNvbmZpZy50c1wiKTtcbiAgY29uc3QgaGFzaCA9IGdldFByb2plY3RIYXNoKGNvbmZpZ1BhdGgpO1xuXG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCJcbiAgICA/IGBcXFxcXFxcXC5cXFxccGlwZVxcXFxuYWl0ZS0ke2hhc2h9YFxuICAgIDogam9pbihob21lZGlyKCksIFwiLnNvbmFtdVwiLCBgbmFpdGUtJHtoYXNofS5zb2NrYCk7XG59XG5cbi8qKlxuICog7Jew6rKwIOyLpO2MqOqwgCDsp4Dsho3rkKAg65WMKGV4dGVuc2lvbiDrr7jsi6Ttlokg65OxKSBidWZmZXLqsIAg66y07ZWc7Z6IIOy7pOyngOyngCDslYrrj4TroZ1cbiAqIOy1nOq3vCDrqZTsi5zsp4Drp4wg7J20IOqwnOyImOunjO2BvCDsnKDsp4Dtlanri4jri6QuXG4gKi9cbmNvbnN0IE1BWF9CVUZGRVJFRF9NRVNTQUdFUyA9IDEwMDA7XG5cbmNsYXNzIE5haXRlUmVwb3J0ZXJDbGFzcyB7XG4gIHByaXZhdGUgc29ja2V0UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ja2V0OiBTb2NrZXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidWZmZXI6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIOyGjOy8kyDsl7DqsrAg7Iuc64+EXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGVkIHx8IHRoaXMuc29ja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNvY2tldFBhdGgpIHtcbiAgICAgICAgdGhpcy5zb2NrZXRQYXRoID0gZ2V0U29ja2V0UGF0aCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zb2NrZXQgPSBjb25uZWN0KHRoaXMuc29ja2V0UGF0aCk7XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgLy8g67KE7Y287JeQIOyMk+yduCDrqZTsi5zsp4Ag7KCE7IahXG4gICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQ/LndyaXRlKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgcmVzKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zb2NrZXQub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAvLyDsl7DqsrAg7Iuk7YyoIOustOyLnCAoZXh0ZW5zaW9u7J20IOq6vOyguOyeiOydhCDsiJgg7J6I7J2MKVxuICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHJlaihlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog66mU7Iuc7KeAIOyghOyGoSAo7KSE67CU6r+I7Jy866GcIOq1rOu2hClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZChkYXRhOiBOYWl0ZU1lc3NhZ2luZ1R5cGVzLk5haXRlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1zZyA9IGAke0pTT04uc3RyaW5naWZ5KGRhdGEpfVxcbmA7XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZUNvbm5lY3Rpb24oKS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0ZWQgJiYgdGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuc29ja2V0LndyaXRlKG1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOyXsOqysCDrjIDquLAg7KSR7J2066m0IOuyhO2NvOyXkCDsoIDsnqUsIOyDge2VnCDstIjqs7wg7IucIOyYpOuemOuQnCDrqZTsi5zsp4DrtoDthLAg7Y+Q6riwXG4gICAgICB0aGlzLmJ1ZmZlci5wdXNoKG1zZyk7XG4gICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID4gTUFYX0JVRkZFUkVEX01FU1NBR0VTKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZpdGVzdCDsu6TsiqTthYAg66as7Y+s7YSwKE5haXRlVml0ZXN0UmVwb3J0ZXIp7J2YIG9uVGVzdFJ1blN0YXJ07JeQ7IScIO2YuOy2nO2VqeuLiOuLpC5cbiAgICog7YWM7Iqk7Yq4IHJ1biDsi5zsnpHsnYQg7JWM66a964uI64ukICjrjbDsnbTthLAg7YG066as7Ja0IOyLoO2YuCkuXG4gICAqL1xuICBhc3luYyBzdGFydFRlc3RSdW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwicnVuL3N0YXJ0XCIsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib290c3RyYXAoKeydmCBhZnRlckVhY2jsl5DshJwg7Zi47Lac7ZWp64uI64ukLlxuICAgKiDthYzsiqTtirgg7LyA7J207IqkIOqysOqzvOulvCB0cmFjZXPsmYAg7ZWo6ruYIOyghOyGoe2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlcG9ydFRlc3RSZXN1bHQoXG4gICAgcmVzdWx0OiBPbWl0PE5haXRlTWVzc2FnaW5nVHlwZXMuVGVzdFJlc3VsdCwgXCJyZWNlaXZlZEF0XCI+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgdHlwZTogXCJ0ZXN0L3Jlc3VsdFwiLFxuICAgICAgcmVjZWl2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgLi4ucmVzdWx0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpdGVzdCDsu6TsiqTthYAg66as7Y+
|
|
128
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFpdGUtcmVwb3J0ZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25haXRlL25haXRlLXJlcG9ydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFpdGVSZXBvcnRlclxuICpcbiAqIO2FjOyKpO2KuCDqsrDqs7zsmYAgVHJhY2Ug7KCV67O066W8IFVuaXggU29ja2V07Jy866GcIFZTIENvZGUgZXh0ZW5zaW9u7JeQIOyghOuLrO2VqeuLiOuLpC5cbiAqIGV4dGVuc2lvbuydtCB+Ly5zb25hbXUvbmFpdGUte2hhc2h9LnNvY2vsl5Ag7IaM7LyTIOyEnOuyhOulvCDsl7TslrTrkaHri4jri6QuXG4gKlxuICog7ZSE66Gc7KCd7Yq467OE66GcIOqzoOycoO2VnCDshozsvJPsnYQg7IKs7Jqp7ZWY6riwIOychO2VtCBzb25hbXUuY29uZmlnLnRzIOqyveuhnOydmCDtlbTsi5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOuqqOuTiCDsi7HquIDthLTsnbTsp4Drp4wg7J247Iqk7YS07Iqk64qUIO2UhOuhnOyEuOyKpOuniOuLpCDrs4TqsJzsnoXri4jri6QuIHJ1bi9zdGFydMK3cnVuL2VuZOuKlFxuICogVml0ZXN0IOuplOyduCDtlITroZzshLjsiqQoTmFpdGVWaXRlc3RSZXBvcnRlciDsu6TsiqTthYAg66as7Y+s7YSwKeyXkOyEnCwgdGVzdC9yZXN1bHTripRcbiAqIOqwgSB3b3JrZXIg7ZSE66Gc7IS47IqkKGJvb3RzdHJhcOydmCBhZnRlckVhY2gp7JeQ7IScIOyghOyGoeuQmOuvgOuhnCBidWZmZXLsmYAg7IaM7LyTXG4gKiDsl7DqsrDsnYQg7ISc66GcIOqzteycoO2VmOyngCDslYrsirXri4jri6QuXG4gKlxuICogZnMgbW9jayDstqnrj4zsnYQg7ZS87ZWY6riwIOychO2VtCBuZXQg66qo65OI66eMIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuLyogb3hsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvLyBOYWl0ZeuKlCBleHBlY3TsmYAg7Zi47J2R7ZWY64+E66GdIGFueeulvCDtl4jsmqntlahcblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgeyB0eXBlIFNvY2tldCB9IGZyb20gXCJuZXRcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBmaW5kQXBpUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgTmFpdGVNZXNzYWdpbmdUeXBlcyB9IGZyb20gXCIuL21lc3NhZ2luZy10eXBlc1wiO1xuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg6rK966Gc66W8IOuwm+yVhOyEnCDtlITroZzsoJ3tirjrs4Qg6rOg7JygIO2VtOyLnOulvCDsg53shLHtlanri4jri6QuXG4gKiDsnbXsiqTthZDshZjqs7wg64+Z7J287ZWcIOuwqeyLneycvOuhnCDqs4TsgrDtlbTslbwg7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRQcm9qZWN0SGFzaChjb25maWdQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUoY29uZmlnUGF0aCkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDgpO1xufVxuXG4vKipcbiAqIO2YhOyerCDtlITroZzsoJ3tirjsnZgg7IaM7LyTIOqyveuhnOulvCDqs4TsgrDtlanri4jri6QuXG4gKiBTb25hbXUuYXBpUm9vdFBhdGjqsIAg7ISk7KCV65CcIO2bhOyXkCDtmLjstpztlbTslbwg7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRTb2NrZXRQYXRoKCk6IHN0cmluZyB7XG4gIC8vIHNvbmFtdS5jb25maWcudHPsnZgg7KCI64yAIOqyveuhnCDqs4TsgrBcbiAgLy8gYXBpUm9vdFBhdGjripQgL3Byb2plY3QvYXBpIO2Yle2DnOydtOqzoCwgY29uZmln64qUIC9wcm9qZWN0L2FwaS9zcmMvc29uYW11LmNvbmZpZy50c+yXkCDsnojsnYxcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oZmluZEFwaVJvb3RQYXRoKCksIFwic3JjXCIsIFwic29uYW11LmNvbmZpZy50c1wiKTtcbiAgY29uc3QgaGFzaCA9IGdldFByb2plY3RIYXNoKGNvbmZpZ1BhdGgpO1xuXG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCJcbiAgICA/IGBcXFxcXFxcXC5cXFxccGlwZVxcXFxuYWl0ZS0ke2hhc2h9YFxuICAgIDogam9pbihob21lZGlyKCksIFwiLnNvbmFtdVwiLCBgbmFpdGUtJHtoYXNofS5zb2NrYCk7XG59XG5cbi8qKlxuICog7Jew6rKwIOyLpO2MqOqwgCDsp4Dsho3rkKAg65WMKGV4dGVuc2lvbiDrr7jsi6Ttlokg65OxKSBidWZmZXLqsIAg66y07ZWc7Z6IIOy7pOyngOyngCDslYrrj4TroZ1cbiAqIOy1nOq3vCDrqZTsi5zsp4Drp4wg7J20IOqwnOyImOunjO2BvCDsnKDsp4Dtlanri4jri6QuXG4gKi9cbmNvbnN0IE1BWF9CVUZGRVJFRF9NRVNTQUdFUyA9IDEwMDA7XG5cbmNsYXNzIE5haXRlUmVwb3J0ZXJDbGFzcyB7XG4gIHByaXZhdGUgc29ja2V0UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ja2V0OiBTb2NrZXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidWZmZXI6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIOyGjOy8kyDsl7DqsrAg7Iuc64+EXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGVkIHx8IHRoaXMuc29ja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNvY2tldFBhdGgpIHtcbiAgICAgICAgdGhpcy5zb2NrZXRQYXRoID0gZ2V0U29ja2V0UGF0aCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zb2NrZXQgPSBjb25uZWN0KHRoaXMuc29ja2V0UGF0aCk7XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgLy8g67KE7Y287JeQIOyMk+yduCDrqZTsi5zsp4Ag7KCE7IahXG4gICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQ/LndyaXRlKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgcmVzKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zb2NrZXQub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAvLyDsl7DqsrAg7Iuk7YyoIOustOyLnCAoZXh0ZW5zaW9u7J20IOq6vOyguOyeiOydhCDsiJgg7J6I7J2MKVxuICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHJlaihlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog66mU7Iuc7KeAIOyghOyGoSAo7KSE67CU6r+I7Jy866GcIOq1rOu2hClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZChkYXRhOiBOYWl0ZU1lc3NhZ2luZ1R5cGVzLk5haXRlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1zZyA9IGAke0pTT04uc3RyaW5naWZ5KGRhdGEpfVxcbmA7XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZUNvbm5lY3Rpb24oKS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0ZWQgJiYgdGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuc29ja2V0LndyaXRlKG1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOyXsOqysCDrjIDquLAg7KSR7J2066m0IOuyhO2NvOyXkCDsoIDsnqUsIOyDge2VnCDstIjqs7wg7IucIOyYpOuemOuQnCDrqZTsi5zsp4DrtoDthLAg7Y+Q6riwXG4gICAgICB0aGlzLmJ1ZmZlci5wdXNoKG1zZyk7XG4gICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID4gTUFYX0JVRkZFUkVEX01FU1NBR0VTKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZpdGVzdCDsu6TsiqTthYAg66as7Y+s7YSwKE5haXRlVml0ZXN0UmVwb3J0ZXIp7J2YIG9uVGVzdFJ1blN0YXJ07JeQ7IScIO2YuOy2nO2VqeuLiOuLpC5cbiAgICog7YWM7Iqk7Yq4IHJ1biDsi5zsnpHsnYQg7JWM66a964uI64ukICjrjbDsnbTthLAg7YG066as7Ja0IOyLoO2YuCkuXG4gICAqL1xuICBhc3luYyBzdGFydFRlc3RSdW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwicnVuL3N0YXJ0XCIsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib290c3RyYXAoKeydmCBhZnRlckVhY2jsl5DshJwg7Zi47Lac7ZWp64uI64ukLlxuICAgKiDthYzsiqTtirgg7LyA7J207IqkIOqysOqzvOulvCB0cmFjZXPsmYAg7ZWo6ruYIOyghOyGoe2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlcG9ydFRlc3RSZXN1bHQoXG4gICAgcmVzdWx0OiBPbWl0PE5haXRlTWVzc2FnaW5nVHlwZXMuVGVzdFJlc3VsdCwgXCJyZWNlaXZlZEF0XCI+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgdHlwZTogXCJ0ZXN0L3Jlc3VsdFwiLFxuICAgICAgcmVjZWl2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgLi4ucmVzdWx0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpdGVzdCDsu6TsiqTthYAg66as7Y+s7YSwKE5haXRlVml0ZXN0UmVwb3J0ZXIp7J2YIG9uVGVzdFJ1bkVuZOyXkOyEnCDtmLjstpztlanri4jri6QuXG4gICAqIO2FjOyKpO2KuCBydW4g7KKF66OM66W8IOyVjOumveuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGVuZFRlc3RSdW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwicnVuL2VuZFwiLFxuICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH0pO1xuXG4gICAgLy8g7Jew6rKwIOyiheujjFxuICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgdGhpcy5zb2NrZXQuZW5kKCk7XG4gICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3Qg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
|