@query-farm/vgi 0.38.0 → 0.39.0
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/client/client.d.ts +31 -2
- package/dist/client/types.d.ts +56 -1
- package/dist/client-entry.js +99 -8
- package/dist/client-entry.js.map +4 -4
- package/dist/functions/copy-to.d.ts +1 -1
- package/dist/index.core.d.ts +1 -1
- package/dist/index.js +99 -8
- package/dist/index.js.map +6 -6
- package/dist/serve-entry.js.map +1 -1
- package/dist/worker-cf-entry.js.map +3 -3
- package/package.json +1 -1
- package/src/client/client.ts +148 -0
- package/src/client/types.ts +58 -1
- package/src/codec/asd.ts +12 -8
- package/src/functions/copy-to.ts +1 -1
- package/src/index.core.ts +2 -0
package/dist/index.js.map
CHANGED
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// TableFunctionCardinalityRequest / TableCardinality wire serialization.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary } from \"../../arrow/index.js\";\nimport type { TableFunctionCardinalityRequest, TableCardinality } from \"../types.js\";\nimport { deserializeBatch, batchToScalarDict } from \"../../util/arrow/index.js\";\nimport { toUint8Array } from \"./shared.js\";\nimport { deserializeBindRequest } from \"./bind.js\";\n\nconst TABLE_FUNCTION_CARDINALITY_REQUEST_SCHEMA = schema([\n field(\"bind_call\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n]);\n\nexport function deserializeCardinalityRequest(\n params: Record<string, any>\n): TableFunctionCardinalityRequest {\n const bindCallBytes = toUint8Array(params.bind_call);\n const bindCallBatch = deserializeBatch(bindCallBytes);\n const bindParams = batchToScalarDict(bindCallBatch);\n const bindCall = deserializeBindRequest(bindParams);\n\n return {\n bind_call: bindCall,\n bind_opaque_data: params.bind_opaque_data\n ? toUint8Array(params.bind_opaque_data)\n : null,\n };\n}\n\nexport function serializeTableCardinality(\n card: TableCardinality\n): Record<string, any> {\n return {\n estimate: card.estimate,\n max: card.max,\n };\n}\n\n// The TableCardinality result shape used to be restated here as well; it is\n// generated as TableFunctionCardinalityResultSchema, which is what\n// handlers/function.ts already wraps with. Only the request shape stays hand-\n// written, because codegen emits no schema for the inner request record (the\n// generated Params schema is just the `{request: binary}` envelope).\nexport { TABLE_FUNCTION_CARDINALITY_REQUEST_SCHEMA };\n",
|
|
48
48
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Table sink+source (\"table_buffering\") function implementation.\n//\n// Three phases, mirroring the C++ PhysicalVgiTableBuffering Sink+Source\n// operator:\n// 1. Sink — process(batch, params) -> state_id (bytes), one per input\n// batch. Driven by the unary `table_buffering_process` RPC.\n// 2. Combine — combine(state_ids, params) -> finalize_state_ids (bytes[]),\n// once on the coordinator. Driven by `table_buffering_combine`.\n// 3. Source — finalize(params, fid, state, out) producer-mode streaming,\n// one batch per tick. Driven by an init() stream with\n// phase=TABLE_BUFFERING_FINALIZE.\n//\n// CROSS-PROCESS INVARIANT: state written in process() that finalize() reads\n// MUST live in cross-process storage scoped by execution_id (BoundStorage).\n// The Source phase may route a finalize_state_id to a worker process that\n// did NOT run the corresponding process() calls.\n\nimport {\n type VgiSchema,\n schema,\n type VgiDataType,\n type VgiBatch,\n nullType,\n} from \"../arrow/index.js\";\nimport type { OutputCollector } from \"@query-farm/vgi-rpc\";\nimport { DEFAULT_MAX_WORKERS, TableInOutPhase } from \"../types.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n TableFunctionCardinalityRequest,\n} from \"../protocol/types.js\";\nimport type { TableCardinality } from \"../types.js\";\nimport type {\n VgiFunction,\n FunctionMeta,\n StreamHandlers,\n FunctionExample,\n} from \"./types.js\";\nimport type { ArgumentConstraints, ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport {\n assertArrowType,\n assertArrowTypes,\n constraintSpecFields,\n validateConstConstraints,\n} from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, projectSchema } from \"../util/arrow/index.js\";\nimport { batchFromColumns, readCanonicalValue } from \"../arrow/index.js\";\nimport { codecFor } from \"../arrow/codec/registry.js\";\nimport {\n deserializeFilters,\n FilteringOutputCollector,\n type PushdownFilters,\n} from \"../filter-pushdown/index.js\";\nimport { FunctionStability } from \"../types.js\";\nimport { BoundStorage, storage as defaultStorage, FrameworkNS } from \"./storage.js\";\nimport {\n serializeInitRequest,\n deserializeInitRequest,\n serializeGlobalInitResponse,\n} from \"../protocol/serialize.js\";\nimport { serializeBatch, deserializeBatch } from \"../util/arrow/index.js\";\n\n// ============================================================================\n// Parameter bundles\n// ============================================================================\n\nexport interface TableBufferingBindParams<TArgs = Record<string, any>> {\n args: TArgs;\n bindCall: BindRequest;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n /** True on the second bind pass, after the connector resolved the secrets\n * requested via the onBind `lookupSecret*` return fields on the first pass. */\n resolvedSecretsProvided: boolean;\n /** Resolved names aligned with the complete logical argument order. */\n argumentNames?: (string | null)[] | null;\n}\n\nexport interface TableBufferingParams<TArgs = Record<string, any>> {\n args: TArgs;\n initCall: InitRequest;\n outputSchema: VgiSchema;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n /** Shared cross-process storage scoped by execution_id. */\n storage: BoundStorage;\n /** Stable across coordinator + secondary workers for one DuckDB execution. */\n executionId: Uint8Array;\n /** Catalog attach identity (plaintext bytes). */\n attachId: Uint8Array;\n /** Hex/raw VGI transaction id, or null. */\n transactionId: Uint8Array | null;\n function_name: string;\n /** Per-chunk batch_index when requiresInputBatchIndex=true; else null. */\n batchIndex: number | null;\n /** In-band log sink for the unary process()/combine() RPCs. */\n clientLog: (level: string, message: string) => void;\n}\n\n// ============================================================================\n// Functional API config\n// ============================================================================\n\nexport interface TableBufferingConfig<\n TArgs = Record<string, any>,\n TState = any,\n> {\n name: string;\n description?: string;\n args?: Record<string, VgiDataType>;\n namedArgs?: Record<string, VgiDataType>;\n argDefaults?: Record<string, any>;\n /** Authoritative typed defaults: one row, defaulted parameters only. */\n parameterDefaultValues?: VgiBatch | null;\n /** Argument descriptions keyed by argument name. */\n argDocs?: Record<string, string>;\n /** Discovery constraints, also enforced for scalar arguments at bind. */\n argConstraints?: Record<string, ArgumentConstraints>;\n /** Bind: default passes through input schema. May be async. Return non-empty\n * `lookupSecret*` lists on the first pass to request DuckDB secrets; the\n * connector then re-binds with `resolvedSecretsProvided` and the resolved\n * values are available in the process/finalize params' `secrets`. */\n onBind?: (params: TableBufferingBindParams<TArgs>) =>\n | {\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }\n | Promise<{\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }>;\n /** Sink: ingest one batch, return an opaque state_id. */\n process: (\n batch: VgiBatch,\n params: TableBufferingParams<TArgs>,\n ) => Uint8Array | Promise<Uint8Array>;\n /** Combine: group/merge state_ids, return finalize_state_ids. */\n combine: (\n stateIds: Uint8Array[],\n params: TableBufferingParams<TArgs>,\n ) => Uint8Array[] | Promise<Uint8Array[]>;\n /** Build the initial per-tick finalize state for a finalize_state_id. */\n initialFinalizeState?: (\n finalizeStateId: Uint8Array,\n params: TableBufferingParams<TArgs>,\n ) => TState | Promise<TState>;\n /** Source tick: emit one batch via out.emit / signal EOS via out.finish. */\n finalize: (\n params: TableBufferingParams<TArgs>,\n finalizeStateId: Uint8Array,\n state: TState,\n out: OutputCollector,\n ) => void | Promise<void>;\n cardinality?: (\n params: TableBufferingBindParams<TArgs>,\n ) => TableCardinality | Promise<TableCardinality>;\n // Metadata\n projectionPushdown?: boolean;\n filterPushdown?: boolean;\n autoApplyFilters?: boolean;\n /** Force ParallelSink=false in the C++ operator (single-thread ingest). */\n sinkOrderDependent?: boolean;\n /** Force serial Source drain in finalize_queue order. */\n sourceOrderDependent?: boolean;\n /** Thread DuckDB's per-chunk batch_index into every process() call. */\n requiresInputBatchIndex?: boolean;\n stability?: FunctionStability;\n examples?: FunctionExample[];\n categories?: string[];\n tags?: Record<string, string>;\n maxWorkers?: number;\n requiredSettings?: string[];\n requiredSecrets?: string[];\n}\n\n/**\n * A table_buffering VgiFunction also carries its callback config so the\n * protocol's unary handlers (process/combine/destructor) can reach it.\n */\nexport interface TableBufferingVgiFunction extends VgiFunction {\n bufferingConfig: TableBufferingConfig<any, any>;\n bufferingExtractArgs: (request: BindRequest) => any;\n}\n\nexport function defineTableBufferingFunction<\n TArgs = Record<string, any>,\n TState = any,\n>(config: TableBufferingConfig<TArgs, TState>): TableBufferingVgiFunction {\n assertArrowTypes((config as any).args, `defineTableBufferingFunction(\"${config.name}\"): args`);\n\n if (config.sinkOrderDependent && config.requiresInputBatchIndex) {\n throw new Error(\n `${config.name}: sinkOrderDependent and requiresInputBatchIndex are ` +\n `mutually exclusive — single-thread sink already orders input.`,\n );\n }\n\n const specs: ArgumentSpec[] = [];\n let posIdx = 0;\n if (config.args) {\n for (const [name, type] of Object.entries(config.args)) {\n specs.push({\n name,\n position: posIdx++,\n arrowType: type,\n doc: config.argDocs?.[name],\n ...constraintSpecFields(\n config.argConstraints?.[name],\n config.argDefaults?.[name],\n ),\n });\n }\n }\n specs.push({\n name: \"data\",\n position: posIdx++,\n arrowType: nullType(),\n isTableInput: true,\n });\n if (config.namedArgs) {\n for (const [name, type] of Object.entries(config.namedArgs)) {\n specs.push({\n name,\n position: name,\n arrowType: type,\n doc: config.argDocs?.[name],\n ...constraintSpecFields(\n config.argConstraints?.[name],\n config.argDefaults?.[name],\n ),\n });\n }\n }\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n stability: config.stability,\n projectionPushdown: config.projectionPushdown,\n filterPushdown: config.filterPushdown,\n autoApplyFilters: config.autoApplyFilters,\n examples: config.examples,\n categories: config.categories,\n tags: config.tags,\n parameterDefaultValues: config.parameterDefaultValues,\n maxWorkers: config.maxWorkers,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n // The Source phase always runs (it's how output is produced), so a\n // table_buffering function always advertises has_finalize.\n hasFinalize: true,\n sinkOrderDependent: config.sinkOrderDependent,\n sourceOrderDependent: config.sourceOrderDependent,\n requiresInputBatchIndex: config.requiresInputBatchIndex,\n };\n\n function extractArgs(request: BindRequest): TArgs {\n const args: Record<string, any> = {};\n for (const spec of specs) {\n if (spec.isTableInput) continue;\n const defaultVal =\n config.argDefaults?.[spec.name] !== undefined\n ? config.argDefaults[spec.name]\n : undefined;\n let val = request.arguments.get(spec.position, defaultVal);\n if (typeof val === \"bigint\") val = Number(val);\n const constraints = config.argConstraints?.[spec.name];\n if (constraints) validateConstConstraints(spec.name, constraints, val);\n args[spec.name] = val;\n }\n return args as TArgs;\n }\n\n const func: TableBufferingVgiFunction = {\n kind: \"table_buffering\" as any,\n meta,\n argumentSpecs: specs,\n bufferingConfig: config as TableBufferingConfig<any, any>,\n bufferingExtractArgs: extractArgs as any,\n\n async bind(request: BindRequest): Promise<BindResponse> {\n if (config.onBind) {\n const args = extractArgs(request);\n const settings = batchToScalarDict(request.settings);\n const secrets = batchToSecretDict(request.secrets);\n const result = await config.onBind({\n args,\n bindCall: request,\n settings,\n secrets,\n resolvedSecretsProvided: request.resolved_secrets_provided ?? false,\n argumentNames: request.argument_names ?? null,\n });\n return {\n output_schema: result.outputSchema,\n opaque_data: result.opaqueData ?? null,\n lookup_secret_types: result.lookupSecretTypes,\n lookup_scopes: result.lookupScopes,\n lookup_names: result.lookupNames,\n };\n }\n return {\n output_schema: request.input_schema ?? schema([]),\n opaque_data: null,\n };\n },\n\n async globalInit(request: InitRequest): Promise<GlobalInitResponse> {\n // Mint a stable execution_id for the primary; secondary inits reuse it.\n let executionId: Uint8Array;\n if (request.execution_id) {\n executionId = request.execution_id;\n } else {\n executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n }\n const response: GlobalInitResponse = {\n max_workers: config.maxWorkers ?? DEFAULT_MAX_WORKERS,\n execution_id: executionId,\n opaque_data: null,\n };\n\n // On the sink-side init, persist init metadata so any pool worker can\n // cold-load it when serving subsequent process()/combine() unary RPCs\n // (which carry no init context themselves). Mirrors Python's\n // FrameworkNS.BUFFERING_INIT state_put.\n if (request.phase === TableInOutPhase.TABLE_BUFFERING) {\n const bound = new BoundStorage(defaultStorage, executionId);\n await bound.statePut(\n FrameworkNS.BUFFERING_INIT,\n BoundStorage.packIntKey(-1),\n encodeBufferingInit(request, response),\n );\n }\n return response;\n },\n\n createStreamHandlers(\n request: InitRequest,\n response: GlobalInitResponse,\n ): StreamHandlers {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n\n const projIds = request.projection_ids && meta.projectionPushdown\n ? request.projection_ids\n : null;\n const outputSchema = projIds\n ? projectSchema(projIds, request.output_schema)\n : request.output_schema;\n\n const pushdownFilters = request.pushdown_filters\n ? deserializeFilters(request.pushdown_filters, {\n outputSchema: request.output_schema,\n joinKeyBatches: request.join_keys,\n extensionFunctions: meta.additionalFilterFunctions,\n runtimeAlgorithms: meta.runtimeFilterAlgorithms,\n evaluationContexts: meta.filterEvaluationContexts,\n })\n : undefined;\n\n const bound = new BoundStorage(\n defaultStorage,\n response.execution_id ?? new Uint8Array(16),\n );\n\n const params: TableBufferingParams<TArgs> = {\n args,\n initCall: request,\n outputSchema,\n settings,\n secrets,\n storage: bound,\n executionId: response.execution_id,\n attachId: request.bind_call.attach_opaque_data ?? new Uint8Array(0),\n transactionId: request.bind_call.transaction_opaque_data ?? null,\n function_name: request.bind_call.function_name,\n batchIndex: null,\n clientLog: () => {},\n };\n\n if (request.phase === TableInOutPhase.TABLE_BUFFERING_FINALIZE) {\n // SOURCE phase: producer-mode streaming, one batch per tick.\n const finalizeStateId = request.finalize_state_id ?? new Uint8Array(0);\n return {\n outputSchema,\n producerInit: () => ({ state: { __tbf_uninit: true } as any }),\n producerFn: async (\n pState: { state: any },\n out: OutputCollector,\n ) => {\n // Lazily build the user's per-tick state on the first tick.\n // pState.state round-trips through the HTTP exchange-state token\n // between ticks; `__tbf_uninit` marks \"not yet initialized\".\n let userState: any = pState.state;\n if (userState && userState.__tbf_uninit) {\n userState = config.initialFinalizeState\n ? await config.initialFinalizeState(finalizeStateId, params)\n : null;\n pState.state = userState ?? null;\n } else {\n userState = pState.state;\n }\n\n // Narrow each emitted (full-width) buffered batch to the projected\n // output schema, then auto-apply pushdown filters. Mirrors the\n // streaming TableFunctionGenerator path: project first, filter\n // second.\n let wrappedOut: OutputCollector = projIds\n ? makeProjectingCollector(out, outputSchema)\n : out;\n if (config.autoApplyFilters && pushdownFilters) {\n wrappedOut = new FilteringOutputCollector(wrappedOut, pushdownFilters) as unknown as OutputCollector;\n }\n\n await config.finalize(params, finalizeStateId, userState, wrappedOut);\n\n // Persist the (possibly mutated) user state for the next tick.\n pState.state = userState ?? null;\n },\n };\n }\n\n // SINK-init phase (TABLE_BUFFERING): the C++ side opens the init stream\n // in exchange mode, immediately sends EOS, and drains output to EOS.\n // We produce nothing — the real sink traffic is the separate unary\n // table_buffering_process / _combine RPCs.\n return {\n outputSchema,\n inputSchema: request.bind_call.input_schema ?? undefined,\n exchangeInit: () => ({ state: null }),\n exchangeFn: async (\n _state: any,\n _input: VgiBatch,\n _out: OutputCollector,\n ) => {\n // No-op: no per-batch output on the sink-init stream.\n },\n };\n },\n };\n\n if (config.cardinality) {\n func.cardinality = async (request: TableFunctionCardinalityRequest) => {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n return config.cardinality!({\n args,\n bindCall: request.bind_call,\n settings,\n secrets,\n resolvedSecretsProvided: request.bind_call.resolved_secrets_provided ?? false,\n });\n };\n }\n\n return func;\n}\n\n// Wrap an OutputCollector so each emitted batch is projected-by-name to the\n// target (narrowed) output schema before forwarding. Mirrors table.ts's\n// makeProjectingCollector — buffered batches are stored full-width, so the\n// Source phase narrows them per-tick to the projected columns.\nfunction makeProjectingCollector(\n inner: OutputCollector,\n targetSchema: VgiSchema,\n): OutputCollector {\n function alreadyMatches(batch: VgiBatch): boolean {\n if (batch.schema.fields.length !== targetSchema.fields.length) return false;\n for (let i = 0; i < targetSchema.fields.length; i++) {\n if (batch.schema.fields[i].name !== targetSchema.fields[i].name) return false;\n }\n return true;\n }\n function project(batch: VgiBatch): VgiBatch {\n if (alreadyMatches(batch)) return batch;\n const cols: Record<string, any[]> = {};\n for (const f of targetSchema.fields) {\n const src = batch.getChild(f.name);\n if (src) {\n // Canonical read -> rich so the rebuild goes through the codec path\n // (backend-agnostic, lossless) rather than the raw `.get(i)`.\n const type = f.type as VgiDataType;\n const codec = codecFor(type);\n const arr: any[] = [];\n for (let i = 0; i < batch.numRows; i++) {\n arr.push(codec.canonicalToRich(readCanonicalValue(type, src, i)));\n }\n cols[f.name] = arr;\n } else {\n cols[f.name] = new Array(batch.numRows).fill(null);\n }\n }\n return batchFromColumns(cols, targetSchema);\n }\n return new Proxy(inner, {\n get(target, prop, receiver) {\n if (prop === \"emit\") {\n return function (\n this: OutputCollector,\n batchOrColumns: VgiBatch | Record<string, any[]>,\n metadata?: Map<string, string>,\n ) {\n if (batchOrColumns && typeof (batchOrColumns as any).getChild === \"function\") {\n return (target as any).emit(project(batchOrColumns as VgiBatch), metadata);\n }\n return (target as any).emit(batchOrColumns, metadata);\n };\n }\n const v = Reflect.get(target, prop, receiver);\n return typeof v === \"function\" ? v.bind(target) : v;\n },\n });\n}\n\n// ============================================================================\n// Init-metadata persistence (mirrors Python _encode/_decode_table_buffering_init)\n// ============================================================================\n\nexport function encodeBufferingInit(\n request: InitRequest,\n response: GlobalInitResponse,\n): Uint8Array {\n // Serialize the InitRequest batch and the GlobalInitResponse so any pool\n // worker can cold-rebuild params when serving a process()/combine() RPC.\n const initBatch = serializeInitRequest(request);\n const initBytes = serializeBatch(initBatch);\n const respBatch = serializeGlobalInitResponse(response);\n // GlobalInitResponse serializer returns a plain dict; rebuild a 1-row batch.\n // Simpler: re-serialize as a length-prefixed pair of byte blobs.\n const respBytes = encodeGlobalInitResponse(respBatch);\n return concatLenPrefixed([initBytes, respBytes]);\n}\n\nexport function decodeBufferingInit(\n payload: Uint8Array,\n): { request: InitRequest; response: GlobalInitResponse } {\n const [initBytes, respBytes] = splitLenPrefixed(payload, 2);\n const initBatch = deserializeBatch(initBytes);\n const initDict = batchToScalarDict(initBatch);\n const request = deserializeInitRequest(initDict);\n const response = decodeGlobalInitResponse(respBytes);\n return { request, response };\n}\n\nfunction encodeGlobalInitResponse(dict: Record<string, any>): Uint8Array {\n // Encode { execution_id, opaque_data, max_workers } as length-prefixed blobs.\n const eid: Uint8Array = dict.execution_id ?? new Uint8Array(0);\n const opaque: Uint8Array | null = dict.opaque_data ?? null;\n const maxWorkers = Number(dict.max_workers ?? 1);\n const mwBuf = new Uint8Array(8);\n new DataView(mwBuf.buffer).setBigInt64(0, BigInt(maxWorkers), true);\n return concatLenPrefixed([eid, opaque ?? new Uint8Array(0), mwBuf]);\n}\n\nfunction decodeGlobalInitResponse(bytes: Uint8Array): GlobalInitResponse {\n const [eid, opaque, mwBuf] = splitLenPrefixed(bytes, 3);\n const maxWorkers = Number(new DataView(mwBuf.buffer, mwBuf.byteOffset, 8).getBigInt64(0, true));\n return {\n execution_id: eid,\n opaque_data: opaque.length > 0 ? opaque : null,\n max_workers: maxWorkers,\n };\n}\n\nfunction concatLenPrefixed(parts: Uint8Array[]): Uint8Array {\n let total = 0;\n for (const p of parts) total += 4 + p.length;\n const out = new Uint8Array(total);\n const dv = new DataView(out.buffer);\n let off = 0;\n for (const p of parts) {\n dv.setUint32(off, p.length, true);\n off += 4;\n out.set(p, off);\n off += p.length;\n }\n return out;\n}\n\nfunction splitLenPrefixed(buf: Uint8Array, count: number): Uint8Array[] {\n const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n const parts: Uint8Array[] = [];\n let off = 0;\n for (let i = 0; i < count; i++) {\n const len = dv.getUint32(off, true);\n off += 4;\n parts.push(buf.subarray(off, off + len));\n off += len;\n }\n return parts;\n}\n",
|
|
49
49
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Custom `COPY ... FROM` format reader.\n//\n// A CopyFromFunction lets a VGI catalog act as a remote file-format reader: the\n// user runs `COPY target FROM 'path' (FORMAT <name>, opt val, ...)` and the\n// worker parses the source and streams Arrow batches that DuckDB inserts into\n// the local `target` table. FROM only (no COPY TO).\n//\n// Mechanically this is an ordinary producer-mode table function (it reuses the\n// table-function bind/init/scan path on both sides). What makes it a COPY format\n// is twofold:\n// * it sets `meta.copyFromFormat` to the SQL FORMAT identifier, and\n// * the catalog advertises it via `copyFromFormats()` (the\n// `catalog_copy_from_formats` RPC), so the VGI DuckDB extension registers a\n// DuckDB CopyFunction for it.\n//\n// The COPY statement's file path and the target table's schema arrive on the\n// bind through `BindRequest.copy_from` (CopyFromContext). The COPY options\n// arrive as the function's normal named arguments. Mirrors vgi-python's\n// `vgi.copy_from_function.CopyFromFunction`.\n\nimport { type VgiSchema, type VgiDataType } from \"../arrow/index.js\";\nimport type { OutputCollector } from \"@query-farm/vgi-rpc\";\nimport { DEFAULT_MAX_WORKERS } from \"../types.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport type { VgiFunction, FunctionMeta, StreamHandlers, FunctionExample } from \"./types.js\";\nimport type { CopySecretLookup } from \"./copy-to.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport { narrowArgValue } from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, safeNumber } from \"../util/arrow/index.js\";\nimport { BoundStorage, storage as globalStorage } from \"./storage.js\";\nimport type { TableProcessParams } from \"./table.js\";\n\n/** Declaration of a single COPY option (a named function argument). */\nexport interface CopyFromOption {\n /** Arrow type of the option value (e.g. `utf8()`, `int64()`). */\n type: VgiDataType;\n /** Per-option description, surfaced by `vgi_copy_formats()`. */\n doc?: string;\n /**\n * Default value. When omitted the option is REQUIRED — the worker throws a\n * clear error at COPY bind if the user does not supply it. Mirrors\n * vgi-python's `Arg(..., default=...)` (no default => required).\n */\n default?: unknown;\n /**\n * Optional allowed value set, validated worker-side at bind. Mirrors\n * vgi-python's `Arg(..., choices=[...])`.\n */\n choices?: unknown[];\n}\n\nexport interface CopyFromReadParams<TArgs = Record<string, unknown>> {\n /** Source path from the `COPY ... FROM 'path'` statement. */\n path: string;\n /** Parsed COPY options (defaults applied). */\n options: TArgs;\n /**\n * The COPY target's schema. Every emitted batch must have this exact schema\n * (names + types, in order) — DuckDB inserts no cast before the INSERT.\n */\n expectedSchema: VgiSchema;\n /** Full process parameters (settings, secrets, storage). */\n processParams: TableProcessParams<TArgs>;\n /** Collector to emit batches / log. `finish()` is called for you. */\n out: OutputCollector;\n}\n\nexport interface CopyFromFunctionConfig<TArgs = Record<string, unknown>> {\n /** Handler name (the function's registered name; `Meta.name`). */\n name: string;\n /** SQL `FORMAT` identifier users type, e.g. `COPY t FROM 'x' (FORMAT myfmt)`. */\n format: string;\n /** Function description (intrinsic documentation; `Meta.description`). */\n description?: string;\n /** Optional free-text comment surfaced by `vgi_copy_formats()`. */\n comment?: string | null;\n /** Reserved for a future `COPY ... TO`; only `\"from\"` is supported today. */\n direction?: string;\n /** COPY options, keyed by option name. The `file_path` is NOT an option. */\n options?: Record<string, CopyFromOption>;\n categories?: string[];\n tags?: Record<string, string>;\n examples?: FunctionExample[];\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /**\n * Optional secret-bind hook: forward CREATE SECRET credentials for\n * secret-backed cloud sources (S3/GCS/HTTP/…). Called during bind (only on the\n * first pass); return the secrets to resolve — typically scoped by the source\n * `path`. The framework's two-phase secret bind resolves each lookup from the\n * caller's SecretManager and surfaces the resolved values on\n * `processParams.secrets` at `read` time. Mirrors vgi-python's\n * `CopyFromFunction.on_secrets`.\n */\n onSecrets?: (params: {\n options: TArgs;\n path: string;\n bindCall: BindRequest;\n }) => CopySecretLookup[] | void;\n /** Parse `path` and emit Arrow batches matching `expectedSchema`. */\n read: (params: CopyFromReadParams<TArgs>) => void | Promise<void>;\n}\n\n/**\n * Define a custom `COPY ... FROM` format reader, returned as a `VgiFunction`\n * (kind `\"table\"`) carrying the `copyFromFormat` metadata marker. Register it in\n * the catalog's function list like any table function; the catalog's\n * `copyFromFormats()` introspection picks it up and advertises the format.\n */\nexport function defineCopyFromFunction<TArgs = Record<string, unknown>>(\n config: CopyFromFunctionConfig<TArgs>,\n): VgiFunction {\n // Build named-argument specs from the options. COPY passes options by name,\n // so every option is a named argument (string position).\n const specs: ArgumentSpec[] = [];\n for (const [name, opt] of Object.entries(config.options ?? {})) {\n specs.push({\n name,\n position: name, // named argument\n arrowType: opt.type,\n doc: opt.doc,\n });\n }\n\n const options = config.options ?? {};\n const requiredNames = Object.entries(options)\n .filter(([, opt]) => !(\"default\" in opt))\n .map(([name]) => name);\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n categories: config.categories,\n tags: config.tags,\n examples: config.examples,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n copyFromFormat: config.format,\n copyFromDirection: config.direction ?? \"from\",\n copyFromComment: config.comment ?? null,\n };\n\n // Extract + validate the COPY options from the bind/init arguments. Options\n // arrive as named arguments; required ones (no default) must be present.\n function extractOptions(request: BindRequest): TArgs {\n const args: Record<string, unknown> = {};\n for (const [name, opt] of Object.entries(options)) {\n const hasDefault = \"default\" in opt;\n let val: unknown;\n try {\n val = request.arguments.get(name, hasDefault ? opt.default : undefined);\n } catch {\n val = hasDefault ? opt.default : undefined;\n }\n if (val === undefined || val === null) {\n if (!hasDefault) {\n throw new Error(\n `COPY (FORMAT ${config.format}): missing required option '${name}'`,\n );\n }\n val = opt.default;\n }\n val = narrowArgValue(val);\n if (opt.choices && !opt.choices.includes(val)) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${JSON.stringify(val)} ` +\n `is not one of ${JSON.stringify(opt.choices)}`,\n );\n }\n args[name] = val;\n }\n return args as TArgs;\n }\n\n function requireCopyFrom(request: BindRequest) {\n const cf = request.copy_from;\n if (cf == null) {\n throw new Error(\n `${config.name} is a COPY FROM format reader; invoke it via ` +\n `COPY <table> FROM '<path>' (FORMAT ${config.format}), not as a table function.`,\n );\n }\n return cf;\n }\n\n return {\n kind: \"table\",\n meta,\n argumentSpecs: specs,\n // Table functions determine output at bind time; the COPY target schema is\n // not known until bind, so advertise an empty default output schema.\n\n bind(request: BindRequest): BindResponse {\n const cf = requireCopyFrom(request);\n // Validate options eagerly so a missing/invalid option fails at COPY bind.\n const opts = extractOptions(request);\n // Forward any requested secrets on the first bind pass so the two-phase\n // secret bind resolves them (the resolved values reach read via\n // processParams.secrets).\n if (config.onSecrets && !request.resolved_secrets_provided) {\n const lookups =\n config.onSecrets({ options: opts, path: cf.file_path, bindCall: request }) ?? [];\n if (lookups.length > 0) {\n return {\n output_schema: cf.expected_schema,\n opaque_data: null,\n lookup_secret_types: lookups.map((l) => l.secretType),\n lookup_scopes: lookups.map((l) => l.scope ?? \"\"),\n lookup_names: lookups.map((l) => l.name ?? \"\"),\n };\n }\n }\n // DuckDB forces the scan's output to the target table's columns, so a\n // COPY-FROM reader must produce exactly expected_schema.\n return {\n output_schema: cf.expected_schema,\n opaque_data: null,\n };\n },\n\n globalInit(request: InitRequest): GlobalInitResponse {\n const executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n if (request.execution_id) {\n return { max_workers: 1, execution_id: request.execution_id, opaque_data: null };\n }\n return { max_workers: 1, execution_id: executionId, opaque_data: null };\n },\n\n createStreamHandlers(request: InitRequest, response: GlobalInitResponse): StreamHandlers {\n const cf = requireCopyFrom(request.bind_call);\n const args = extractOptions(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n const outputSchema = request.output_schema;\n const boundStorage = new BoundStorage(globalStorage, response.execution_id);\n\n const processParams: TableProcessParams<TArgs> = {\n args,\n initCall: request,\n initResponse: response,\n outputSchema,\n settings,\n secrets,\n storage: boundStorage,\n atUnit: request.bind_call.at_unit ?? undefined,\n atValue: request.bind_call.at_value ?? undefined,\n };\n\n return {\n outputSchema,\n // Single-shot: the whole source is read on the first producer tick. The\n // `done` guard lives under `.state` so it round-trips across HTTP\n // exchanges (the framework serializes handlerState.state).\n producerInit: () => ({ state: { done: false } }),\n producerFn: async (\n pState: { state: { done: boolean } },\n out: OutputCollector,\n ) => {\n if (pState.state.done) {\n out.finish();\n return;\n }\n await config.read({\n path: cf.file_path,\n options: args,\n expectedSchema: outputSchema,\n processParams,\n out,\n });\n pState.state.done = true;\n out.finish();\n },\n };\n },\n };\n}\n",
|
|
50
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Custom `COPY ... TO` format writer.\n//\n// A CopyToFunction lets a VGI catalog act as a remote sink: the user runs\n// `COPY (query|table) TO 'path' (FORMAT <name>, opt val, ...)` and DuckDB\n// streams the source rows out to the worker, which writes them to a\n// destination. The worker reports the row count; there is no Source phase.\n//\n// Mechanically a COPY-TO writer is a buffered (Sink+Combine) function with NO\n// Source phase — it reuses the entire table_buffering_process /\n// table_buffering_combine machinery on both sides:\n// * `write` is called once per input batch (the buffered process() step,\n// fanned out across DuckDB's sink threads / per-thread workers). Persist the\n// batch to a shard via `params.storage` (execution_id-scoped).\n// * `close` is called exactly once on the coordinator worker (the buffered\n// combine() step, driven by DuckDB's once-only copy_to_finalize). Read the\n// shards back and perform the terminal write+flush+close of the destination.\n//\n// There is no finalize/drain phase, so the destination MUST be fully written and\n// closed inside `close` — a writer that forgets leaves a silent partial file.\n//\n// CROSS-PROCESS INVARIANT: write() and close() may run on different worker\n// processes (pool rotation / HTTP). Any shard state close() needs MUST live in\n// cross-process storage scoped by params.executionId (params.storage), not on\n// `self` / module globals.\n//\n// What makes it a COPY format is twofold:\n// * it sets `meta.copyToFormat` to the SQL FORMAT identifier, and\n// * the catalog advertises it via `copyFromFormats()` (the\n// `catalog_copy_from_formats` RPC returns all directions), so the VGI DuckDB\n// extension registers a DuckDB CopyFunction for it.\n//\n// The destination path + format arrive on the bind through `BindRequest.copy_to`\n// (CopyToContext). The COPY options arrive as the function's normal named\n// arguments. The source schema rides `BindRequest.input_schema`. Mirrors\n// vgi-python's `vgi.copy_to_function.CopyToFunction`.\n\nimport { type VgiSchema, schema, type VgiBatch, type VgiDataType } from \"../arrow/index.js\";\nimport type { BindRequest } from \"../protocol/types.js\";\nimport type { FunctionMeta, FunctionExample } from \"./types.js\";\nimport { narrowArgValue } from \"../arguments/argument-spec.js\";\nimport { safeNumber } from \"../util/arrow/index.js\";\nimport {\n defineTableBufferingFunction,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./table-buffering.js\";\n\n/**\n * A single secret to resolve via the two-phase secret bind, returned from a COPY\n * format's `onSecrets` hook. Mirrors a vgi-python `SecretLookupEntry`.\n */\nexport interface CopySecretLookup {\n /** DuckDB secret type to resolve (e.g. `\"s3\"`, `\"vgi_example\"`). */\n secretType: string;\n /** Optional scope for longest-prefix matching — typically the COPY path. */\n scope?: string;\n /** Optional secret name for name-based lookup. */\n name?: string;\n}\n\n/** Declaration of a single COPY option (a named function argument). */\nexport interface CopyToOption {\n /** Arrow type of the option value (e.g. `utf8()`, `int64()`). */\n type: VgiDataType;\n /** Per-option description, surfaced by `vgi_copy_formats()`. */\n doc?: string;\n /**\n * Default value. When omitted the option is REQUIRED — the worker throws a\n * clear error at COPY bind if the user does not supply it. Mirrors\n * vgi-python's `Arg(..., default=...)` (no default => required).\n */\n default?: unknown;\n /**\n * Optional allowed value set, validated worker-side at bind. Mirrors\n * vgi-python's `Arg(..., choices=[...])`.\n */\n choices?: unknown[];\n /**\n * Optional inclusive lower bound for numeric options, validated worker-side at\n * bind. Mirrors vgi-python's `Arg(..., ge=...)`.\n */\n ge?: number;\n /**\n * Optional inclusive upper bound for numeric options, validated worker-side at\n * bind. Mirrors vgi-python's `Arg(..., le=...)`.\n */\n le?: number;\n}\n\n/** Parameters for the per-batch `write` hook. */\nexport interface CopyToWriteParams<TArgs = Record<string, unknown>> {\n /** One input batch from the COPY source. */\n batch: VgiBatch;\n /** Parsed COPY options (defaults applied). */\n options: TArgs;\n /** Destination path from the `COPY ... TO 'path'` statement. */\n filePath: string;\n /** Full buffering parameters (settings, secrets, storage, executionId). */\n params: TableBufferingParams<TArgs>;\n}\n\n/** Parameters for the terminal `close` hook. */\nexport interface CopyToCloseParams<TArgs = Record<string, unknown>> {\n /** Parsed COPY options (defaults applied). */\n options: TArgs;\n /** Destination path from the `COPY ... TO 'path'` statement. */\n filePath: string;\n /** Full buffering parameters (settings, secrets, storage, executionId). */\n params: TableBufferingParams<TArgs>;\n}\n\nexport interface CopyToFunctionConfig<TArgs = Record<string, unknown>> {\n /** Handler name (the function's registered name; `Meta.name`). */\n name: string;\n /** SQL `FORMAT` identifier users type, e.g. `COPY t TO 'x' (FORMAT myfmt)`. */\n format: string;\n /** Function description (intrinsic documentation; `Meta.description`). */\n description?: string;\n /** Optional free-text comment surfaced by `vgi_copy_formats()`. */\n comment?: string | null;\n /** COPY direction; only `\"to\"` is supported here. */\n direction?: string;\n /**\n * When true, the writer requires rows in source order — discovery advertises\n * `ordered=true` and the extension uses a single-threaded sink\n * (`REGULAR_COPY_TO_FILE`) so one worker receives every batch in source\n * order. Mirrors vgi-python's `Meta.sink_order_dependent`.\n */\n ordered?: boolean;\n /** COPY options, keyed by option name. The `file_path` is NOT an option. */\n options?: Record<string, CopyToOption>;\n categories?: string[];\n tags?: Record<string, string>;\n examples?: FunctionExample[];\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /**\n * Optional secret-bind hook: forward CREATE SECRET credentials for\n * secret-backed cloud writes (S3/GCS/HTTP/…). Called during bind (only on the\n * first pass); return the secrets to resolve — typically scoped by the\n * destination `filePath`. The framework's two-phase secret bind resolves each\n * lookup from the caller's SecretManager and surfaces the resolved values on\n * `params.secrets` at `write`/`close` time. Mirrors vgi-python's\n * `CopyToFunction.on_secrets`.\n */\n onSecrets?: (params: {\n options: TArgs;\n filePath: string;\n bindCall: BindRequest;\n }) => CopySecretLookup[] | void;\n /** Persist one input `batch` to a shard (called per sink batch). */\n write: (params: CopyToWriteParams<TArgs>) => void | Promise<void>;\n /**\n * Write the destination and close it, once (called on the coordinator). Read\n * the shards persisted by `write` and perform the terminal write. Called even\n * for empty input. Return the row count (informational).\n */\n close: (params: CopyToCloseParams<TArgs>) => number | void | Promise<number | void>;\n}\n\n/**\n * Define a custom `COPY ... TO` format writer, returned as a\n * `TableBufferingVgiFunction` (kind `\"table_buffering\"`) carrying the\n * `copyToFormat` metadata marker. Register it in the catalog's function list\n * like any function; the catalog's `copyFromFormats()` introspection picks it\n * up and advertises the format (direction `\"to\"`). The worker's\n * `table_buffering_process` / `table_buffering_combine` RPCs drive write/close.\n */\nexport function defineCopyToFunction<TArgs = Record<string, unknown>>(\n config: CopyToFunctionConfig<TArgs>,\n): TableBufferingVgiFunction {\n const options = config.options ?? {};\n\n // Named-argument types + defaults for the buffering function. COPY passes\n // options by name, so each option is a named argument.\n const namedArgs: Record<string, VgiDataType> = {};\n const argDefaults: Record<string, unknown> = {};\n for (const [name, opt] of Object.entries(options)) {\n namedArgs[name] = opt.type;\n if (\"default\" in opt) argDefaults[name] = opt.default;\n }\n\n // Extract + validate the COPY options. Required options (no default) must be\n // present; `choices` are enforced worker-side. Mirrors copy-from.ts.\n function extractOptions(request: BindRequest): TArgs {\n const args: Record<string, unknown> = {};\n for (const [name, opt] of Object.entries(options)) {\n const hasDefault = \"default\" in opt;\n let val: unknown;\n try {\n val = request.arguments.get(name, hasDefault ? opt.default : undefined);\n } catch {\n val = hasDefault ? opt.default : undefined;\n }\n if (val === undefined || val === null) {\n if (!hasDefault) {\n throw new Error(\n `COPY (FORMAT ${config.format}): missing required option '${name}'`,\n );\n }\n val = opt.default;\n }\n val = narrowArgValue(val);\n if (opt.choices && !opt.choices.includes(val)) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${JSON.stringify(val)} ` +\n `is not one of ${JSON.stringify(opt.choices)}`,\n );\n }\n if (typeof val === \"number\") {\n if (opt.ge !== undefined && val < opt.ge) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${val} ` +\n `is below the minimum ${opt.ge}`,\n );\n }\n if (opt.le !== undefined && val > opt.le) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${val} ` +\n `is above the maximum ${opt.le}`,\n );\n }\n }\n args[name] = val;\n }\n return args as TArgs;\n }\n\n function requireCopyTo(params: TableBufferingParams<TArgs>): string {\n const ct = params.initCall.bind_call.copy_to;\n if (ct == null) {\n throw new Error(\n `${config.name} is a COPY TO format writer; invoke it via ` +\n `COPY <source> TO '<path>' (FORMAT ${config.format}), not as a function.`,\n );\n }\n return ct.file_path;\n }\n\n const func = defineTableBufferingFunction<TArgs, null>({\n name: config.name,\n description: config.description,\n namedArgs,\n argDefaults,\n categories: config.categories,\n tags: config.tags,\n examples: config.examples,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n // A sink produces no rows — bind to an empty output schema. Validate the\n // options eagerly so a missing/invalid option fails at COPY bind. If the\n // writer declared an onSecrets hook, forward its requested lookups on the\n // first bind pass so the two-phase secret bind resolves them (the resolved\n // values reach write/close via params.secrets).\n onBind: ({ bindCall, resolvedSecretsProvided }) => {\n const opts = extractOptions(bindCall);\n if (config.onSecrets && !resolvedSecretsProvided) {\n const lookups =\n config.onSecrets({\n options: opts,\n filePath: bindCall.copy_to?.file_path ?? \"\",\n bindCall,\n }) ?? [];\n if (lookups.length > 0) {\n return {\n outputSchema: schema([]),\n lookupSecretTypes: lookups.map((l) => l.secretType),\n lookupScopes: lookups.map((l) => l.scope ?? \"\"),\n lookupNames: lookups.map((l) => l.name ?? \"\"),\n };\n }\n }\n return { outputSchema: schema([]) };\n },\n // SINK: persist one batch to a shard, bucket by execution_id.\n process: async (batch, params) => {\n const opts = extractOptions(params.initCall.bind_call);\n await config.write({\n batch,\n options: opts,\n filePath: requireCopyTo(params),\n params,\n });\n return params.executionId;\n },\n // COMBINE: terminal write+close, once on the coordinator. No finalize ids,\n // so the COPY path never drains output.\n combine: async (_stateIds, params) => {\n const opts = extractOptions(params.initCall.bind_call);\n await config.close({\n options: opts,\n filePath: requireCopyTo(params),\n params,\n });\n return [];\n },\n // Never invoked on the COPY-TO path (combine returns no finalize ids).\n finalize: (_params, _fid, _state, out) => {\n out.finish();\n },\n // Ordered writers need a single-thread sink (REGULAR_COPY_TO_FILE).\n sinkOrderDependent: config.ordered === true,\n });\n\n // Decorate the function's metadata with the COPY-TO format markers + attach\n // per-option docs to the argument specs so `vgi_copy_formats()` surfaces the\n // option descriptions (the buffering builder doesn't carry option docs).\n const meta = func.meta as FunctionMeta;\n meta.copyToFormat = config.format;\n meta.copyToDirection = config.direction ?? \"to\";\n meta.copyToComment = config.comment ?? null;\n for (const spec of func.argumentSpecs) {\n if (spec.isTableInput) continue;\n const opt = options[spec.name];\n if (opt?.doc) spec.doc = opt.doc;\n }\n\n return func;\n}\n",
|
|
50
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Custom `COPY ... TO` format writer.\n//\n// A CopyToFunction lets a VGI catalog act as a remote sink: the user runs\n// `COPY (query|table) TO 'path' (FORMAT <name>, opt val, ...)` and DuckDB\n// streams the source rows out to the worker, which writes them to a\n// destination. The worker reports the row count; there is no Source phase.\n//\n// Mechanically a COPY-TO writer is a buffered (Sink+Combine) function with NO\n// Source phase — it reuses the entire table_buffering_process /\n// table_buffering_combine machinery on both sides:\n// * `write` is called once per input batch (the buffered process() step,\n// fanned out across DuckDB's sink threads / per-thread workers). Persist the\n// batch to a shard via `params.storage` (execution_id-scoped).\n// * `close` is called exactly once on the coordinator worker (the buffered\n// combine() step, driven by DuckDB's once-only copy_to_finalize). Read the\n// shards back and perform the terminal write+flush+close of the destination.\n//\n// There is no finalize/drain phase, so the destination MUST be fully written and\n// closed inside `close` — a writer that forgets leaves a silent partial file.\n//\n// CROSS-PROCESS INVARIANT: write() and close() may run on different worker\n// processes (pool rotation / HTTP). Any shard state close() needs MUST live in\n// cross-process storage scoped by params.executionId (params.storage), not on\n// `self` / module globals.\n//\n// What makes it a COPY format is twofold:\n// * it sets `meta.copyToFormat` to the SQL FORMAT identifier, and\n// * the catalog advertises it via `copyFromFormats()` (the\n// `catalog_copy_from_formats` RPC returns all directions), so the VGI DuckDB\n// extension registers a DuckDB CopyFunction for it.\n//\n// The destination path + format arrive on the bind through `BindRequest.copy_to`\n// (CopyToContext). The COPY options arrive as the function's normal named\n// arguments. The source schema rides `BindRequest.input_schema`. Mirrors\n// vgi-python's `vgi.copy_to_function.CopyToFunction`.\n\nimport { type VgiSchema, schema, type VgiBatch, type VgiDataType } from \"../arrow/index.js\";\nimport type { BindRequest } from \"../protocol/types.js\";\nimport type { FunctionMeta, FunctionExample } from \"./types.js\";\nimport { narrowArgValue } from \"../arguments/argument-spec.js\";\nimport { safeNumber } from \"../util/arrow/index.js\";\nimport {\n defineTableBufferingFunction,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./table-buffering.js\";\n\n/**\n * A single secret to resolve via the two-phase secret bind, returned from a COPY\n * format's `onSecrets` hook. Mirrors a vgi-python `SecretLookupEntry`.\n */\nexport interface CopySecretLookup {\n /** DuckDB secret type to resolve (e.g. `\"s3\"`, `\"vgi_example\"`). */\n secretType: string;\n /** Optional scope for longest-prefix matching — typically the COPY path. */\n scope?: string;\n /** Optional secret name for name-based lookup. */\n name?: string;\n}\n\n/** Declaration of a single COPY option (a named function argument). */\nexport interface CopyToOption {\n /** Arrow type of the option value (e.g. `utf8()`, `int64()`). */\n type: VgiDataType;\n /** Per-option description, surfaced by `vgi_copy_formats()`. */\n doc?: string;\n /**\n * Default value. When omitted the option is REQUIRED — the worker throws a\n * clear error at COPY bind if the user does not supply it. Mirrors\n * vgi-python's `Arg(..., default=...)` (no default => required).\n */\n default?: unknown;\n /**\n * Optional allowed value set, validated worker-side at bind. Mirrors\n * vgi-python's `Arg(..., choices=[...])`.\n */\n choices?: readonly unknown[];\n /**\n * Optional inclusive lower bound for numeric options, validated worker-side at\n * bind. Mirrors vgi-python's `Arg(..., ge=...)`.\n */\n ge?: number;\n /**\n * Optional inclusive upper bound for numeric options, validated worker-side at\n * bind. Mirrors vgi-python's `Arg(..., le=...)`.\n */\n le?: number;\n}\n\n/** Parameters for the per-batch `write` hook. */\nexport interface CopyToWriteParams<TArgs = Record<string, unknown>> {\n /** One input batch from the COPY source. */\n batch: VgiBatch;\n /** Parsed COPY options (defaults applied). */\n options: TArgs;\n /** Destination path from the `COPY ... TO 'path'` statement. */\n filePath: string;\n /** Full buffering parameters (settings, secrets, storage, executionId). */\n params: TableBufferingParams<TArgs>;\n}\n\n/** Parameters for the terminal `close` hook. */\nexport interface CopyToCloseParams<TArgs = Record<string, unknown>> {\n /** Parsed COPY options (defaults applied). */\n options: TArgs;\n /** Destination path from the `COPY ... TO 'path'` statement. */\n filePath: string;\n /** Full buffering parameters (settings, secrets, storage, executionId). */\n params: TableBufferingParams<TArgs>;\n}\n\nexport interface CopyToFunctionConfig<TArgs = Record<string, unknown>> {\n /** Handler name (the function's registered name; `Meta.name`). */\n name: string;\n /** SQL `FORMAT` identifier users type, e.g. `COPY t TO 'x' (FORMAT myfmt)`. */\n format: string;\n /** Function description (intrinsic documentation; `Meta.description`). */\n description?: string;\n /** Optional free-text comment surfaced by `vgi_copy_formats()`. */\n comment?: string | null;\n /** COPY direction; only `\"to\"` is supported here. */\n direction?: string;\n /**\n * When true, the writer requires rows in source order — discovery advertises\n * `ordered=true` and the extension uses a single-threaded sink\n * (`REGULAR_COPY_TO_FILE`) so one worker receives every batch in source\n * order. Mirrors vgi-python's `Meta.sink_order_dependent`.\n */\n ordered?: boolean;\n /** COPY options, keyed by option name. The `file_path` is NOT an option. */\n options?: Record<string, CopyToOption>;\n categories?: string[];\n tags?: Record<string, string>;\n examples?: FunctionExample[];\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /**\n * Optional secret-bind hook: forward CREATE SECRET credentials for\n * secret-backed cloud writes (S3/GCS/HTTP/…). Called during bind (only on the\n * first pass); return the secrets to resolve — typically scoped by the\n * destination `filePath`. The framework's two-phase secret bind resolves each\n * lookup from the caller's SecretManager and surfaces the resolved values on\n * `params.secrets` at `write`/`close` time. Mirrors vgi-python's\n * `CopyToFunction.on_secrets`.\n */\n onSecrets?: (params: {\n options: TArgs;\n filePath: string;\n bindCall: BindRequest;\n }) => CopySecretLookup[] | void;\n /** Persist one input `batch` to a shard (called per sink batch). */\n write: (params: CopyToWriteParams<TArgs>) => void | Promise<void>;\n /**\n * Write the destination and close it, once (called on the coordinator). Read\n * the shards persisted by `write` and perform the terminal write. Called even\n * for empty input. Return the row count (informational).\n */\n close: (params: CopyToCloseParams<TArgs>) => number | void | Promise<number | void>;\n}\n\n/**\n * Define a custom `COPY ... TO` format writer, returned as a\n * `TableBufferingVgiFunction` (kind `\"table_buffering\"`) carrying the\n * `copyToFormat` metadata marker. Register it in the catalog's function list\n * like any function; the catalog's `copyFromFormats()` introspection picks it\n * up and advertises the format (direction `\"to\"`). The worker's\n * `table_buffering_process` / `table_buffering_combine` RPCs drive write/close.\n */\nexport function defineCopyToFunction<TArgs = Record<string, unknown>>(\n config: CopyToFunctionConfig<TArgs>,\n): TableBufferingVgiFunction {\n const options = config.options ?? {};\n\n // Named-argument types + defaults for the buffering function. COPY passes\n // options by name, so each option is a named argument.\n const namedArgs: Record<string, VgiDataType> = {};\n const argDefaults: Record<string, unknown> = {};\n for (const [name, opt] of Object.entries(options)) {\n namedArgs[name] = opt.type;\n if (\"default\" in opt) argDefaults[name] = opt.default;\n }\n\n // Extract + validate the COPY options. Required options (no default) must be\n // present; `choices` are enforced worker-side. Mirrors copy-from.ts.\n function extractOptions(request: BindRequest): TArgs {\n const args: Record<string, unknown> = {};\n for (const [name, opt] of Object.entries(options)) {\n const hasDefault = \"default\" in opt;\n let val: unknown;\n try {\n val = request.arguments.get(name, hasDefault ? opt.default : undefined);\n } catch {\n val = hasDefault ? opt.default : undefined;\n }\n if (val === undefined || val === null) {\n if (!hasDefault) {\n throw new Error(\n `COPY (FORMAT ${config.format}): missing required option '${name}'`,\n );\n }\n val = opt.default;\n }\n val = narrowArgValue(val);\n if (opt.choices && !opt.choices.includes(val)) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${JSON.stringify(val)} ` +\n `is not one of ${JSON.stringify(opt.choices)}`,\n );\n }\n if (typeof val === \"number\") {\n if (opt.ge !== undefined && val < opt.ge) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${val} ` +\n `is below the minimum ${opt.ge}`,\n );\n }\n if (opt.le !== undefined && val > opt.le) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${val} ` +\n `is above the maximum ${opt.le}`,\n );\n }\n }\n args[name] = val;\n }\n return args as TArgs;\n }\n\n function requireCopyTo(params: TableBufferingParams<TArgs>): string {\n const ct = params.initCall.bind_call.copy_to;\n if (ct == null) {\n throw new Error(\n `${config.name} is a COPY TO format writer; invoke it via ` +\n `COPY <source> TO '<path>' (FORMAT ${config.format}), not as a function.`,\n );\n }\n return ct.file_path;\n }\n\n const func = defineTableBufferingFunction<TArgs, null>({\n name: config.name,\n description: config.description,\n namedArgs,\n argDefaults,\n categories: config.categories,\n tags: config.tags,\n examples: config.examples,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n // A sink produces no rows — bind to an empty output schema. Validate the\n // options eagerly so a missing/invalid option fails at COPY bind. If the\n // writer declared an onSecrets hook, forward its requested lookups on the\n // first bind pass so the two-phase secret bind resolves them (the resolved\n // values reach write/close via params.secrets).\n onBind: ({ bindCall, resolvedSecretsProvided }) => {\n const opts = extractOptions(bindCall);\n if (config.onSecrets && !resolvedSecretsProvided) {\n const lookups =\n config.onSecrets({\n options: opts,\n filePath: bindCall.copy_to?.file_path ?? \"\",\n bindCall,\n }) ?? [];\n if (lookups.length > 0) {\n return {\n outputSchema: schema([]),\n lookupSecretTypes: lookups.map((l) => l.secretType),\n lookupScopes: lookups.map((l) => l.scope ?? \"\"),\n lookupNames: lookups.map((l) => l.name ?? \"\"),\n };\n }\n }\n return { outputSchema: schema([]) };\n },\n // SINK: persist one batch to a shard, bucket by execution_id.\n process: async (batch, params) => {\n const opts = extractOptions(params.initCall.bind_call);\n await config.write({\n batch,\n options: opts,\n filePath: requireCopyTo(params),\n params,\n });\n return params.executionId;\n },\n // COMBINE: terminal write+close, once on the coordinator. No finalize ids,\n // so the COPY path never drains output.\n combine: async (_stateIds, params) => {\n const opts = extractOptions(params.initCall.bind_call);\n await config.close({\n options: opts,\n filePath: requireCopyTo(params),\n params,\n });\n return [];\n },\n // Never invoked on the COPY-TO path (combine returns no finalize ids).\n finalize: (_params, _fid, _state, out) => {\n out.finish();\n },\n // Ordered writers need a single-thread sink (REGULAR_COPY_TO_FILE).\n sinkOrderDependent: config.ordered === true,\n });\n\n // Decorate the function's metadata with the COPY-TO format markers + attach\n // per-option docs to the argument specs so `vgi_copy_formats()` surfaces the\n // option descriptions (the buffering builder doesn't carry option docs).\n const meta = func.meta as FunctionMeta;\n meta.copyToFormat = config.format;\n meta.copyToDirection = config.direction ?? \"to\";\n meta.copyToComment = config.comment ?? null;\n for (const spec of func.argumentSpecs) {\n if (spec.isTableInput) continue;\n const opt = options[spec.name];\n if (opt?.doc) spec.doc = opt.doc;\n }\n\n return func;\n}\n",
|
|
51
51
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n\n/** Raw identifier components of a catalog schema, from root to leaf. */\nexport type SchemaPath = string[];\n\n/** Case-insensitive key used for catalog lookup and function dispatch. */\nexport function normalizeSchemaPath(path: Iterable<unknown> | string): string[] {\n return typeof path === \"string\" ? [path] : Array.from(path, String);\n}\n\nexport function schemaPathKey(path: Iterable<unknown> | string): string {\n const normalized = normalizeSchemaPath(path);\n if (normalized.length === 0 || normalized.some((part) => part.length === 0)) {\n throw new Error(\"schema paths must contain at least one non-empty component\");\n }\n return normalized.map((part) => part.toLowerCase()).join(\"\\u0000\");\n}\n\nexport function schemaPathsEqual(left: Iterable<unknown> | string, right: Iterable<unknown> | string): boolean {\n return schemaPathKey(left) === schemaPathKey(right);\n}\n\nexport function schemaPathDisplay(path: Iterable<unknown> | string): string {\n return normalizeSchemaPath(path).map((part) => JSON.stringify(part)).join(\".\");\n}\n",
|
|
52
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n/**\n * Generic ArrowSerializableDataclass (ASD) codec.\n *\n * Bridges between typed TS objects (snake_case, matching vgi-python dataclass\n * field names) and Arrow IPC bytes (single-row batch with the dataclass'\n * ARROW_SCHEMA). Used by the generated vgi-client.ts encode<X>/decode<X>\n * wrappers to make the typed client interfaces honest at the wire boundary.\n *\n * Encoding delegates to the facade's `batchFromRows` (which handles the\n * complex types — Decimal/BigInt/List/Map/Struct/Dictionary — uniformly\n * across both arrow-js and flechette backends). Decoding pulls each field's\n * value with `batchToScalarDict`, then runs `normalizeValue` to convert\n * Arrow representations (MapRow, BigInt, etc.) back into plain JS shapes.\n */\n\nimport {\n type VgiSchema,\n type VgiField,\n type VgiDataType,\n isBinary,\n isBool,\n isDictionary,\n isInt,\n isList,\n isMap,\n isStruct,\n batchFromRows,\n serializeBatch,\n deserializeBatch,\n} from \"../arrow/index.js\";\n\n/**\n * Encode a typed object as a single-row Arrow IPC stream using `schema`.\n * Matches Python's `ArrowSerializableDataclass.serialize_to_bytes()`.\n */\nexport function encodeASD(\n schema: VgiSchema,\n obj: Record<string, any>,\n): Uint8Array {\n return serializeBatch(batchFromRows([sortMapsForSchema(schema, obj)], schema));\n}\n\n// --------------------------------------------------------------------------- //\n// Encode side: deterministic map columns\n// --------------------------------------------------------------------------- //\n//\n// A map value arrives as a JS object (or Map / pair list), whose iteration\n// order is insertion order -- except that integer-like keys (\"1\", \"2\") always\n// come first, ascending. Two builds of the same record could therefore encode\n// differently (and a catalog_contents content-hash etag would change with no\n// catalog change). Every map is written in sorted key order instead, matching\n// the Go / Java / C# / Rust SDKs: keys compared by Unicode code point (the\n// same order as comparing their UTF-8 bytes), not by UTF-16 code unit.\n\n/** Compare two strings by Unicode code point (= UTF-8 byte order). */\nexport function compareCodePoints(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n for (let i = 0; i < n; i++) {\n const x = a.charCodeAt(i);\n const y = b.charCodeAt(i);\n if (x === y) continue;\n // A surrogate (a code point above U+FFFF) sorts after every BMP code unit,\n // though as a code unit (0xD800-0xDFFF) it sorts below U+E000-U+FFFF.\n const xs = x >= 0xd800 && x <= 0xdfff;\n const ys = y >= 0xd800 && y <= 0xdfff;\n if (xs !== ys) return xs ? 1 : -1;\n return x - y;\n }\n return a.length - b.length;\n}\n\nfunction mapPairs(raw: any): Array<[unknown, unknown]> {\n if (Array.isArray(raw)) return raw.map((e: any) => (Array.isArray(e) ? [e[0], e[1]] : [e?.key, e?.value]));\n if (raw instanceof Map) return Array.from(raw.entries());\n if (typeof raw[Symbol.iterator] === \"function\") return Array.from(raw as Iterable<[unknown, unknown]>);\n return Object.entries(raw);\n}\n\nfunction compareKeys(a: unknown, b: unknown): number {\n if (typeof a === \"string\" && typeof b === \"string\") return compareCodePoints(a, b);\n if ((typeof a === \"number\" || typeof a === \"bigint\") && (typeof b === \"number\" || typeof b === \"bigint\")) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n return compareCodePoints(String(a), String(b));\n}\n\n/** Whether a type contains a map anywhere (memoized per type object). */\nconst HAS_MAP = new WeakMap<object, boolean>();\nfunction typeHasMap(type: VgiDataType): boolean {\n const cached = HAS_MAP.get(type as object);\n if (cached !== undefined) return cached;\n let has = isMap(type);\n if (!has && (isList(type) || isStruct(type))) {\n has = ((type as any).children as VgiField[]).some((c) => typeHasMap(c.type));\n }\n HAS_MAP.set(type as object, has);\n return has;\n}\n\nfunction sortMapsForType(type: VgiDataType, value: any): any {\n if (value == null || !typeHasMap(type)) return value;\n if (isMap(type)) {\n const entries = (type as any).children[0].type as VgiDataType;\n const valueType = ((entries as any).children as VgiField[])[1].type;\n return mapPairs(value)\n .map(([k, v]): [unknown, unknown] => [k, sortMapsForType(valueType, v)])\n .sort((x, y) => compareKeys(x[0], y[0]));\n }\n if (isList(type)) {\n const child = (type as any).children[0].type as VgiDataType;\n return Array.from(value as Iterable<unknown>, (v) => sortMapsForType(child, v));\n }\n if (isStruct(type)) {\n const out: Record<string, any> = { ...value };\n for (const cf of (type as any).children as VgiField[]) out[cf.name] = sortMapsForType(cf.type, value[cf.name]);\n return out;\n }\n return value;\n}\n\n/**\n * `obj` with every map-typed field (at any depth) as a key-sorted pair list.\n * Returns `obj` itself when the schema has no map column. Never mutates `obj`\n * (catalog items may be frozen and shared).\n */\nexport function sortMapsForSchema(schema: VgiSchema, obj: Record<string, any>): Record<string, any> {\n let out: Record<string, any> | null = null;\n for (const f of schema.fields) {\n if (!typeHasMap(f.type)) continue;\n const v = obj[f.name];\n if (v == null) continue;\n out ??= { ...obj };\n out[f.name] = sortMapsForType(f.type, v);\n }\n return out ?? obj;\n}\n\n/**\n * Decode a single-row Arrow IPC stream into a typed object using `schema`.\n * Matches Python's `ArrowSerializableDataclass.deserialize_from_bytes()`.\n */\nexport function decodeASD<T>(\n schema: VgiSchema,\n bytes: Uint8Array,\n): T {\n const batch = deserializeBatch(bytes);\n if (batch.numRows === 0) {\n const names = schema.fields.map((f) => f.name).join(\",\");\n throw new Error(`decodeASD: empty batch (expected 1 row for ${names})`);\n }\n const out: Record<string, any> = {};\n for (const field of schema.fields) {\n const col = batch.getChild(field.name);\n const raw = col ? col.get(0) : null;\n out[field.name] = normalizeValue(raw, field.type);\n }\n return out as T;\n}\n\n// --------------------------------------------------------------------------- //\n// Decode side: Arrow value -> normalized JS value\n// --------------------------------------------------------------------------- //\n\nfunction normalizeValue(raw: any, type: VgiDataType): any {\n if (raw == null) return null;\n\n if (isList(type)) {\n const childType = (type as any).children[0].type as VgiDataType;\n const out: any[] = [];\n for (const item of raw) out.push(normalizeValue(item, childType));\n return out;\n }\n\n if (isMap(type)) {\n const out: Record<string,
|
|
52
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n/**\n * Generic ArrowSerializableDataclass (ASD) codec.\n *\n * Bridges between typed TS objects (snake_case, matching vgi-python dataclass\n * field names) and Arrow IPC bytes (single-row batch with the dataclass'\n * ARROW_SCHEMA). Used by the generated vgi-client.ts encode<X>/decode<X>\n * wrappers to make the typed client interfaces honest at the wire boundary.\n *\n * Encoding delegates to the facade's `batchFromRows` (which handles the\n * complex types — Decimal/BigInt/List/Map/Struct/Dictionary — uniformly\n * across both arrow-js and flechette backends). Decoding pulls each field's\n * value with `batchToScalarDict`, then runs `normalizeValue` to convert\n * Arrow representations (MapRow, BigInt, etc.) back into plain JS shapes.\n */\n\nimport {\n type VgiSchema,\n type VgiField,\n type VgiDataType,\n isBinary,\n isBool,\n isDictionary,\n isInt,\n isList,\n isMap,\n isStruct,\n batchFromRows,\n serializeBatch,\n deserializeBatch,\n} from \"../arrow/index.js\";\n\n/**\n * Encode a typed object as a single-row Arrow IPC stream using `schema`.\n * Matches Python's `ArrowSerializableDataclass.serialize_to_bytes()`.\n */\nexport function encodeASD(\n schema: VgiSchema,\n obj: Record<string, any>,\n): Uint8Array {\n return serializeBatch(batchFromRows([sortMapsForSchema(schema, obj)], schema));\n}\n\n// --------------------------------------------------------------------------- //\n// Encode side: deterministic map columns\n// --------------------------------------------------------------------------- //\n//\n// A map value arrives as a JS object (or Map / pair list), whose iteration\n// order is insertion order -- except that integer-like keys (\"1\", \"2\") always\n// come first, ascending. Two builds of the same record could therefore encode\n// differently (and a catalog_contents content-hash etag would change with no\n// catalog change). Every map is written in sorted key order instead, matching\n// the Go / Java / C# / Rust SDKs: keys compared by Unicode code point (the\n// same order as comparing their UTF-8 bytes), not by UTF-16 code unit.\n\n/** Compare two strings by Unicode code point (= UTF-8 byte order). */\nexport function compareCodePoints(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n for (let i = 0; i < n; i++) {\n const x = a.charCodeAt(i);\n const y = b.charCodeAt(i);\n if (x === y) continue;\n // A surrogate (a code point above U+FFFF) sorts after every BMP code unit,\n // though as a code unit (0xD800-0xDFFF) it sorts below U+E000-U+FFFF.\n const xs = x >= 0xd800 && x <= 0xdfff;\n const ys = y >= 0xd800 && y <= 0xdfff;\n if (xs !== ys) return xs ? 1 : -1;\n return x - y;\n }\n return a.length - b.length;\n}\n\nfunction mapPairs(raw: any): Array<[unknown, unknown]> {\n if (Array.isArray(raw)) return raw.map((e: any) => (Array.isArray(e) ? [e[0], e[1]] : [e?.key, e?.value]));\n if (raw instanceof Map) return Array.from(raw.entries());\n if (typeof raw[Symbol.iterator] === \"function\") return Array.from(raw as Iterable<[unknown, unknown]>);\n return Object.entries(raw);\n}\n\nfunction compareKeys(a: unknown, b: unknown): number {\n if (typeof a === \"string\" && typeof b === \"string\") return compareCodePoints(a, b);\n if ((typeof a === \"number\" || typeof a === \"bigint\") && (typeof b === \"number\" || typeof b === \"bigint\")) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n return compareCodePoints(String(a), String(b));\n}\n\n/** Whether a type contains a map anywhere (memoized per type object). */\nconst HAS_MAP = new WeakMap<object, boolean>();\nfunction typeHasMap(type: VgiDataType): boolean {\n const cached = HAS_MAP.get(type as object);\n if (cached !== undefined) return cached;\n let has = isMap(type);\n if (!has && (isList(type) || isStruct(type))) {\n has = ((type as any).children as VgiField[]).some((c) => typeHasMap(c.type));\n }\n HAS_MAP.set(type as object, has);\n return has;\n}\n\nfunction sortMapsForType(type: VgiDataType, value: any): any {\n if (value == null || !typeHasMap(type)) return value;\n if (isMap(type)) {\n const entries = (type as any).children[0].type as VgiDataType;\n const valueType = ((entries as any).children as VgiField[])[1].type;\n return mapPairs(value)\n .map(([k, v]): [unknown, unknown] => [k, sortMapsForType(valueType, v)])\n .sort((x, y) => compareKeys(x[0], y[0]));\n }\n if (isList(type)) {\n const child = (type as any).children[0].type as VgiDataType;\n return Array.from(value as Iterable<unknown>, (v) => sortMapsForType(child, v));\n }\n if (isStruct(type)) {\n const out: Record<string, any> = { ...value };\n for (const cf of (type as any).children as VgiField[]) out[cf.name] = sortMapsForType(cf.type, value[cf.name]);\n return out;\n }\n return value;\n}\n\n/**\n * `obj` with every map-typed field (at any depth) as a key-sorted pair list.\n * Returns `obj` itself when the schema has no map column. Never mutates `obj`\n * (catalog items may be frozen and shared).\n */\nexport function sortMapsForSchema(schema: VgiSchema, obj: Record<string, any>): Record<string, any> {\n let out: Record<string, any> | null = null;\n for (const f of schema.fields) {\n if (!typeHasMap(f.type)) continue;\n const v = obj[f.name];\n if (v == null) continue;\n out ??= { ...obj };\n out[f.name] = sortMapsForType(f.type, v);\n }\n return out ?? obj;\n}\n\n/**\n * Decode a single-row Arrow IPC stream into a typed object using `schema`.\n * Matches Python's `ArrowSerializableDataclass.deserialize_from_bytes()`.\n */\nexport function decodeASD<T>(\n schema: VgiSchema,\n bytes: Uint8Array,\n): T {\n const batch = deserializeBatch(bytes);\n if (batch.numRows === 0) {\n const names = schema.fields.map((f) => f.name).join(\",\");\n throw new Error(`decodeASD: empty batch (expected 1 row for ${names})`);\n }\n const out: Record<string, any> = {};\n for (const field of schema.fields) {\n const col = batch.getChild(field.name);\n const raw = col ? col.get(0) : null;\n out[field.name] = normalizeValue(raw, field.type);\n }\n return out as T;\n}\n\n// --------------------------------------------------------------------------- //\n// Decode side: Arrow value -> normalized JS value\n// --------------------------------------------------------------------------- //\n\nfunction normalizeValue(raw: any, type: VgiDataType): any {\n if (raw == null) return null;\n\n if (isList(type)) {\n const childType = (type as any).children[0].type as VgiDataType;\n const out: any[] = [];\n for (const item of raw) out.push(normalizeValue(item, childType));\n return out;\n }\n\n if (isMap(type)) {\n // Values are decoded with the map's declared value type, like list items\n // and struct children: a map<utf8, int64> yields numbers (bigint beyond\n // the safe range), not strings, and a null value stays null.\n const entries = (type as any).children[0].type as VgiDataType;\n const valueType = ((entries as any).children as VgiField[])[1].type;\n const out: Record<string, any> = {};\n const put = (k: unknown, v: unknown): void => {\n out[String(k)] = normalizeValue(v, valueType);\n };\n // arrow-js MapRow is iterable of [k,v]; flechette returns [[k,v],...] arrays.\n if (raw[Symbol.iterator]) {\n for (const entry of raw) {\n if (Array.isArray(entry)) {\n put(entry[0], entry[1]);\n } else if (entry && typeof entry === \"object\") {\n put(entry.key ?? entry[0], entry.value ?? entry[1]);\n }\n }\n } else if (typeof raw === \"object\") {\n // Plain-object map (flechette without useMap): Object.entries fallback\n for (const [k, v] of Object.entries(raw)) put(k, v);\n }\n return out;\n }\n\n if (isStruct(type)) {\n const childFields = (type as any).children as VgiField[];\n const out: Record<string, any> = {};\n for (const cf of childFields) {\n out[cf.name] = normalizeValue(raw[cf.name], cf.type);\n }\n return out;\n }\n\n if (isDictionary(type)) {\n return raw == null ? null : String(raw);\n }\n\n if (isBinary(type)) {\n return toUint8Array(raw);\n }\n\n if (isInt(type) && (type as any).bitWidth === 64) {\n // Prefer number when representable; callers that need BigInt can convert.\n if (typeof raw === \"bigint\") {\n if (raw >= BigInt(Number.MIN_SAFE_INTEGER) && raw <= BigInt(Number.MAX_SAFE_INTEGER)) {\n return Number(raw);\n }\n return raw;\n }\n return raw;\n }\n\n if (isBool(type)) {\n return Boolean(raw);\n }\n\n // Utf8, Int8/16/32, Float32/64 — pass through as-is.\n return raw;\n}\n\nfunction toUint8Array(val: any): Uint8Array {\n if (val instanceof Uint8Array) return val;\n if (val instanceof ArrayBuffer) return new Uint8Array(val);\n if (val && val.buffer instanceof ArrayBuffer) {\n return new Uint8Array(val.buffer, val.byteOffset, val.byteLength);\n }\n return new Uint8Array(0);\n}\n",
|
|
53
53
|
"// ============================================================================\n// GENERATED by vgi.codegen.ts_schemas. DO NOT EDIT BY HAND.\n//\n// Generator: vgi-gen-ts-schemas v2\n// Content hash: 36a9087555c9\n//\n// To regenerate:\n// uv run --project ~/Development/vgi-python vgi-gen-ts-schemas \\\n// > ~/Development/vgi-typescript/src/generated/vgi-protocol-schemas.ts\n// ============================================================================\n\nimport {\n TimeUnit,\n binary,\n bool,\n dictionary,\n field,\n float64,\n int16,\n int32,\n int64,\n largeBinary,\n list,\n map,\n schema,\n struct,\n timestamp,\n uint64,\n utf8,\n} from \"../arrow/index.js\";\n\n// Origin: CatalogInfo\nexport const CatalogInfoSchema = schema([\n field(\"name\", utf8(), false),\n field(\"implementation_version\", utf8(), true),\n field(\"data_version_spec\", utf8(), true),\n field(\"attach_option_specs\", list(field(\"item\", binary(), true)), false),\n field(\"releases\", list(field(\"item\", struct([field(\"version\", utf8(), false), field(\"released_at\", timestamp(TimeUnit.MICROSECOND, \"UTC\"), true), field(\"summary\", utf8(), false), field(\"notes_url\", utf8(), true)]), true)), false),\n field(\"source_url\", utf8(), true),\n]);\n\n// Origin: SchemaInfo\nexport const SchemaInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"estimated_object_count\", map(field(\"key\", utf8(), false), field(\"value\", int64(), true), false), true),\n]);\n\n// Origin: TableInfo\nexport const TableInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"columns\", binary(), false),\n field(\"not_null_constraints\", list(field(\"item\", int32(), true)), false),\n field(\"unique_constraints\", list(field(\"item\", list(field(\"item\", int32(), true)), true)), false),\n field(\"check_constraints\", list(field(\"item\", utf8(), true)), false),\n field(\"primary_key_constraints\", list(field(\"item\", list(field(\"item\", int32(), true)), true)), false),\n field(\"foreign_key_constraints\", list(field(\"item\", binary(), true)), false),\n field(\"write_result_modes\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"supports_column_statistics\", bool(), false),\n field(\"scan_function\", binary(), true),\n field(\"insert_function\", binary(), true),\n field(\"update_function\", binary(), true),\n field(\"delete_function\", binary(), true),\n field(\"cardinality_estimate\", int64(), true),\n field(\"cardinality_max\", int64(), true),\n field(\"column_statistics\", binary(), true),\n field(\"bind_result\", binary(), true),\n field(\"required_filters\", list(field(\"item\", list(field(\"item\", utf8(), true)), true)), false),\n]);\n\n// Origin: ViewInfo\nexport const ViewInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"definition\", utf8(), false),\n field(\"column_comments\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n]);\n\n// Origin: FunctionInfo\nexport const FunctionInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"function_type\", dictionary(utf8(), int16()), false),\n field(\"arguments\", binary(), false),\n field(\"output_schema\", binary(), false),\n field(\"parameter_default_values\", binary(), true),\n field(\"stability\", dictionary(utf8(), int16()), true),\n field(\"null_handling\", dictionary(utf8(), int16()), true),\n field(\"argument_monotonicity\", list(field(\"item\", utf8(), true)), true),\n field(\"description\", utf8(), false),\n field(\"examples\", list(field(\"item\", struct([field(\"sql\", utf8(), false), field(\"description\", utf8(), false), field(\"expected_output\", utf8(), true)]), true)), false),\n field(\"categories\", list(field(\"item\", utf8(), true)), false),\n field(\"projection_pushdown\", bool(), true),\n field(\"filter_pushdown\", bool(), true),\n field(\"sampling_pushdown\", bool(), true),\n field(\"late_materialization\", bool(), true),\n field(\"filter_semantic_profiles\", list(field(\"item\", utf8(), true)), false),\n field(\"additional_filter_functions\", list(field(\"item\", struct([field(\"namespace\", utf8(), false), field(\"name\", utf8(), false), field(\"version\", uint64(), false)]), true)), false),\n field(\"runtime_filter_algorithms\", list(field(\"item\", struct([field(\"namespace\", utf8(), false), field(\"name\", utf8(), false), field(\"version\", uint64(), false)]), true)), false),\n field(\"filter_evaluation_contexts\", list(field(\"item\", struct([field(\"profile\", utf8(), false), field(\"provider_fingerprint\", utf8(), true)]), true)), false),\n field(\"order_preservation\", dictionary(utf8(), int16()), true),\n field(\"max_workers\", int32(), true),\n field(\"supports_batch_index\", bool(), false),\n field(\"supports_splits\", bool(), false),\n field(\"filters_exactly_applied\", bool(), false),\n field(\"supports_positions\", bool(), false),\n field(\"split_token_ttl_seconds\", int64(), true),\n field(\"partition_kind\", dictionary(utf8(), int16()), false),\n field(\"order_dependent\", dictionary(utf8(), int16()), false),\n field(\"distinct_dependent\", dictionary(utf8(), int16()), false),\n field(\"supports_window\", bool(), false),\n field(\"streaming_partitioned\", bool(), false),\n field(\"has_finalize\", bool(), false),\n field(\"source_order_dependent\", bool(), false),\n field(\"sink_order_dependent\", bool(), false),\n field(\"requires_input_batch_index\", bool(), false),\n field(\"input_from_args\", bool(), false),\n field(\"required_settings\", list(field(\"item\", utf8(), true)), false),\n field(\"required_secrets\", list(field(\"item\", struct([field(\"secret_type\", utf8(), false), field(\"scope\", utf8(), true), field(\"secret_name\", utf8(), true)]), true)), false),\n]);\n\n// Origin: MacroInfo\nexport const MacroInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"macro_type\", dictionary(utf8(), int16()), false),\n field(\"parameters\", list(field(\"item\", utf8(), true)), false),\n field(\"parameter_default_values\", binary(), true),\n field(\"definition\", utf8(), false),\n field(\"arguments_schema\", binary(), true),\n]);\n\n// Origin: IndexInfo\nexport const IndexInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"table_name\", utf8(), false),\n field(\"index_type\", utf8(), false),\n field(\"constraint_type\", dictionary(utf8(), int16()), false),\n field(\"expressions\", list(field(\"item\", utf8(), true)), false),\n field(\"options\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n]);\n\n// Origin: CopyFromFormatInfo\nexport const CopyFromFormatInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"format_name\", utf8(), false),\n field(\"handler\", utf8(), false),\n field(\"options\", binary(), false),\n field(\"direction\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"ordered\", bool(), false),\n]);\n\n// Origin: ScanFunctionResult\nexport const ScanFunctionResultSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"required_extensions\", list(field(\"item\", utf8(), true)), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: ScanBranchesResult\nexport const ScanBranchesResultSchema = schema([\n field(\"branches\", list(field(\"item\", binary(), true)), false),\n field(\"required_extensions\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: ScanBranch\nexport const ScanBranchSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"branch_filter\", utf8(), true),\n field(\"writable\", bool(), false),\n field(\"source_catalog\", utf8(), true),\n field(\"source_schema_path\", list(field(\"item\", utf8(), true)), true),\n field(\"source_table\", utf8(), true),\n field(\"format_name\", utf8(), true),\n field(\"format_locations\", list(field(\"item\", utf8(), true)), true),\n field(\"format_options\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: ScanSplit\nexport const ScanSplitSchema = schema([\n field(\"payload\", binary(), false),\n field(\"token\", binary(), false),\n field(\"estimated_rows\", int64(), true),\n field(\"rows_exact\", bool(), false),\n field(\"estimated_bytes\", int64(), true),\n field(\"partition_bounds\", binary(), true),\n field(\"column_statistics\", binary(), true),\n field(\"location_ids\", list(field(\"item\", int64(), true)), true),\n field(\"start_position\", binary(), true),\n field(\"end_position\", binary(), true),\n]);\n\n// Origin: AttachCatalogInfo\nexport const AttachCatalogInfoSchema = schema([\n field(\"alias\", utf8(), false),\n field(\"target\", utf8(), false),\n field(\"db_type\", utf8(), false),\n field(\"options\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"hidden\", bool(), false),\n field(\"required\", bool(), false),\n field(\"secret_ref\", utf8(), false),\n]);\n\n// Origin: ForeignKeyInfo\nexport const ForeignKeyInfoSchema = schema([\n field(\"fk_columns\", list(field(\"item\", utf8(), true)), false),\n field(\"pk_columns\", list(field(\"item\", utf8(), true)), false),\n field(\"referenced_table\", utf8(), false),\n field(\"referenced_schema_path\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: SchemaContents\nexport const SchemaContentsSchema = schema([\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"schema\", binary(), false),\n field(\"tables\", list(field(\"item\", binary(), true)), false),\n field(\"views\", list(field(\"item\", binary(), true)), false),\n field(\"scalar_functions\", list(field(\"item\", binary(), true)), false),\n field(\"aggregate_functions\", list(field(\"item\", binary(), true)), false),\n field(\"table_functions\", list(field(\"item\", binary(), true)), false),\n field(\"scalar_macros\", list(field(\"item\", binary(), true)), false),\n field(\"table_macros\", list(field(\"item\", binary(), true)), false),\n field(\"indexes\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: AggregateBindRequest\nexport const AggregateBindRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"input_schema\", binary(), true),\n field(\"settings\", binary(), true),\n field(\"secrets\", binary(), true),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n field(\"argument_names\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateCombineRequest\nexport const AggregateCombineRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"merge_batch\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateDestructorRequest\nexport const AggregateDestructorRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"group_ids_batch\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateFinalizeRequest\nexport const AggregateFinalizeRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"group_ids_batch\", binary(), false),\n field(\"output_schema\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateStreamingChunkRequest\nexport const AggregateStreamingChunkRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"input_batch\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateStreamingCloseRequest\nexport const AggregateStreamingCloseRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateStreamingOpenRequest\nexport const AggregateStreamingOpenRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"input_schema\", binary(), false),\n field(\"partition_key_count\", int64(), false),\n field(\"order_key_count\", int64(), false),\n field(\"output_schema\", binary(), false),\n field(\"settings\", binary(), true),\n field(\"secrets\", binary(), true),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateUpdateRequest\nexport const AggregateUpdateRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"input_batch\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateWindowBatchRequest\nexport const AggregateWindowBatchRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"partition_id\", int64(), false),\n field(\"row_idx\", int64(), false),\n field(\"count\", int64(), false),\n field(\"frames_per_row\", list(field(\"item\", int64(), true)), false),\n field(\"frame_starts\", list(field(\"item\", int64(), true)), false),\n field(\"frame_ends\", list(field(\"item\", int64(), true)), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateWindowDestructorRequest\nexport const AggregateWindowDestructorRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"partition_id\", int64(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateWindowInitRequest\nexport const AggregateWindowInitRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"partition_id\", int64(), false),\n field(\"row_count\", int64(), false),\n field(\"partition_batch\", binary(), false),\n field(\"output_schema\", binary(), false),\n field(\"filter_mask\", binary(), false),\n field(\"frame_stats\", binary(), false),\n field(\"all_valid\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: AggregateWindowRequest\nexport const AggregateWindowRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"partition_id\", int64(), false),\n field(\"rid\", int64(), false),\n field(\"frame_starts\", list(field(\"item\", int64(), true)), false),\n field(\"frame_ends\", list(field(\"item\", int64(), true)), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: BindRequest\nexport const BindRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"function_type\", dictionary(utf8(), int16()), false),\n field(\"input_schema\", binary(), true),\n field(\"settings\", binary(), true),\n field(\"secrets\", binary(), true),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n field(\"resolved_secrets_provided\", bool(), false),\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n field(\"copy_from\", struct([field(\"format\", utf8(), false), field(\"file_path\", utf8(), false), field(\"expected_schema\", binary(), false)]), true),\n field(\"copy_to\", struct([field(\"format\", utf8(), false), field(\"file_path\", utf8(), false)]), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n field(\"argument_names\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: CatalogAttachRequest\nexport const CatalogAttachRequestSchema = schema([\n field(\"name\", utf8(), false),\n field(\"options\", binary(), true),\n field(\"data_version_spec\", utf8(), true),\n field(\"implementation_version\", utf8(), true),\n field(\"client_capabilities\", binary(), true),\n]);\n\n// Origin: CatalogCreateRequest\nexport const CatalogCreateRequestSchema = schema([\n field(\"name\", utf8(), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"options\", binary(), true),\n]);\n\n// Origin: ClientCapabilities\nexport const ClientCapabilitiesSchema = schema([\n field(\"engine\", utf8(), false),\n field(\"native_formats\", list(field(\"item\", utf8(), true)), false),\n field(\"catalogs\", list(field(\"item\", utf8(), true)), false),\n field(\"can_stream\", bool(), false),\n field(\"filter_encodings\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: CopyFromContext\nexport const CopyFromContextSchema = schema([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n field(\"expected_schema\", binary(), false),\n]);\n\n// Origin: CopyToContext\nexport const CopyToContextSchema = schema([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n]);\n\n// Origin: GlobalInitResponse\nexport const GlobalInitResponseSchema = schema([\n field(\"execution_id\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"max_workers\", int64(), false),\n]);\n\n// Origin: IndexCreateRequest\nexport const IndexCreateRequestSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"table_name\", utf8(), false),\n field(\"index_type\", utf8(), false),\n field(\"constraint_type\", dictionary(utf8(), int16()), false),\n field(\"expressions\", list(field(\"item\", utf8(), true)), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"options\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: InitRequest\nexport const InitRequestSchema = schema([\n field(\"bind_call\", binary(), false),\n field(\"output_schema\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n field(\"projection_ids\", list(field(\"item\", int64(), true)), true),\n field(\"pushdown_filters\", largeBinary(), true),\n field(\"join_keys\", list(field(\"item\", largeBinary(), true)), true),\n field(\"split_tokens\", list(field(\"item\", largeBinary(), true)), true),\n field(\"row_limit\", int64(), true),\n field(\"phase\", dictionary(utf8(), int16()), true),\n field(\"finalize_state_id\", binary(), true),\n field(\"execution_id\", binary(), true),\n field(\"init_opaque_data\", binary(), true),\n field(\"substream_id\", binary(), true),\n field(\"order_by_column_name\", utf8(), true),\n field(\"order_by_direction\", dictionary(utf8(), int16()), true),\n field(\"order_by_null_order\", dictionary(utf8(), int16()), true),\n field(\"order_by_limit\", int64(), true),\n field(\"tablesample_percentage\", float64(), true),\n field(\"tablesample_seed\", int64(), true),\n]);\n\n// Origin: MacroCreateRequest\nexport const MacroCreateRequestSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"macro_type\", dictionary(utf8(), int16()), false),\n field(\"parameters\", list(field(\"item\", utf8(), true)), false),\n field(\"definition\", utf8(), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"parameter_default_values\", binary(), true),\n field(\"arguments_schema\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: TableCreateRequest\nexport const TableCreateRequestSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"columns\", binary(), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"not_null_constraints\", list(field(\"item\", int32(), true)), false),\n field(\"unique_constraints\", list(field(\"item\", list(field(\"item\", int32(), true)), true)), false),\n field(\"check_constraints\", list(field(\"item\", utf8(), true)), false),\n field(\"primary_key_constraints\", list(field(\"item\", list(field(\"item\", int32(), true)), true)), false),\n field(\"foreign_key_constraints\", list(field(\"item\", binary(), true)), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: TableBufferingCombineRequest\nexport const TableBufferingCombineRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"state_ids\", list(field(\"item\", binary(), true)), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_id\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: TableBufferingDestructorRequest\nexport const TableBufferingDestructorRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_id\", binary(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: TableBufferingProcessRequest\nexport const TableBufferingProcessRequestSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"execution_id\", binary(), false),\n field(\"input_batch\", binary(), false),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_id\", binary(), true),\n field(\"batch_index\", int64(), true),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), true),\n]);\n\n// Origin: TableFunctionCardinalityRequest\nexport const TableFunctionCardinalityRequestSchema = schema([\n field(\"bind_call\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n]);\n\n// Origin: TableFunctionDynamicToStringRequest\nexport const TableFunctionDynamicToStringRequestSchema = schema([\n field(\"bind_call\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n field(\"global_execution_id\", binary(), false),\n]);\n\n// Origin: TableFunctionPlanRequest\nexport const TableFunctionPlanRequestSchema = schema([\n field(\"bind_call\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n field(\"projection_ids\", list(field(\"item\", int64(), true)), true),\n field(\"pushdown_filters\", largeBinary(), true),\n field(\"join_keys\", list(field(\"item\", largeBinary(), true)), true),\n field(\"row_limit\", int64(), true),\n field(\"target_split_bytes\", int64(), true),\n field(\"min_splits\", int64(), true),\n field(\"max_splits_per_response\", int64(), true),\n field(\"cursor\", binary(), true),\n field(\"refined_filters\", largeBinary(), true),\n field(\"filters_complete\", bool(), false),\n field(\"start_position\", binary(), true),\n field(\"end_position\", binary(), true),\n field(\"order_by_column_name\", utf8(), true),\n field(\"order_by_direction\", dictionary(utf8(), int16()), true),\n field(\"order_by_null_order\", dictionary(utf8(), int16()), true),\n field(\"order_by_limit\", int64(), true),\n field(\"tablesample_percentage\", float64(), true),\n field(\"tablesample_seed\", int64(), true),\n]);\n\n// Origin: TableFunctionStatisticsRequest\nexport const TableFunctionStatisticsRequestSchema = schema([\n field(\"bind_call\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'aggregate_bind' result\nexport const AggregateBindResultSchema = schema([\n field(\"output_schema\", binary(), false),\n field(\"execution_id\", binary(), false),\n]);\n\n// Origin: method 'aggregate_combine' result\nexport const AggregateCombineResultSchema = schema([]);\n\n// Origin: method 'aggregate_destructor' result\nexport const AggregateDestructorResultSchema = schema([]);\n\n// Origin: method 'aggregate_finalize' result\nexport const AggregateFinalizeResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_chunk' result\nexport const AggregateStreamingChunkResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_close' result\nexport const AggregateStreamingCloseResultSchema = schema([]);\n\n// Origin: method 'aggregate_streaming_open' result\nexport const AggregateStreamingOpenResultSchema = schema([\n field(\"execution_id\", binary(), false),\n]);\n\n// Origin: method 'aggregate_update' result\nexport const AggregateUpdateResultSchema = schema([]);\n\n// Origin: method 'aggregate_window' result\nexport const AggregateWindowResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_batch' result\nexport const AggregateWindowBatchResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_destructor' result\nexport const AggregateWindowDestructorResultSchema = schema([]);\n\n// Origin: method 'aggregate_window_init' result\nexport const AggregateWindowInitResultSchema = schema([]);\n\n// Origin: method 'bind' result\nexport const BindResultSchema = schema([\n field(\"output_schema\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"lookup_secret_types\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_scopes\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_names\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: method 'catalog_attach' result\nexport const CatalogAttachResultSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"supports_transactions\", bool(), false),\n field(\"supports_time_travel\", bool(), false),\n field(\"catalog_version_frozen\", bool(), false),\n field(\"catalog_version\", int64(), false),\n field(\"attach_opaque_data_required\", bool(), false),\n field(\"default_schema\", utf8(), false),\n field(\"settings\", list(field(\"item\", binary(), true)), false),\n field(\"secret_types\", list(field(\"item\", binary(), true)), false),\n field(\"attach_catalogs\", list(field(\"item\", binary(), true)), false),\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"supports_column_statistics\", bool(), false),\n field(\"global_functions\", list(field(\"item\", binary(), true)), false),\n field(\"global_function_prefix\", utf8(), false),\n field(\"resolved_data_version\", utf8(), true),\n field(\"resolved_implementation_version\", utf8(), true),\n field(\"supports_catalog_contents\", bool(), false),\n]);\n\n// Origin: method 'catalog_catalogs' result\nexport const CatalogCatalogsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_contents' result\nexport const CatalogContentsResultSchema = schema([\n field(\"catalog_version\", int64(), false),\n field(\"etag\", utf8(), true),\n field(\"not_modified\", bool(), false),\n field(\"schemas\", list(field(\"item\", struct([field(\"path\", list(field(\"item\", utf8(), true)), false), field(\"schema\", binary(), false), field(\"tables\", list(field(\"item\", binary(), true)), false), field(\"views\", list(field(\"item\", binary(), true)), false), field(\"scalar_functions\", list(field(\"item\", binary(), true)), false), field(\"aggregate_functions\", list(field(\"item\", binary(), true)), false), field(\"table_functions\", list(field(\"item\", binary(), true)), false), field(\"scalar_macros\", list(field(\"item\", binary(), true)), false), field(\"table_macros\", list(field(\"item\", binary(), true)), false), field(\"indexes\", list(field(\"item\", binary(), true)), false)]), true)), false),\n]);\n\n// Origin: method 'catalog_copy_from_formats' result\nexport const CatalogCopyFromFormatsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_index_get' result\nexport const CatalogIndexGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_macro_get' result\nexport const CatalogMacroGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_functions' result\nexport const CatalogSchemaContentsFunctionsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_indexes' result\nexport const CatalogSchemaContentsIndexesResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_macros' result\nexport const CatalogSchemaContentsMacrosResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_tables' result\nexport const CatalogSchemaContentsTablesResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_views' result\nexport const CatalogSchemaContentsViewsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_get' result\nexport const CatalogSchemaGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schemas' result\nexport const CatalogSchemasResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_table_get' result\nexport const CatalogTableGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_transaction_begin' result\nexport const CatalogTransactionBeginResultSchema = schema([\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_version' result\nexport const CatalogVersionResultSchema = schema([\n field(\"version\", int64(), false),\n]);\n\n// Origin: method 'catalog_view_get' result\nexport const CatalogViewGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'table_buffering_combine' result\nexport const TableBufferingCombineResultSchema = schema([\n field(\"finalize_state_ids\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'table_buffering_destructor' result\nexport const TableBufferingDestructorResultSchema = schema([]);\n\n// Origin: method 'table_buffering_process' result\nexport const TableBufferingProcessResultSchema = schema([\n field(\"state_id\", binary(), false),\n]);\n\n// Origin: method 'table_function_cardinality' result\nexport const TableFunctionCardinalityResultSchema = schema([\n field(\"estimate\", int64(), true),\n field(\"max\", int64(), true),\n]);\n\n// Origin: method 'table_function_dynamic_to_string' result\nexport const TableFunctionDynamicToStringResultSchema = schema([\n field(\"keys\", list(field(\"item\", utf8(), true)), false),\n field(\"values\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: method 'table_function_plan' result\nexport const TableFunctionPlanResultSchema = schema([\n field(\"splits\", list(field(\"item\", binary(), true)), false),\n field(\"next_cursors\", list(field(\"item\", binary(), true)), true),\n field(\"execution_id\", binary(), true),\n field(\"init_opaque_data\", binary(), true),\n field(\"max_workers\", int64(), true),\n field(\"estimated_total_splits\", int64(), true),\n field(\"estimated_total_rows\", int64(), true),\n field(\"estimated_total_bytes\", int64(), true),\n field(\"catalog_version\", int64(), true),\n field(\"scope\", utf8(), false),\n field(\"locations\", list(field(\"item\", utf8(), true)), true),\n field(\"partitioning\", list(field(\"item\", binary(), true)), true),\n field(\"sort_order\", list(field(\"item\", binary(), true)), true),\n field(\"cache_max_age_seconds\", int64(), true),\n field(\"start_position\", binary(), true),\n field(\"end_position\", binary(), true),\n]);\n\n// Origin: method 'aggregate_bind' params\nexport const AggregateBindParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_combine' params\nexport const AggregateCombineParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_destructor' params\nexport const AggregateDestructorParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_finalize' params\nexport const AggregateFinalizeParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_chunk' params\nexport const AggregateStreamingChunkParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_close' params\nexport const AggregateStreamingCloseParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_open' params\nexport const AggregateStreamingOpenParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_update' params\nexport const AggregateUpdateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window' params\nexport const AggregateWindowParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_batch' params\nexport const AggregateWindowBatchParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_destructor' params\nexport const AggregateWindowDestructorParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_init' params\nexport const AggregateWindowInitParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'bind' params\nexport const BindParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_attach' params\nexport const CatalogAttachParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_catalogs' params\nexport const CatalogCatalogsParamsSchema = schema([]);\n\n// Origin: method 'catalog_contents' params\nexport const CatalogContentsParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"if_none_match\", utf8(), true),\n]);\n\n// Origin: method 'catalog_copy_from_formats' params\nexport const CatalogCopyFromFormatsParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_create' params\nexport const CatalogCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_detach' params\nexport const CatalogDetachParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_drop' params\nexport const CatalogDropParamsSchema = schema([\n field(\"name\", utf8(), false),\n]);\n\n// Origin: method 'catalog_index_create' params\nexport const CatalogIndexCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_index_drop' params\nexport const CatalogIndexDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_index_get' params\nexport const CatalogIndexGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_macro_create' params\nexport const CatalogMacroCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_macro_drop' params\nexport const CatalogMacroDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_macro_get' params\nexport const CatalogMacroGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_functions' params\nexport const CatalogSchemaContentsFunctionsParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"type\", dictionary(utf8(), int16()), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_indexes' params\nexport const CatalogSchemaContentsIndexesParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_macros' params\nexport const CatalogSchemaContentsMacrosParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"type\", dictionary(utf8(), int16()), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_tables' params\nexport const CatalogSchemaContentsTablesParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_views' params\nexport const CatalogSchemaContentsViewsParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_create' params\nexport const CatalogSchemaCreateParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_drop' params\nexport const CatalogSchemaDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_get' params\nexport const CatalogSchemaGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"path\", list(field(\"item\", utf8(), true)), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schemas' params\nexport const CatalogSchemasParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_add' params\nexport const CatalogTableColumnAddParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_definition\", binary(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"if_column_not_exists\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_comment_set' params\nexport const CatalogTableColumnCommentSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"comment\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_default_drop' params\nexport const CatalogTableColumnDefaultDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_default_set' params\nexport const CatalogTableColumnDefaultSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"expression\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_drop' params\nexport const CatalogTableColumnDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"if_column_exists\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_rename' params\nexport const CatalogTableColumnRenameParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"new_column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_statistics_get' params\nexport const CatalogTableColumnStatisticsGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_type_change' params\nexport const CatalogTableColumnTypeChangeParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_definition\", binary(), false),\n field(\"expression\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_comment_set' params\nexport const CatalogTableCommentSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"comment\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_create' params\nexport const CatalogTableCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_table_delete_function_get' params\nexport const CatalogTableDeleteFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_drop' params\nexport const CatalogTableDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_get' params\nexport const CatalogTableGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_insert_function_get' params\nexport const CatalogTableInsertFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n field(\"writable_branch_function_name\", utf8(), true),\n]);\n\n// Origin: method 'catalog_table_not_null_drop' params\nexport const CatalogTableNotNullDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_not_null_set' params\nexport const CatalogTableNotNullSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_rename' params\nexport const CatalogTableRenameParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"new_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_scan_branches_get' params\nexport const CatalogTableScanBranchesGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_scan_function_get' params\nexport const CatalogTableScanFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_update_function_get' params\nexport const CatalogTableUpdateFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_transaction_begin' params\nexport const CatalogTransactionBeginParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_transaction_commit' params\nexport const CatalogTransactionCommitParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_transaction_rollback' params\nexport const CatalogTransactionRollbackParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_version' params\nexport const CatalogVersionParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_comment_set' params\nexport const CatalogViewCommentSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"comment\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_create' params\nexport const CatalogViewCreateParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"definition\", utf8(), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_drop' params\nexport const CatalogViewDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_get' params\nexport const CatalogViewGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_rename' params\nexport const CatalogViewRenameParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_path\", list(field(\"item\", utf8(), true)), false),\n field(\"name\", utf8(), false),\n field(\"new_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'init' params\nexport const InitParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_buffering_combine' params\nexport const TableBufferingCombineParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_buffering_destructor' params\nexport const TableBufferingDestructorParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_buffering_process' params\nexport const TableBufferingProcessParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_function_cardinality' params\nexport const TableFunctionCardinalityParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_function_dynamic_to_string' params\nexport const TableFunctionDynamicToStringParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_function_plan' params\nexport const TableFunctionPlanParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_function_statistics' params\nexport const TableFunctionStatisticsParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n",
|
|
54
54
|
"// ============================================================================\n// GENERATED by vgi.codegen.ts_types. DO NOT EDIT BY HAND.\n//\n// Generator: python -m vgi.codegen.ts_types v1\n// Content hash: d240510f013b\n//\n// To regenerate:\n// uv run --project ~/Development/vgi-python python scripts/regen_generated.py\n// ============================================================================\n\nimport { encodeASD, decodeASD } from \"../codec/asd.js\";\nimport {\n CatalogAttachResultSchema,\n CatalogContentsResultSchema,\n SchemaContentsSchema,\n} from \"./vgi-protocol-schemas.js\";\nimport type { CatalogAttachResult, CatalogContentsResponse, SchemaContents } from \"./vgi-client.js\";\nexport type { CatalogAttachResult, CatalogContentsResponse, SchemaContents };\n\n// ----------------------------------------------------------------------------\n// CatalogAttachResult (schema: CatalogAttachResultSchema)\n// ----------------------------------------------------------------------------\n\n/** Fields of `CatalogAttachResult` that have a protocol default. */\nexport type CatalogAttachResultDefaultedField =\n | \"attach_opaque_data_required\"\n | \"default_schema\"\n | \"settings\"\n | \"secret_types\"\n | \"attach_catalogs\"\n | \"comment\"\n | \"tags\"\n | \"supports_column_statistics\"\n | \"global_functions\"\n | \"global_function_prefix\"\n | \"supports_catalog_contents\";\n/** `CatalogAttachResult` with every field that has a protocol default optional. */\nexport type CatalogAttachResultInit = Omit<CatalogAttachResult, CatalogAttachResultDefaultedField> & Partial<Pick<CatalogAttachResult, CatalogAttachResultDefaultedField>>;\n\n/** Build a complete `CatalogAttachResult`, filling the protocol defaults, in wire order. */\nexport function buildCatalogAttachResult(init: CatalogAttachResultInit): CatalogAttachResult {\n return {\n attach_opaque_data: init.attach_opaque_data,\n supports_transactions: init.supports_transactions,\n supports_time_travel: init.supports_time_travel,\n catalog_version_frozen: init.catalog_version_frozen,\n catalog_version: init.catalog_version,\n attach_opaque_data_required: init.attach_opaque_data_required ?? true,\n default_schema: init.default_schema ?? \"main\",\n settings: init.settings ?? [],\n secret_types: init.secret_types ?? [],\n attach_catalogs: init.attach_catalogs ?? [],\n comment: init.comment ?? null,\n tags: init.tags ?? {},\n supports_column_statistics: init.supports_column_statistics ?? false,\n global_functions: init.global_functions ?? [],\n global_function_prefix: init.global_function_prefix ?? \"\",\n resolved_data_version: init.resolved_data_version ?? null,\n resolved_implementation_version: init.resolved_implementation_version ?? null,\n supports_catalog_contents: init.supports_catalog_contents ?? false,\n };\n}\n\nexport const encodeCatalogAttachResult = (v: CatalogAttachResult): Uint8Array => encodeASD(CatalogAttachResultSchema, v);\nexport const decodeCatalogAttachResult = (b: Uint8Array): CatalogAttachResult => decodeASD<CatalogAttachResult>(CatalogAttachResultSchema, b);\n\n// ----------------------------------------------------------------------------\n// SchemaContents (schema: SchemaContentsSchema)\n// ----------------------------------------------------------------------------\n\n/** Fields of `SchemaContents` that have a protocol default. */\nexport type SchemaContentsDefaultedField =\n | \"tables\"\n | \"views\"\n | \"scalar_functions\"\n | \"aggregate_functions\"\n | \"table_functions\"\n | \"scalar_macros\"\n | \"table_macros\"\n | \"indexes\";\n/** `SchemaContents` with every field that has a protocol default optional. */\nexport type SchemaContentsInit = Omit<SchemaContents, SchemaContentsDefaultedField> & Partial<Pick<SchemaContents, SchemaContentsDefaultedField>>;\n\n/** Build a complete `SchemaContents`, filling the protocol defaults, in wire order. */\nexport function buildSchemaContents(init: SchemaContentsInit): SchemaContents {\n return {\n path: init.path,\n schema: init.schema,\n tables: init.tables ?? [],\n views: init.views ?? [],\n scalar_functions: init.scalar_functions ?? [],\n aggregate_functions: init.aggregate_functions ?? [],\n table_functions: init.table_functions ?? [],\n scalar_macros: init.scalar_macros ?? [],\n table_macros: init.table_macros ?? [],\n indexes: init.indexes ?? [],\n };\n}\n\nexport const encodeSchemaContents = (v: SchemaContents): Uint8Array => encodeASD(SchemaContentsSchema, v);\nexport const decodeSchemaContents = (b: Uint8Array): SchemaContents => decodeASD<SchemaContents>(SchemaContentsSchema, b);\n\n// ----------------------------------------------------------------------------\n// CatalogContentsResponse (schema: CatalogContentsResultSchema)\n// ----------------------------------------------------------------------------\n\n/** Fields of `CatalogContentsResponse` that have a protocol default. */\nexport type CatalogContentsResponseDefaultedField =\n | \"etag\"\n | \"not_modified\"\n | \"schemas\";\n/** `CatalogContentsResponse` with every field that has a protocol default optional. */\nexport type CatalogContentsResponseInit = Omit<CatalogContentsResponse, CatalogContentsResponseDefaultedField> & Partial<Pick<CatalogContentsResponse, CatalogContentsResponseDefaultedField>>;\n\n/** Build a complete `CatalogContentsResponse`, filling the protocol defaults, in wire order. */\nexport function buildCatalogContentsResponse(init: CatalogContentsResponseInit): CatalogContentsResponse {\n return {\n catalog_version: init.catalog_version,\n etag: init.etag ?? null,\n not_modified: init.not_modified ?? false,\n schemas: init.schemas ?? [],\n };\n}\n\nexport const encodeCatalogContentsResponse = (v: CatalogContentsResponse): Uint8Array => encodeASD(CatalogContentsResultSchema, v);\nexport const decodeCatalogContentsResponse = (b: Uint8Array): CatalogContentsResponse => decodeASD<CatalogContentsResponse>(CatalogContentsResultSchema, b);\n",
|
|
55
55
|
"// ============================================================================\n// GENERATED by vgi.codegen.ts_client. DO NOT EDIT BY HAND.\n//\n// Generator: vgi-gen-ts-client v1\n// Content hash: 5cf87195498c\n//\n// To regenerate:\n// uv run --project ~/Development/vgi-python vgi-gen-ts-client \\\n// > ~/Development/vgi-typescript/src/generated/vgi-client.ts\n// ============================================================================\n\nimport { encodeASD, decodeASD } from \"../codec/asd.js\";\nimport {\n CatalogInfoSchema,\n FunctionInfoSchema,\n IndexInfoSchema,\n MacroInfoSchema,\n SchemaInfoSchema,\n TableInfoSchema,\n ViewInfoSchema,\n} from \"./vgi-protocol-schemas.js\";\n\nexport type ArgumentMonotonicity = \"UNKNOWN\" | \"CONSTANT\" | \"NON_DECREASING\" | \"STRICTLY_INCREASING\" | \"NON_INCREASING\" | \"STRICTLY_DECREASING\";\nexport type DistinctDependence = \"DISTINCT_DEPENDENT\" | \"NOT_DISTINCT_DEPENDENT\";\nexport type FunctionStability = \"CONSISTENT\" | \"VOLATILE\" | \"CONSISTENT_WITHIN_QUERY\";\nexport type FunctionType = \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\" | \"AGGREGATE\";\nexport type IndexConstraintType = \"NONE\" | \"UNIQUE\" | \"PRIMARY\";\nexport type InvocationFunctionType = \"AGGREGATE\" | \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\";\nexport type MacroType = \"SCALAR\" | \"TABLE\";\nexport type NullHandling = \"DEFAULT\" | \"SPECIAL\";\nexport type OnConflict = \"ERROR\" | \"IGNORE\" | \"REPLACE\";\nexport type OrderByDirection = \"ASC\" | \"DESC\";\nexport type OrderByNullOrder = \"NULLS_FIRST\" | \"NULLS_LAST\";\nexport type OrderDependence = \"ORDER_DEPENDENT\" | \"NOT_ORDER_DEPENDENT\";\nexport type OrderPreservation = \"PRESERVES_ORDER\" | \"NO_ORDER_GUARANTEE\" | \"FIXED_ORDER\";\nexport type PartitionKind = \"NOT_PARTITIONED\" | \"SINGLE_VALUE_PARTITIONS\" | \"OVERLAPPING_PARTITIONS\" | \"DISJOINT_PARTITIONS\";\nexport type SchemaObjectType = \"TABLE\" | \"VIEW\" | \"SCALAR_FUNCTION\" | \"TABLE_FUNCTION\" | \"AGGREGATE_FUNCTION\" | \"SCALAR_MACRO\" | \"TABLE_MACRO\" | \"INDEX\";\nexport type TableInOutFunctionInitPhase = \"INPUT\" | \"FINALIZE\" | \"TABLE_BUFFERING\" | \"TABLE_BUFFERING_FINALIZE\";\n\nexport interface CatalogDataVersionRelease {\n version: string;\n released_at?: bigint | null;\n summary: string;\n notes_url?: string | null;\n}\n\nexport interface CatalogInfo {\n name: string;\n implementation_version?: string | null;\n data_version_spec?: string | null;\n attach_option_specs: Uint8Array[];\n releases: CatalogDataVersionRelease[];\n source_url?: string | null;\n}\n\nexport interface SchemaInfo {\n comment?: string | null;\n tags: Record<string, string>;\n attach_opaque_data: Uint8Array;\n path: string[];\n estimated_object_count?: Record<string, number> | null;\n}\n\nexport interface TableInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_path: string[];\n columns: Uint8Array;\n not_null_constraints: number[];\n unique_constraints: number[][];\n check_constraints: string[];\n primary_key_constraints: number[][];\n foreign_key_constraints: Uint8Array[];\n write_result_modes: Record<string, string>;\n supports_column_statistics: boolean;\n scan_function?: Uint8Array | null;\n insert_function?: Uint8Array | null;\n update_function?: Uint8Array | null;\n delete_function?: Uint8Array | null;\n cardinality_estimate?: number | null;\n cardinality_max?: number | null;\n column_statistics?: Uint8Array | null;\n bind_result?: Uint8Array | null;\n required_filters: string[][];\n}\n\nexport interface ViewInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_path: string[];\n definition: string;\n column_comments: Record<string, string>;\n}\n\nexport interface CatalogExample {\n sql: string;\n description: string;\n expected_output?: string | null;\n}\n\nexport interface FilterFunctionCapability {\n namespace: string;\n name: string;\n version: number;\n}\n\nexport interface RuntimeFilterAlgorithmCapability {\n namespace: string;\n name: string;\n version: number;\n}\n\nexport interface EvaluationContextCapability {\n profile: string;\n provider_fingerprint?: string | null;\n}\n\nexport interface SecretLookupEntry {\n secret_type: string;\n scope?: string | null;\n secret_name?: string | null;\n}\n\nexport interface FunctionInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_path: string[];\n function_type: FunctionType;\n arguments: Uint8Array;\n output_schema: Uint8Array;\n parameter_default_values?: /** @record-batch */ Uint8Array | null;\n stability?: FunctionStability | null;\n null_handling?: NullHandling | null;\n argument_monotonicity?: ArgumentMonotonicity[] | null;\n description: string;\n examples: CatalogExample[];\n categories: string[];\n projection_pushdown?: boolean | null;\n filter_pushdown?: boolean | null;\n sampling_pushdown?: boolean | null;\n late_materialization?: boolean | null;\n filter_semantic_profiles: string[];\n additional_filter_functions: FilterFunctionCapability[];\n runtime_filter_algorithms: RuntimeFilterAlgorithmCapability[];\n filter_evaluation_contexts: EvaluationContextCapability[];\n order_preservation?: OrderPreservation | null;\n max_workers?: number | null;\n supports_batch_index: boolean;\n supports_splits: boolean;\n filters_exactly_applied: boolean;\n supports_positions: boolean;\n split_token_ttl_seconds?: number | null;\n partition_kind: PartitionKind;\n order_dependent: OrderDependence;\n distinct_dependent: DistinctDependence;\n supports_window: boolean;\n streaming_partitioned: boolean;\n has_finalize: boolean;\n source_order_dependent: boolean;\n sink_order_dependent: boolean;\n requires_input_batch_index: boolean;\n input_from_args: boolean;\n required_settings: string[];\n required_secrets: SecretLookupEntry[];\n}\n\nexport interface MacroInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_path: string[];\n macro_type: MacroType;\n parameters: string[];\n parameter_default_values?: /** @record-batch */ Uint8Array | null;\n definition: string;\n arguments_schema?: /** @arrow-schema */ Uint8Array | null;\n}\n\nexport interface IndexInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_path: string[];\n table_name: string;\n index_type: string;\n constraint_type: IndexConstraintType;\n expressions: string[];\n options: Record<string, string>;\n}\n\nexport interface AggregateBindRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n input_schema?: /** @arrow-schema */ Uint8Array | null;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n argument_names?: (string | null)[] | null;\n}\n\nexport interface AggregateBindResponse {\n output_schema: /** @arrow-schema */ Uint8Array;\n execution_id: Uint8Array;\n}\n\nexport interface AggregateCombineRequest {\n function_name: string;\n execution_id: Uint8Array;\n merge_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateCombineResponse {\n}\n\nexport interface AggregateDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n group_ids_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateDestructorResponse {\n}\n\nexport interface AggregateFinalizeRequest {\n function_name: string;\n execution_id: Uint8Array;\n group_ids_batch: Uint8Array;\n output_schema: /** @arrow-schema */ Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateFinalizeResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateStreamingChunkRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateStreamingChunkResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateStreamingCloseRequest {\n function_name: string;\n execution_id: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateStreamingCloseResponse {\n}\n\nexport interface AggregateStreamingOpenRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n input_schema: /** @arrow-schema */ Uint8Array;\n partition_key_count: number;\n order_key_count: number;\n output_schema: /** @arrow-schema */ Uint8Array;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateStreamingOpenResponse {\n execution_id: Uint8Array;\n}\n\nexport interface AggregateUpdateRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateUpdateResponse {\n}\n\nexport interface AggregateWindowRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n rid: number;\n frame_starts: number[];\n frame_ends: number[];\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateWindowResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateWindowBatchRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n row_idx: number;\n count: number;\n frames_per_row: number[];\n frame_starts: number[];\n frame_ends: number[];\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateWindowBatchResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateWindowDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateWindowDestructorResponse {\n}\n\nexport interface AggregateWindowInitRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n row_count: number;\n partition_batch: Uint8Array;\n output_schema: /** @arrow-schema */ Uint8Array;\n filter_mask: Uint8Array;\n frame_stats: Uint8Array;\n all_valid: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface AggregateWindowInitResponse {\n}\n\nexport interface CopyFromContext {\n format: string;\n file_path: string;\n expected_schema: /** @arrow-schema */ Uint8Array;\n}\n\nexport interface CopyToContext {\n format: string;\n file_path: string;\n}\n\nexport interface BindRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n function_type: InvocationFunctionType;\n input_schema?: /** @arrow-schema */ Uint8Array | null;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n transaction_opaque_data?: Uint8Array | null;\n resolved_secrets_provided: boolean;\n at_unit?: string | null;\n at_value?: string | null;\n copy_from?: CopyFromContext | null;\n copy_to?: CopyToContext | null;\n schema_path?: string[] | null;\n argument_names?: (string | null)[] | null;\n}\n\nexport interface BindResponse {\n output_schema: /** @arrow-schema */ Uint8Array;\n opaque_data?: Uint8Array | null;\n lookup_secret_types: string[];\n lookup_scopes: string[];\n lookup_names: string[];\n}\n\nexport interface ClientCapabilities {\n engine: string;\n native_formats: string[];\n catalogs: string[];\n can_stream: boolean;\n filter_encodings: string[];\n}\n\nexport interface CatalogAttachRequest {\n name: string;\n options?: /** @record-batch */ Uint8Array | null;\n data_version_spec?: string | null;\n implementation_version?: string | null;\n client_capabilities?: ClientCapabilities | null;\n}\n\nexport interface CatalogAttachResult {\n attach_opaque_data: Uint8Array;\n supports_transactions: boolean;\n supports_time_travel: boolean;\n catalog_version_frozen: boolean;\n catalog_version: number;\n attach_opaque_data_required: boolean;\n default_schema: string;\n settings: Uint8Array[];\n secret_types: Uint8Array[];\n attach_catalogs: Uint8Array[];\n comment?: string | null;\n tags: Record<string, string>;\n supports_column_statistics: boolean;\n global_functions: Uint8Array[];\n global_function_prefix: string;\n resolved_data_version?: string | null;\n resolved_implementation_version?: string | null;\n supports_catalog_contents: boolean;\n}\n\nexport interface CatalogsResponse {\n items: CatalogInfo[];\n}\n\nexport interface SchemaContents {\n path: string[];\n schema: Uint8Array;\n tables: Uint8Array[];\n views: Uint8Array[];\n scalar_functions: Uint8Array[];\n aggregate_functions: Uint8Array[];\n table_functions: Uint8Array[];\n scalar_macros: Uint8Array[];\n table_macros: Uint8Array[];\n indexes: Uint8Array[];\n}\n\nexport interface CatalogContentsResponse {\n catalog_version: number;\n etag?: string | null;\n not_modified: boolean;\n schemas: SchemaContents[];\n}\n\nexport interface CopyFromFormatsResponse {\n items: Uint8Array[];\n}\n\nexport interface CatalogCreateRequest {\n name: string;\n on_conflict: OnConflict;\n options?: /** @record-batch */ Uint8Array | null;\n}\n\nexport interface IndexCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_path: string[];\n name: string;\n table_name: string;\n index_type: string;\n constraint_type: IndexConstraintType;\n expressions: string[];\n on_conflict: OnConflict;\n options: Record<string, string>;\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface IndexesResponse {\n items: IndexInfo[];\n}\n\nexport interface MacroCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_path: string[];\n name: string;\n macro_type: MacroType;\n parameters: string[];\n definition: string;\n on_conflict: OnConflict;\n parameter_default_values?: /** @record-batch */ Uint8Array | null;\n arguments_schema?: /** @arrow-schema */ Uint8Array | null;\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface MacrosResponse {\n items: MacroInfo[];\n}\n\nexport interface FunctionsResponse {\n items: FunctionInfo[];\n}\n\nexport interface TablesResponse {\n items: TableInfo[];\n}\n\nexport interface ViewsResponse {\n items: ViewInfo[];\n}\n\nexport interface SchemasResponse {\n items: SchemaInfo[];\n}\n\nexport interface TableCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_path: string[];\n name: string;\n columns: Uint8Array;\n on_conflict: OnConflict;\n not_null_constraints: number[];\n unique_constraints: number[][];\n check_constraints: string[];\n primary_key_constraints: number[][];\n foreign_key_constraints: Uint8Array[];\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface TransactionBeginResponse {\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface CatalogVersionResponse {\n version: number;\n}\n\nexport interface InitRequest {\n bind_call: BindRequest;\n output_schema: /** @arrow-schema */ Uint8Array;\n bind_opaque_data?: Uint8Array | null;\n projection_ids?: number[] | null;\n pushdown_filters?: /** @record-batch */ Uint8Array | null;\n join_keys?: /** @record-batch */ Uint8Array[] | null;\n split_tokens?: Uint8Array[] | null;\n row_limit?: number | null;\n phase?: TableInOutFunctionInitPhase | null;\n finalize_state_id?: Uint8Array | null;\n execution_id?: Uint8Array | null;\n init_opaque_data?: Uint8Array | null;\n substream_id?: Uint8Array | null;\n order_by_column_name?: string | null;\n order_by_direction?: OrderByDirection | null;\n order_by_null_order?: OrderByNullOrder | null;\n order_by_limit?: number | null;\n tablesample_percentage?: number | null;\n tablesample_seed?: number | null;\n}\n\nexport interface TableBufferingCombineRequest {\n function_name: string;\n execution_id: Uint8Array;\n state_ids: Uint8Array[];\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface TableBufferingCombineResponse {\n finalize_state_ids: Uint8Array[];\n}\n\nexport interface TableBufferingDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n schema_path?: string[] | null;\n}\n\nexport interface TableBufferingDestructorResponse {\n}\n\nexport interface TableBufferingProcessRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n batch_index?: number | null;\n schema_path?: string[] | null;\n}\n\nexport interface TableBufferingProcessResponse {\n state_id: Uint8Array;\n}\n\nexport interface TableFunctionCardinalityRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n}\n\nexport interface TableCardinality {\n estimate?: number | null;\n max?: number | null;\n}\n\nexport interface TableFunctionDynamicToStringRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n global_execution_id: Uint8Array;\n}\n\nexport interface TableFunctionDynamicToStringResponse {\n keys: string[];\n values: string[];\n}\n\nexport interface TableFunctionPlanRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n projection_ids?: number[] | null;\n pushdown_filters?: /** @record-batch */ Uint8Array | null;\n join_keys?: /** @record-batch */ Uint8Array[] | null;\n row_limit?: number | null;\n target_split_bytes?: number | null;\n min_splits?: number | null;\n max_splits_per_response?: number | null;\n cursor?: Uint8Array | null;\n refined_filters?: /** @record-batch */ Uint8Array | null;\n filters_complete: boolean;\n start_position?: Uint8Array | null;\n end_position?: Uint8Array | null;\n order_by_column_name?: string | null;\n order_by_direction?: OrderByDirection | null;\n order_by_null_order?: OrderByNullOrder | null;\n order_by_limit?: number | null;\n tablesample_percentage?: number | null;\n tablesample_seed?: number | null;\n}\n\nexport interface ScanSplit {\n payload: Uint8Array;\n token: Uint8Array;\n estimated_rows?: number | null;\n rows_exact: boolean;\n estimated_bytes?: number | null;\n partition_bounds?: /** @record-batch */ Uint8Array | null;\n column_statistics?: Uint8Array | null;\n location_ids?: number[] | null;\n start_position?: Uint8Array | null;\n end_position?: Uint8Array | null;\n}\n\nexport interface PlanResponse {\n splits: ScanSplit[] | Uint8Array[];\n next_cursors?: Uint8Array[] | null;\n execution_id?: Uint8Array | null;\n init_opaque_data?: Uint8Array | null;\n max_workers?: number | null;\n estimated_total_splits?: number | null;\n estimated_total_rows?: number | null;\n estimated_total_bytes?: number | null;\n catalog_version?: number | null;\n scope: string;\n locations?: string[] | null;\n partitioning?: Uint8Array[] | null;\n sort_order?: Uint8Array[] | null;\n cache_max_age_seconds?: number | null;\n start_position?: Uint8Array | null;\n end_position?: Uint8Array | null;\n}\n\nexport interface TableFunctionStatisticsRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n}\n\n// ----------------------------------------------------------------------------\n// Codec wrappers: turn the typed interfaces above into actual wire bytes.\n// ----------------------------------------------------------------------------\n\nexport const encodeCatalogInfo = (v: CatalogInfo): Uint8Array => encodeASD(CatalogInfoSchema, v);\nexport const decodeCatalogInfo = (b: Uint8Array): CatalogInfo => decodeASD<CatalogInfo>(CatalogInfoSchema, b);\nexport const encodeFunctionInfo = (v: FunctionInfo): Uint8Array => encodeASD(FunctionInfoSchema, v);\nexport const decodeFunctionInfo = (b: Uint8Array): FunctionInfo => decodeASD<FunctionInfo>(FunctionInfoSchema, b);\nexport const encodeIndexInfo = (v: IndexInfo): Uint8Array => encodeASD(IndexInfoSchema, v);\nexport const decodeIndexInfo = (b: Uint8Array): IndexInfo => decodeASD<IndexInfo>(IndexInfoSchema, b);\nexport const encodeMacroInfo = (v: MacroInfo): Uint8Array => encodeASD(MacroInfoSchema, v);\nexport const decodeMacroInfo = (b: Uint8Array): MacroInfo => decodeASD<MacroInfo>(MacroInfoSchema, b);\nexport const encodeSchemaInfo = (v: SchemaInfo): Uint8Array => encodeASD(SchemaInfoSchema, v);\nexport const decodeSchemaInfo = (b: Uint8Array): SchemaInfo => decodeASD<SchemaInfo>(SchemaInfoSchema, b);\nexport const encodeTableInfo = (v: TableInfo): Uint8Array => encodeASD(TableInfoSchema, v);\nexport const decodeTableInfo = (b: Uint8Array): TableInfo => decodeASD<TableInfo>(TableInfoSchema, b);\nexport const encodeViewInfo = (v: ViewInfo): Uint8Array => encodeASD(ViewInfoSchema, v);\nexport const decodeViewInfo = (b: Uint8Array): ViewInfo => decodeASD<ViewInfo>(ViewInfoSchema, b);\n",
|
|
@@ -90,8 +90,8 @@
|
|
|
90
90
|
"// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n//\n// VENDORED ASSET — DO NOT EDIT BY HAND.\n// Browser build of the @query-farm/vgi client, authored in\n// vgi-web-frontend (`bun run build:landing-client`). The shared landing\n// page imports it from {prefix}/vgi-client.js to read catalog metadata\n// over the VGI protocol. Base64-embedded so it survives single-file\n// bundling (bun build) unchanged and is served as raw bytes.\n// Regenerate with scripts/vendor-client-bundle.mjs.\n\nconst CLIENT_BUNDLE_B64 =\n \"dmFyIFVEPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgTUQ9KCQpPT4kO2Z1bmN0aW9uIExEKCQsWil7dGhpc1skXT1NRC5iaW5kKG51bGwsWil9dmFyIFA4PSgkLFopPT57Zm9yKHZhciBRIGluIFopVUQoJCxRLHtnZXQ6WltRXSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxzZXQ6TEQuYmluZChaLFEpfSl9O3ZhciBPPSgkLFopPT4oKT0+KCQmJihaPSQoJD0wKSksWik7ZnVuY3Rpb24gTzkoJCxaKXt2YXIgUT17fTtmb3IodmFyIFggaW4gJClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJCxYKSYmWi5pbmRleE9mKFgpPDApUVtYXT0kW1hdO2lmKCQhPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT09ImZ1bmN0aW9uIil7Zm9yKHZhciBKPTAsWD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKCQpO0o8WC5sZW5ndGg7SisrKWlmKFouaW5kZXhPZihYW0pdKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoJCxYW0pdKSlRW1hbSl1dPSRbWFtKXV19cmV0dXJuIFF9ZnVuY3Rpb24gbigkLFosUSxYKXtmdW5jdGlvbiBKKFcpe3JldHVybiBXIGluc3RhbmNlb2YgUT9XOm5ldyBRKGZ1bmN0aW9uKFkpe1koVyl9KX1yZXR1cm4gbmV3KFF8fChRPVByb21pc2UpKShmdW5jdGlvbihXLFkpe2Z1bmN0aW9uIEcocSl7dHJ5e3ooWC5uZXh0KHEpKX1jYXRjaChQKXtZKFApfX1mdW5jdGlvbiBIKHEpe3RyeXt6KFgudGhyb3cocSkpfWNhdGNoKFApe1koUCl9fWZ1bmN0aW9uIHoocSl7cS5kb25lP1cocS52YWx1ZSk6SihxLnZhbHVlKS50aGVuKEcsSCl9eigoWD1YLmFwcGx5KCQsWnx8W10pKS5uZXh0KCkpfSl9ZnVuY3Rpb24gRDkoJCl7dmFyIFo9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixRPVomJiRbWl0sWD0wO2lmKFEpcmV0dXJuIFEuY2FsbCgkKTtpZigkJiZ0eXBlb2YgJC5sZW5ndGg9PT0ibnVtYmVyIilyZXR1cm57bmV4dDpmdW5jdGlvbigpe2lmKCQmJlg+PSQubGVuZ3RoKSQ9dm9pZCAwO3JldHVybnt2YWx1ZTokJiYkW1grK10sZG9uZTohJH19fTt0aHJvdyBUeXBlRXJyb3IoWj8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9ZnVuY3Rpb24gVjAoJCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBWMD8odGhpcy52PSQsdGhpcyk6bmV3IFYwKCQpfWZ1bmN0aW9uIFVRKCQsWixRKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgWD1RLmFwcGx5KCQsWnx8W10pLEosVz1bXTtyZXR1cm4gSj1PYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvcj09PSJmdW5jdGlvbiI/QXN5bmNJdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSksRygibmV4dCIpLEcoInRocm93IiksRygicmV0dXJuIixZKSxKW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxKO2Z1bmN0aW9uIFkoTSl7cmV0dXJuIGZ1bmN0aW9uKEwpe3JldHVybiBQcm9taXNlLnJlc29sdmUoTCkudGhlbihNLFApfX1mdW5jdGlvbiBHKE0sTCl7aWYoWFtNXSl7aWYoSltNXT1mdW5jdGlvbihEKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oUixWKXtXLnB1c2goW00sRCxSLFZdKT4xfHxIKE0sRCl9KX0sTClKW01dPUwoSltNXSl9fWZ1bmN0aW9uIEgoTSxMKXt0cnl7eihYW01dKEwpKX1jYXRjaChEKXtVKFdbMF1bM10sRCl9fWZ1bmN0aW9uIHooTSl7TS52YWx1ZSBpbnN0YW5jZW9mIFYwP1Byb21pc2UucmVzb2x2ZShNLnZhbHVlLnYpLnRoZW4ocSxQKTpVKFdbMF1bMl0sTSl9ZnVuY3Rpb24gcShNKXtIKCJuZXh0IixNKX1mdW5jdGlvbiBQKE0pe0goInRocm93IixNKX1mdW5jdGlvbiBVKE0sTCl7aWYoTShMKSxXLnNoaWZ0KCksVy5sZW5ndGgpSChXWzBdWzBdLFdbMF1bMV0pfX1mdW5jdGlvbiBkNigkKXt2YXIgWixRO3JldHVybiBaPXt9LFgoIm5leHQiKSxYKCJ0aHJvdyIsZnVuY3Rpb24oSil7dGhyb3cgSn0pLFgoInJldHVybiIpLFpbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxaO2Z1bmN0aW9uIFgoSixXKXtaW0pdPSRbSl0/ZnVuY3Rpb24oWSl7cmV0dXJuKFE9IVEpP3t2YWx1ZTpWMCgkW0pdKFkpKSxkb25lOiExfTpXP1coWSk6WX06V319ZnVuY3Rpb24gRjgoJCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIFo9JFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sUTtyZXR1cm4gWj9aLmNhbGwoJCk6KCQ9dHlwZW9mIEQ5PT09ImZ1bmN0aW9uIj9EOSgkKTokW1N5bWJvbC5pdGVyYXRvcl0oKSxRPXt9LFgoIm5leHQiKSxYKCJ0aHJvdyIpLFgoInJldHVybiIpLFFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LFEpO2Z1bmN0aW9uIFgoVyl7UVtXXT0kW1ddJiZmdW5jdGlvbihZKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRyxIKXtZPSRbV10oWSksSihHLEgsWS5kb25lLFkudmFsdWUpfSl9fWZ1bmN0aW9uIEooVyxZLEcsSCl7UHJvbWlzZS5yZXNvbHZlKEgpLnRoZW4oZnVuY3Rpb24oeil7Vyh7dmFsdWU6eixkb25lOkd9KX0sWSl9fXZhciBNUT0oKT0+e307dmFyIEM5LG42LEFELExRPSgkKT0+QUQuZW5jb2RlKCQpO3ZhciBqWD1PKCgpPT57Qzk9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLG42PUM5LmRlY29kZS5iaW5kKEM5KSxBRD1uZXcgVGV4dEVuY29kZXJ9KTt2YXIgREQ9KCQpPT50eXBlb2YgJD09PSJudW1iZXIiLGo5PSgkKT0+dHlwZW9mICQ9PT0iYm9vbGVhbiIsbyQ9KCQpPT50eXBlb2YgJD09PSJmdW5jdGlvbiIsVFo9KCQpPT4kIT1udWxsJiZPYmplY3QoJCk9PT0kLE44PSgkKT0+e3JldHVybiBUWigkKSYmbyQoJC50aGVuKX0sVTg9KCQpPT57cmV0dXJuIFRaKCQpJiZvJCgkW1N5bWJvbC5pdGVyYXRvcl0pfSxmUT0oJCk9PntyZXR1cm4gVFooJCkmJm8kKCRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX0sYTE9KCQpPT57cmV0dXJuIFRaKCQpJiZUWigkLnNjaGVtYSl9LHQxPSgkKT0+e3JldHVybiBUWigkKSYmImRvbmUiaW4gJCYmInZhbHVlImluICR9LGUxPSgkKT0+e3JldHVybiBUWigkKSYmbyQoJC5zdGF0KSYmREQoJC5mZCl9LCQ0PSgkKT0+e3JldHVybiBUWigkKSYmUFkoJC5ib2R5KX0sWjQ9KCQpPT4oIl9nZXRET01TdHJlYW0iaW4gJCkmJigiX2dldE5vZGVTdHJlYW0iaW4gJCksVjk9KCQpPT57cmV0dXJuIFRaKCQpJiZvJCgkLmFib3J0KSYmbyQoJC5nZXRXcml0ZXIpJiYhWjQoJCl9LFBZPSgkKT0+e3JldHVybiBUWigkKSYmbyQoJC5jYW5jZWwpJiZvJCgkLmdldFJlYWRlcikmJiFaNCgkKX0sUjk9KCQpPT57cmV0dXJuIFRaKCQpJiZvJCgkLmVuZCkmJm8kKCQud3JpdGUpJiZqOSgkLndyaXRhYmxlKSYmIVo0KCQpfSxRND0oJCk9PntyZXR1cm4gVFooJCkmJm8kKCQucmVhZCkmJm8kKCQucGlwZSkmJmo5KCQucmVhZGFibGUpJiYhWjQoJCl9LEU5PSgkKT0+e3JldHVybiBUWigkKSYmbyQoJC5jbGVhcikmJm8kKCQuYnl0ZXMpJiZvJCgkLnBvc2l0aW9uKSYmbyQoJC5zZXRQb3NpdGlvbikmJm8kKCQuY2FwYWNpdHkpJiZvJCgkLmdldEJ1ZmZlcklkZW50aWZpZXIpJiZvJCgkLmNyZWF0ZUxvbmcpfTt2YXIgcUs9e307UDgocUsse3RvVWludDhDbGFtcGVkQXJyYXlJdGVyYXRvcjooKT0+eUQsdG9VaW50OENsYW1wZWRBcnJheUFzeW5jSXRlcmF0b3I6KCk9PmxELHRvVWludDhDbGFtcGVkQXJyYXk6KCk9PkJELHRvVWludDhBcnJheUl0ZXJhdG9yOigpPT5LSyx0b1VpbnQ4QXJyYXlBc3luY0l0ZXJhdG9yOigpPT5ISyx0b1VpbnQ4QXJyYXk6KCk9PiQwLHRvVWludDMyQXJyYXlJdGVyYXRvcjooKT0+Z0QsdG9VaW50MzJBcnJheUFzeW5jSXRlcmF0b3I6KCk9PnVELHRvVWludDMyQXJyYXk6KCk9PlJELHRvVWludDE2QXJyYXlJdGVyYXRvcjooKT0+VEQsdG9VaW50MTZBcnJheUFzeW5jSXRlcmF0b3I6KCk9PmZELHRvVWludDE2QXJyYXk6KCk9PlZELHRvSW50OEFycmF5SXRlcmF0b3I6KCk9PmtELHRvSW50OEFycmF5QXN5bmNJdGVyYXRvcjooKT0+aEQsdG9JbnQ4QXJyYXk6KCk9PkNELHRvSW50MzJBcnJheUl0ZXJhdG9yOigpPT5fRCx0b0ludDMyQXJyYXlBc3luY0l0ZXJhdG9yOigpPT5tRCx0b0ludDMyQXJyYXk6KCk9Pm9KLHRvSW50MTZBcnJheUl0ZXJhdG9yOigpPT5JRCx0b0ludDE2QXJyYXlBc3luY0l0ZXJhdG9yOigpPT5iRCx0b0ludDE2QXJyYXk6KCk9PmpELHRvRmxvYXQ2NEFycmF5SXRlcmF0b3I6KCk9PnZELHRvRmxvYXQ2NEFycmF5QXN5bmNJdGVyYXRvcjooKT0+Y0QsdG9GbG9hdDY0QXJyYXk6KCk9PlNELHRvRmxvYXQzMkFycmF5SXRlcmF0b3I6KCk9PnhELHRvRmxvYXQzMkFycmF5QXN5bmNJdGVyYXRvcjooKT0+cEQsdG9GbG9hdDMyQXJyYXk6KCk9PndELHRvQmlnVWludDY0QXJyYXk6KCk9PkVELHRvQmlnSW50NjRBcnJheTooKT0+WDQsdG9BcnJheUJ1ZmZlclZpZXdJdGVyYXRvcjooKT0+ZDgsdG9BcnJheUJ1ZmZlclZpZXdBc3luY0l0ZXJhdG9yOigpPT5NOCx0b0FycmF5QnVmZmVyVmlldzooKT0+UzAscmViYXNlVmFsdWVPZmZzZXRzOigpPT5KNCxtZW1jcHk6KCk9PkZZLGpvaW5VaW50OEFycmF5czooKT0+QVEsY29tcGFyZUFycmF5TGlrZTooKT0+ekt9KTtmdW5jdGlvbiBPRCgkKXtsZXQgWj0kWzBdP1skWzBdXTpbXSxRLFgsSixXO2ZvcihsZXQgWSxHLEg9MCx6PTAscT0kLmxlbmd0aDsrK0g8cTspe2lmKFk9Wlt6XSxHPSRbSF0sIVl8fCFHfHxZLmJ1ZmZlciE9PUcuYnVmZmVyfHxHLmJ5dGVPZmZzZXQ8WS5ieXRlT2Zmc2V0KXtHJiYoWlsrK3pdPUcpO2NvbnRpbnVlfWlmKHtieXRlT2Zmc2V0OlEsYnl0ZUxlbmd0aDpKfT1ZLHtieXRlT2Zmc2V0OlgsYnl0ZUxlbmd0aDpXfT1HLFErSjxYfHxYK1c8USl7RyYmKFpbKyt6XT1HKTtjb250aW51ZX1aW3pdPW5ldyBVaW50OEFycmF5KFkuYnVmZmVyLFEsWC1RK1cpfXJldHVybiBafWZ1bmN0aW9uIEZZKCQsWixRPTAsWD1aLmJ5dGVMZW5ndGgpe2xldCBKPSQuYnl0ZUxlbmd0aCxXPW5ldyBVaW50OEFycmF5KCQuYnVmZmVyLCQuYnl0ZU9mZnNldCxKKSxZPW5ldyBVaW50OEFycmF5KFouYnVmZmVyLFouYnl0ZU9mZnNldCxNYXRoLm1pbihYLEopKTtyZXR1cm4gVy5zZXQoWSxRKSwkfWZ1bmN0aW9uIEFRKCQsWil7bGV0IFE9T0QoJCksWD1RLnJlZHVjZSgocSxQKT0+cStQLmJ5dGVMZW5ndGgsMCksSixXLFksRz0wLEg9LTEsej1NYXRoLm1pbihafHxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksWCk7Zm9yKGxldCBxPVEubGVuZ3RoOysrSDxxOyl7aWYoSj1RW0hdLFc9Si5zdWJhcnJheSgwLE1hdGgubWluKEoubGVuZ3RoLHotRykpLHo8PUcrVy5sZW5ndGgpe2lmKFcubGVuZ3RoPEoubGVuZ3RoKVFbSF09Si5zdWJhcnJheShXLmxlbmd0aCk7ZWxzZSBpZihXLmxlbmd0aD09PUoubGVuZ3RoKUgrKztZP0ZZKFksVyxHKTpZPVc7YnJlYWt9RlkoWXx8KFk9bmV3IFVpbnQ4QXJyYXkoeikpLFcsRyksRys9Vy5sZW5ndGh9cmV0dXJuW1l8fG5ldyBVaW50OEFycmF5KDApLFEuc2xpY2UoSCksWC0oWT9ZLmJ5dGVMZW5ndGg6MCldfWZ1bmN0aW9uIFMwKCQsWil7bGV0IFE9dDEoWik/Wi52YWx1ZTpaO2lmKFEgaW5zdGFuY2VvZiAkKXtpZigkPT09VWludDhBcnJheSlyZXR1cm4gbmV3ICQoUS5idWZmZXIsUS5ieXRlT2Zmc2V0LFEuYnl0ZUxlbmd0aCk7cmV0dXJuIFF9aWYoIVEpcmV0dXJuIG5ldyAkKDApO2lmKHR5cGVvZiBRPT09InN0cmluZyIpUT1MUShRKTtpZihRIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyAkKFEpO2lmKFEgaW5zdGFuY2VvZiBHSylyZXR1cm4gbmV3ICQoUSk7aWYoRTkoUSkpcmV0dXJuIFMwKCQsUS5ieXRlcygpKTtyZXR1cm4hQXJyYXlCdWZmZXIuaXNWaWV3KFEpPyQuZnJvbShRKTpRLmJ5dGVMZW5ndGg8PTA/bmV3ICQoMCk6bmV3ICQoUS5idWZmZXIsUS5ieXRlT2Zmc2V0LFEuYnl0ZUxlbmd0aC8kLkJZVEVTX1BFUl9FTEVNRU5UKX1mdW5jdGlvbipkOCgkLFope2xldCBRPWZ1bmN0aW9uKihKKXt5aWVsZCBKfSxYPXR5cGVvZiBaPT09InN0cmluZyI/UShaKTpBcnJheUJ1ZmZlci5pc1ZpZXcoWik/UShaKTpaIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/UShaKTpaIGluc3RhbmNlb2YgR0s/UShaKTohVTgoWik/UShaKTpaO3JldHVybiB5aWVsZCpZSyhmdW5jdGlvbiooSil7bGV0IFc9bnVsbDtkbyBXPUoubmV4dCh5aWVsZCBTMCgkLFcpKTt3aGlsZSghVy5kb25lKX0oWFtTeW1ib2wuaXRlcmF0b3JdKCkpKSxuZXcgJH1mdW5jdGlvbiBNOCgkLFope3JldHVybiBVUSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtpZihOOChaKSlyZXR1cm4geWllbGQgVjAoeWllbGQgVjAoeWllbGQqZDYoRjgoTTgoJCx5aWVsZCBWMChaKSkpKSkpO2xldCBYPWZ1bmN0aW9uKFkpe3JldHVybiBVUSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXt5aWVsZCB5aWVsZCBWMCh5aWVsZCBWMChZKSl9KX0sSj1mdW5jdGlvbihZKXtyZXR1cm4gVVEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7eWllbGQgVjAoeWllbGQqZDYoRjgoWUsoZnVuY3Rpb24qKEcpe2xldCBIPW51bGw7ZG8gSD1HLm5leHQoeWllbGQgSD09PW51bGx8fEg9PT12b2lkIDA/dm9pZCAwOkgudmFsdWUpO3doaWxlKCFILmRvbmUpfShZW1N5bWJvbC5pdGVyYXRvcl0oKSkpKSkpfSl9LFc9dHlwZW9mIFo9PT0ic3RyaW5nIj9YKFopOkFycmF5QnVmZmVyLmlzVmlldyhaKT9YKFopOlogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9YKFopOlogaW5zdGFuY2VvZiBHSz9YKFopOlU4KFopP0ooWik6IWZRKFopP1goWik6WjtyZXR1cm4geWllbGQgVjAoeWllbGQqZDYoRjgoWUsoZnVuY3Rpb24oWSl7cmV0dXJuIFVRKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBHPW51bGw7ZG8gRz15aWVsZCBWMChZLm5leHQoeWllbGQgeWllbGQgVjAoUzAoJCxHKSkpKTt3aGlsZSghRy5kb25lKX0pfShXW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpKSkpKSkseWllbGQgVjAobmV3ICQpfSl9ZnVuY3Rpb24gSjQoJCxaLFEpe2lmKCQhPT0wKXtRPVEuc2xpY2UoMCxaKTtmb3IobGV0IFg9LTEsSj1RLmxlbmd0aDsrK1g8SjspUVtYXSs9JH1yZXR1cm4gUS5zdWJhcnJheSgwLFopfWZ1bmN0aW9uIHpLKCQsWil7bGV0IFE9MCxYPSQubGVuZ3RoO2lmKFghPT1aLmxlbmd0aClyZXR1cm4hMTtpZihYPjApZG8gaWYoJFtRXSE9PVpbUV0pcmV0dXJuITE7d2hpbGUoKytRPFgpO3JldHVybiEwfXZhciBHSyxDRD0oJCk9PlMwKEludDhBcnJheSwkKSxqRD0oJCk9PlMwKEludDE2QXJyYXksJCksb0o9KCQpPT5TMChJbnQzMkFycmF5LCQpLFg0PSgkKT0+UzAoQmlnSW50NjRBcnJheSwkKSwkMD0oJCk9PlMwKFVpbnQ4QXJyYXksJCksVkQ9KCQpPT5TMChVaW50MTZBcnJheSwkKSxSRD0oJCk9PlMwKFVpbnQzMkFycmF5LCQpLEVEPSgkKT0+UzAoQmlnVWludDY0QXJyYXksJCksd0Q9KCQpPT5TMChGbG9hdDMyQXJyYXksJCksU0Q9KCQpPT5TMChGbG9hdDY0QXJyYXksJCksQkQ9KCQpPT5TMChVaW50OENsYW1wZWRBcnJheSwkKSxZSz0oJCk9PntyZXR1cm4gJC5uZXh0KCksJH0sa0Q9KCQpPT5kOChJbnQ4QXJyYXksJCksSUQ9KCQpPT5kOChJbnQxNkFycmF5LCQpLF9EPSgkKT0+ZDgoSW50MzJBcnJheSwkKSxLSz0oJCk9PmQ4KFVpbnQ4QXJyYXksJCksVEQ9KCQpPT5kOChVaW50MTZBcnJheSwkKSxnRD0oJCk9PmQ4KFVpbnQzMkFycmF5LCQpLHhEPSgkKT0+ZDgoRmxvYXQzMkFycmF5LCQpLHZEPSgkKT0+ZDgoRmxvYXQ2NEFycmF5LCQpLHlEPSgkKT0+ZDgoVWludDhDbGFtcGVkQXJyYXksJCksaEQ9KCQpPT5NOChJbnQ4QXJyYXksJCksYkQ9KCQpPT5NOChJbnQxNkFycmF5LCQpLG1EPSgkKT0+TTgoSW50MzJBcnJheSwkKSxISz0oJCk9Pk04KFVpbnQ4QXJyYXksJCksZkQ9KCQpPT5NOChVaW50MTZBcnJheSwkKSx1RD0oJCk9Pk04KFVpbnQzMkFycmF5LCQpLHBEPSgkKT0+TTgoRmxvYXQzMkFycmF5LCQpLGNEPSgkKT0+TTgoRmxvYXQ2NEFycmF5LCQpLGxEPSgkKT0+TTgoVWludDhDbGFtcGVkQXJyYXksJCk7dmFyIHMkPU8oKCk9PntNUSgpO2pYKCk7R0s9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRBcnJheUJ1ZmZlcjpBcnJheUJ1ZmZlcn0pO2Z1bmN0aW9uKmREKCQpe2xldCBaLFE9ITEsWD1bXSxKLFcsWSxHPTA7ZnVuY3Rpb24gSCgpe2lmKFc9PT0icGVlayIpcmV0dXJuIEFRKFgsWSlbMF07cmV0dXJuW0osWCxHXT1BUShYLFkpLEp9KHtjbWQ6VyxzaXplOll9PSh5aWVsZCgoKT0+bnVsbCkoKSl8fHtjbWQ6InJlYWQiLHNpemU6MH0pO2xldCB6PUtLKCQpW1N5bWJvbC5pdGVyYXRvcl0oKTt0cnl7ZG97aWYoe2RvbmU6Wix2YWx1ZTpKfT1OdW1iZXIuaXNOYU4oWS1HKT96Lm5leHQoKTp6Lm5leHQoWS1HKSwhWiYmSi5ieXRlTGVuZ3RoPjApWC5wdXNoKEopLEcrPUouYnl0ZUxlbmd0aDtpZihafHxZPD1HKWRvKHtjbWQ6VyxzaXplOll9PXlpZWxkIEgoKSk7d2hpbGUoWTxHKX13aGlsZSghWil9Y2F0Y2gocSl7UT0hMCx0eXBlb2Ygei50aHJvdz09PSJmdW5jdGlvbiImJnoudGhyb3cocSl9ZmluYWxseXtRPT09ITEmJnR5cGVvZiB6LnJldHVybj09PSJmdW5jdGlvbiImJnoucmV0dXJuKG51bGwpfXJldHVybiBudWxsfWZ1bmN0aW9uIG5EKCQpe3JldHVybiBVUSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgUSxYPSExLEo9W10sVyxZLEcsSD0wO2Z1bmN0aW9uIHooKXtpZihZPT09InBlZWsiKXJldHVybiBBUShKLEcpWzBdO3JldHVybltXLEosSF09QVEoSixHKSxXfSh7Y21kOlksc2l6ZTpHfT0oeWllbGQgeWllbGQgVjAoKCgpPT5udWxsKSgpKSl8fHtjbWQ6InJlYWQiLHNpemU6MH0pO2xldCBxPUhLKCQpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO3RyeXtkb3tpZih7ZG9uZTpRLHZhbHVlOld9PU51bWJlci5pc05hTihHLUgpP3lpZWxkIFYwKHEubmV4dCgpKTp5aWVsZCBWMChxLm5leHQoRy1IKSksIVEmJlcuYnl0ZUxlbmd0aD4wKUoucHVzaChXKSxIKz1XLmJ5dGVMZW5ndGg7aWYoUXx8Rzw9SClkbyh7Y21kOlksc2l6ZTpHfT15aWVsZCB5aWVsZCBWMCh6KCkpKTt3aGlsZShHPEgpfXdoaWxlKCFRKX1jYXRjaChQKXtYPSEwLHR5cGVvZiBxLnRocm93PT09ImZ1bmN0aW9uIiYmKHlpZWxkIFYwKHEudGhyb3coUCkpKX1maW5hbGx5e1g9PT0hMSYmdHlwZW9mIHEucmV0dXJuPT09ImZ1bmN0aW9uIiYmKHlpZWxkIFYwKHEucmV0dXJuKG5ldyBVaW50OEFycmF5KDApKSkpfXJldHVybiB5aWVsZCBWMChudWxsKX0pfWZ1bmN0aW9uIG9EKCQpe3JldHVybiBVUSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgUT0hMSxYPSExLEo9W10sVyxZLEcsSD0wO2Z1bmN0aW9uIHooKXtpZihZPT09InBlZWsiKXJldHVybiBBUShKLEcpWzBdO3JldHVybltXLEosSF09QVEoSixHKSxXfSh7Y21kOlksc2l6ZTpHfT0oeWllbGQgeWllbGQgVjAoKCgpPT5udWxsKSgpKSl8fHtjbWQ6InJlYWQiLHNpemU6MH0pO2xldCBxPW5ldyB3OSgkKTt0cnl7ZG97aWYoe2RvbmU6USx2YWx1ZTpXfT1OdW1iZXIuaXNOYU4oRy1IKT95aWVsZCBWMChxLnJlYWQoKSk6eWllbGQgVjAocS5yZWFkKEctSCkpLCFRJiZXLmJ5dGVMZW5ndGg+MClKLnB1c2goJDAoVykpLEgrPVcuYnl0ZUxlbmd0aDtpZihRfHxHPD1IKWRvKHtjbWQ6WSxzaXplOkd9PXlpZWxkIHlpZWxkIFYwKHooKSkpO3doaWxlKEc8SCl9d2hpbGUoIVEpfWNhdGNoKFApe1g9ITAseWllbGQgVjAocS5jYW5jZWwoUCkpfWZpbmFsbHl7WD09PSExP3lpZWxkIFYwKHEuY2FuY2VsKCkpOiQubG9ja2VkJiZxLnJlbGVhc2VMb2NrKCl9cmV0dXJuIHlpZWxkIFYwKG51bGwpfSl9Y2xhc3Mgdzl7Y29uc3RydWN0b3IoJCl7dGhpcy5zb3VyY2U9JCx0aGlzLnJlYWRlcj1udWxsLHRoaXMucmVhZGVyPXRoaXMuc291cmNlLmdldFJlYWRlcigpLHRoaXMucmVhZGVyLmNsb3NlZC5jYXRjaCgoKT0+e30pfWdldCBjbG9zZWQoKXtyZXR1cm4gdGhpcy5yZWFkZXI/dGhpcy5yZWFkZXIuY2xvc2VkLmNhdGNoKCgpPT57fSk6UHJvbWlzZS5yZXNvbHZlKCl9cmVsZWFzZUxvY2soKXtpZih0aGlzLnJlYWRlcil0aGlzLnJlYWRlci5yZWxlYXNlTG9jaygpO3RoaXMucmVhZGVyPW51bGx9Y2FuY2VsKCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXR7cmVhZGVyOlosc291cmNlOlF9PXRoaXM7WiYmKHlpZWxkIFouY2FuY2VsKCQpLmNhdGNoKCgpPT57fSkpLFEmJihRLmxvY2tlZCYmdGhpcy5yZWxlYXNlTG9jaygpKX0pfXJlYWQoJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCQ9PT0wKXJldHVybntkb25lOnRoaXMucmVhZGVyPT1udWxsLHZhbHVlOm5ldyBVaW50OEFycmF5KDApfTtsZXQgWj15aWVsZCB0aGlzLnJlYWRlci5yZWFkKCk7cmV0dXJuIVouZG9uZSYmKFoudmFsdWU9JDAoWikpLFp9KX19ZnVuY3Rpb24gc0QoJCl7cmV0dXJuIFVRKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBRPVtdLFg9ImVycm9yIixKPSExLFc9bnVsbCxZLEcsSD0wLHo9W10scTtmdW5jdGlvbiBQKCl7aWYoWT09PSJwZWVrIilyZXR1cm4gQVEoeixHKVswXTtyZXR1cm5bcSx6LEhdPUFRKHosRykscX1pZih7Y21kOlksc2l6ZTpHfT0oeWllbGQgeWllbGQgVjAoKCgpPT5udWxsKSgpKSl8fHtjbWQ6InJlYWQiLHNpemU6MH0sJC5pc1RUWSlyZXR1cm4geWllbGQgeWllbGQgVjAobmV3IFVpbnQ4QXJyYXkoMCkpLHlpZWxkIFYwKG51bGwpO3RyeXtRWzBdPVBLKCQsImVuZCIpLFFbMV09UEsoJCwiZXJyb3IiKTtkb3tpZihRWzJdPVBLKCQsInJlYWRhYmxlIiksW1gsV109eWllbGQgVjAoUHJvbWlzZS5yYWNlKFEubWFwKChNKT0+TVsyXSkpKSxYPT09ImVycm9yIilicmVhaztpZighKEo9WD09PSJlbmQiKSl7aWYoIU51bWJlci5pc0Zpbml0ZShHLUgpKXE9JDAoJC5yZWFkKCkpO2Vsc2UgaWYocT0kMCgkLnJlYWQoRy1IKSkscS5ieXRlTGVuZ3RoPEctSClxPSQwKCQucmVhZCgpKTtpZihxLmJ5dGVMZW5ndGg+MCl6LnB1c2gocSksSCs9cS5ieXRlTGVuZ3RofWlmKEp8fEc8PUgpZG8oe2NtZDpZLHNpemU6R309eWllbGQgeWllbGQgVjAoUCgpKSk7d2hpbGUoRzxIKX13aGlsZSghSil9ZmluYWxseXt5aWVsZCBWMChVKFEsWD09PSJlcnJvciI/VzpudWxsKSl9cmV0dXJuIHlpZWxkIFYwKG51bGwpO2Z1bmN0aW9uIFUoTSxMKXtyZXR1cm4gcT16PW51bGwsbmV3IFByb21pc2UoKEQsUik9Pntmb3IobGV0W1YsZ11vZiBNKSQub2ZmKFYsZyk7dHJ5e2xldCBWPSQuZGVzdHJveTtWJiZWLmNhbGwoJCxMKSxMPXZvaWQgMH1jYXRjaChWKXtMPVZ8fEx9ZmluYWxseXtMIT1udWxsP1IoTCk6RCgpfX0pfX0pfXZhciBOWixXND0oJCk9PntyZXR1cm4gJC5uZXh0KCksJH0sUEs9KCQsWik9PntsZXQgUT0oSik9PlgoW1osSl0pLFg7cmV0dXJuW1osUSxuZXcgUHJvbWlzZSgoSik9PihYPUopJiYkLm9uY2UoWixRKSldfTt2YXIgTlk9TygoKT0+e01RKCk7cyQoKTtOWj17ZnJvbUl0ZXJhYmxlKCQpe3JldHVybiBXNChkRCgkKSl9LGZyb21Bc3luY0l0ZXJhYmxlKCQpe3JldHVybiBXNChuRCgkKSl9LGZyb21ET01TdHJlYW0oJCl7cmV0dXJuIFc0KG9EKCQpKX0sZnJvbU5vZGVTdHJlYW0oJCl7cmV0dXJuIFc0KHNEKCQpKX0sdG9ET01TdHJlYW0oJCxaKXt0aHJvdyBFcnJvcignInRvRE9NU3RyZWFtIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX0sdG9Ob2RlU3RyZWFtKCQsWil7dGhyb3cgRXJyb3IoJyJ0b05vZGVTdHJlYW0iIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpfX19KTt2YXIgaTA7dmFyIFk0PU8oKCk9PnsoZnVuY3Rpb24oJCl7JFskLlYxPTBdPSJWMSIsJFskLlYyPTFdPSJWMiIsJFskLlYzPTJdPSJWMyIsJFskLlY0PTNdPSJWNCIsJFskLlY1PTRdPSJWNSJ9KShpMHx8KGkwPXt9KSl9KTt2YXIgbTA7dmFyIEZLPU8oKCk9PnsoZnVuY3Rpb24oJCl7JFskLlNwYXJzZT0wXT0iU3BhcnNlIiwkWyQuRGVuc2U9MV09IkRlbnNlIn0pKG0wfHwobTA9e30pKX0pO3ZhciBKJDt2YXIgTks9TygoKT0+eyhmdW5jdGlvbigkKXskWyQuSEFMRj0wXT0iSEFMRiIsJFskLlNJTkdMRT0xXT0iU0lOR0xFIiwkWyQuRE9VQkxFPTJdPSJET1VCTEUifSkoSiR8fChKJD17fSkpfSk7dmFyIHIwO3ZhciBVSz1PKCgpPT57KGZ1bmN0aW9uKCQpeyRbJC5EQVk9MF09IkRBWSIsJFskLk1JTExJU0VDT05EPTFdPSJNSUxMSVNFQ09ORCJ9KShyMHx8KHIwPXt9KSl9KTt2YXIgbDt2YXIgVVk9TygoKT0+eyhmdW5jdGlvbigkKXskWyQuU0VDT05EPTBdPSJTRUNPTkQiLCRbJC5NSUxMSVNFQ09ORD0xXT0iTUlMTElTRUNPTkQiLCRbJC5NSUNST1NFQ09ORD0yXT0iTUlDUk9TRUNPTkQiLCRbJC5OQU5PU0VDT05EPTNdPSJOQU5PU0VDT05EIn0pKGx8fChsPXt9KSl9KTt2YXIgczA7dmFyIE1LPU8oKCk9PnsoZnVuY3Rpb24oJCl7JFskLllFQVJfTU9OVEg9MF09IllFQVJfTU9OVEgiLCRbJC5EQVlfVElNRT0xXT0iREFZX1RJTUUiLCRbJC5NT05USF9EQVlfTkFOTz0yXT0iTU9OVEhfREFZX05BTk8ifSkoczB8fChzMD17fSkpfSk7dmFyIE1ZPTIsRFE9NCx1UT00LHQ9NDt2YXIgbjgsRzQsSzQsbzY7dmFyIExLPU8oKCk9PntuOD1uZXcgSW50MzJBcnJheSgyKSxHND1uZXcgRmxvYXQzMkFycmF5KG44LmJ1ZmZlciksSzQ9bmV3IEZsb2F0NjRBcnJheShuOC5idWZmZXIpLG82PW5ldyBVaW50MTZBcnJheShuZXcgVWludDhBcnJheShbMSwwXSkuYnVmZmVyKVswXT09PTF9KTt2YXIgTFk7dmFyIEFLPU8oKCk9PnsoZnVuY3Rpb24oJCl7JFskLlVURjhfQllURVM9MV09IlVURjhfQllURVMiLCRbJC5VVEYxNl9TVFJJTkc9Ml09IlVURjE2X1NUUklORyJ9KShMWXx8KExZPXt9KSl9KTtjbGFzcyBVWntjb25zdHJ1Y3RvcigkKXt0aGlzLmJ5dGVzXz0kLHRoaXMucG9zaXRpb25fPTAsdGhpcy50ZXh0X2RlY29kZXJfPW5ldyBUZXh0RGVjb2Rlcn1zdGF0aWMgYWxsb2NhdGUoJCl7cmV0dXJuIG5ldyBVWihuZXcgVWludDhBcnJheSgkKSl9Y2xlYXIoKXt0aGlzLnBvc2l0aW9uXz0wfWJ5dGVzKCl7cmV0dXJuIHRoaXMuYnl0ZXNffXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb25ffXNldFBvc2l0aW9uKCQpe3RoaXMucG9zaXRpb25fPSR9Y2FwYWNpdHkoKXtyZXR1cm4gdGhpcy5ieXRlc18ubGVuZ3RofXJlYWRJbnQ4KCQpe3JldHVybiB0aGlzLnJlYWRVaW50OCgkKTw8MjQ+PjI0fXJlYWRVaW50OCgkKXtyZXR1cm4gdGhpcy5ieXRlc19bJF19cmVhZEludDE2KCQpe3JldHVybiB0aGlzLnJlYWRVaW50MTYoJCk8PDE2Pj4xNn1yZWFkVWludDE2KCQpe3JldHVybiB0aGlzLmJ5dGVzX1skXXx0aGlzLmJ5dGVzX1skKzFdPDw4fXJlYWRJbnQzMigkKXtyZXR1cm4gdGhpcy5ieXRlc19bJF18dGhpcy5ieXRlc19bJCsxXTw8OHx0aGlzLmJ5dGVzX1skKzJdPDwxNnx0aGlzLmJ5dGVzX1skKzNdPDwyNH1yZWFkVWludDMyKCQpe3JldHVybiB0aGlzLnJlYWRJbnQzMigkKT4+PjB9cmVhZEludDY0KCQpe3JldHVybiBCaWdJbnQuYXNJbnROKDY0LEJpZ0ludCh0aGlzLnJlYWRVaW50MzIoJCkpKyhCaWdJbnQodGhpcy5yZWFkVWludDMyKCQrNCkpPDxCaWdJbnQoMzIpKSl9cmVhZFVpbnQ2NCgkKXtyZXR1cm4gQmlnSW50LmFzVWludE4oNjQsQmlnSW50KHRoaXMucmVhZFVpbnQzMigkKSkrKEJpZ0ludCh0aGlzLnJlYWRVaW50MzIoJCs0KSk8PEJpZ0ludCgzMikpKX1yZWFkRmxvYXQzMigkKXtyZXR1cm4gbjhbMF09dGhpcy5yZWFkSW50MzIoJCksRzRbMF19cmVhZEZsb2F0NjQoJCl7cmV0dXJuIG44W282PzA6MV09dGhpcy5yZWFkSW50MzIoJCksbjhbbzY/MTowXT10aGlzLnJlYWRJbnQzMigkKzQpLEs0WzBdfXdyaXRlSW50OCgkLFope3RoaXMuYnl0ZXNfWyRdPVp9d3JpdGVVaW50OCgkLFope3RoaXMuYnl0ZXNfWyRdPVp9d3JpdGVJbnQxNigkLFope3RoaXMuYnl0ZXNfWyRdPVosdGhpcy5ieXRlc19bJCsxXT1aPj44fXdyaXRlVWludDE2KCQsWil7dGhpcy5ieXRlc19bJF09Wix0aGlzLmJ5dGVzX1skKzFdPVo+Pjh9d3JpdGVJbnQzMigkLFope3RoaXMuYnl0ZXNfWyRdPVosdGhpcy5ieXRlc19bJCsxXT1aPj44LHRoaXMuYnl0ZXNfWyQrMl09Wj4+MTYsdGhpcy5ieXRlc19bJCszXT1aPj4yNH13cml0ZVVpbnQzMigkLFope3RoaXMuYnl0ZXNfWyRdPVosdGhpcy5ieXRlc19bJCsxXT1aPj44LHRoaXMuYnl0ZXNfWyQrMl09Wj4+MTYsdGhpcy5ieXRlc19bJCszXT1aPj4yNH13cml0ZUludDY0KCQsWil7dGhpcy53cml0ZUludDMyKCQsTnVtYmVyKEJpZ0ludC5hc0ludE4oMzIsWikpKSx0aGlzLndyaXRlSW50MzIoJCs0LE51bWJlcihCaWdJbnQuYXNJbnROKDMyLFo+PkJpZ0ludCgzMikpKSl9d3JpdGVVaW50NjQoJCxaKXt0aGlzLndyaXRlVWludDMyKCQsTnVtYmVyKEJpZ0ludC5hc1VpbnROKDMyLFopKSksdGhpcy53cml0ZVVpbnQzMigkKzQsTnVtYmVyKEJpZ0ludC5hc1VpbnROKDMyLFo+PkJpZ0ludCgzMikpKSl9d3JpdGVGbG9hdDMyKCQsWil7RzRbMF09Wix0aGlzLndyaXRlSW50MzIoJCxuOFswXSl9d3JpdGVGbG9hdDY0KCQsWil7SzRbMF09Wix0aGlzLndyaXRlSW50MzIoJCxuOFtvNj8wOjFdKSx0aGlzLndyaXRlSW50MzIoJCs0LG44W282PzE6MF0pfWdldEJ1ZmZlcklkZW50aWZpZXIoKXtpZih0aGlzLmJ5dGVzXy5sZW5ndGg8dGhpcy5wb3NpdGlvbl8rRFErdVEpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBCeXRlQnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluIGFuIGlkZW50aWZpZXIuIik7bGV0ICQ9IiI7Zm9yKGxldCBaPTA7Wjx1UTtaKyspJCs9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRJbnQ4KHRoaXMucG9zaXRpb25fK0RRK1opKTtyZXR1cm4gJH1fX29mZnNldCgkLFope2xldCBRPSQtdGhpcy5yZWFkSW50MzIoJCk7cmV0dXJuIFo8dGhpcy5yZWFkSW50MTYoUSk/dGhpcy5yZWFkSW50MTYoUStaKTowfV9fdW5pb24oJCxaKXtyZXR1cm4gJC5iYl9wb3M9Wit0aGlzLnJlYWRJbnQzMihaKSwkLmJiPXRoaXMsJH1fX3N0cmluZygkLFopeyQrPXRoaXMucmVhZEludDMyKCQpO2xldCBRPXRoaXMucmVhZEludDMyKCQpOyQrPURRO2xldCBYPXRoaXMuYnl0ZXNfLnN1YmFycmF5KCQsJCtRKTtpZihaPT09TFkuVVRGOF9CWVRFUylyZXR1cm4gWDtlbHNlIHJldHVybiB0aGlzLnRleHRfZGVjb2Rlcl8uZGVjb2RlKFgpfV9fdW5pb25fd2l0aF9zdHJpbmcoJCxaKXtpZih0eXBlb2YgJD09PSJzdHJpbmciKXJldHVybiB0aGlzLl9fc3RyaW5nKFopO3JldHVybiB0aGlzLl9fdW5pb24oJCxaKX1fX2luZGlyZWN0KCQpe3JldHVybiAkK3RoaXMucmVhZEludDMyKCQpfV9fdmVjdG9yKCQpe3JldHVybiAkK3RoaXMucmVhZEludDMyKCQpK0RRfV9fdmVjdG9yX2xlbigkKXtyZXR1cm4gdGhpcy5yZWFkSW50MzIoJCt0aGlzLnJlYWRJbnQzMigkKSl9X19oYXNfaWRlbnRpZmllcigkKXtpZigkLmxlbmd0aCE9dVEpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBmaWxlIGlkZW50aWZpZXIgbXVzdCBiZSBsZW5ndGggIit1USk7Zm9yKGxldCBaPTA7Wjx1UTtaKyspaWYoJC5jaGFyQ29kZUF0KFopIT10aGlzLnJlYWRJbnQ4KHRoaXMucG9zaXRpb24oKStEUStaKSlyZXR1cm4hMTtyZXR1cm4hMH1jcmVhdGVTY2FsYXJMaXN0KCQsWil7bGV0IFE9W107Zm9yKGxldCBYPTA7WDxaOysrWCl7bGV0IEo9JChYKTtpZihKIT09bnVsbClRLnB1c2goSil9cmV0dXJuIFF9Y3JlYXRlT2JqTGlzdCgkLFope2xldCBRPVtdO2ZvcihsZXQgWD0wO1g8WjsrK1gpe2xldCBKPSQoWCk7aWYoSiE9PW51bGwpUS5wdXNoKEoudW5wYWNrKCkpfXJldHVybiBRfX12YXIgREs9TygoKT0+e0FLKCk7TEsoKX0pO2NsYXNzIHNKe2NvbnN0cnVjdG9yKCQpe3RoaXMubWluYWxpZ249MSx0aGlzLnZ0YWJsZT1udWxsLHRoaXMudnRhYmxlX2luX3VzZT0wLHRoaXMuaXNOZXN0ZWQ9ITEsdGhpcy5vYmplY3Rfc3RhcnQ9MCx0aGlzLnZ0YWJsZXM9W10sdGhpcy52ZWN0b3JfbnVtX2VsZW1zPTAsdGhpcy5mb3JjZV9kZWZhdWx0cz0hMSx0aGlzLnN0cmluZ19tYXBzPW51bGwsdGhpcy50ZXh0X2VuY29kZXI9bmV3IFRleHRFbmNvZGVyO2xldCBaO2lmKCEkKVo9MTAyNDtlbHNlIFo9JDt0aGlzLmJiPVVaLmFsbG9jYXRlKFopLHRoaXMuc3BhY2U9Wn1jbGVhcigpe3RoaXMuYmIuY2xlYXIoKSx0aGlzLnNwYWNlPXRoaXMuYmIuY2FwYWNpdHkoKSx0aGlzLm1pbmFsaWduPTEsdGhpcy52dGFibGU9bnVsbCx0aGlzLnZ0YWJsZV9pbl91c2U9MCx0aGlzLmlzTmVzdGVkPSExLHRoaXMub2JqZWN0X3N0YXJ0PTAsdGhpcy52dGFibGVzPVtdLHRoaXMudmVjdG9yX251bV9lbGVtcz0wLHRoaXMuZm9yY2VfZGVmYXVsdHM9ITEsdGhpcy5zdHJpbmdfbWFwcz1udWxsfWZvcmNlRGVmYXVsdHMoJCl7dGhpcy5mb3JjZV9kZWZhdWx0cz0kfWRhdGFCdWZmZXIoKXtyZXR1cm4gdGhpcy5iYn1hc1VpbnQ4QXJyYXkoKXtyZXR1cm4gdGhpcy5iYi5ieXRlcygpLnN1YmFycmF5KHRoaXMuYmIucG9zaXRpb24oKSx0aGlzLmJiLnBvc2l0aW9uKCkrdGhpcy5vZmZzZXQoKSl9cHJlcCgkLFope2lmKCQ+dGhpcy5taW5hbGlnbil0aGlzLm1pbmFsaWduPSQ7bGV0IFE9fih0aGlzLmJiLmNhcGFjaXR5KCktdGhpcy5zcGFjZStaKSsxJiQtMTt3aGlsZSh0aGlzLnNwYWNlPFErJCtaKXtsZXQgWD10aGlzLmJiLmNhcGFjaXR5KCk7dGhpcy5iYj1zSi5ncm93Qnl0ZUJ1ZmZlcih0aGlzLmJiKSx0aGlzLnNwYWNlKz10aGlzLmJiLmNhcGFjaXR5KCktWH10aGlzLnBhZChRKX1wYWQoJCl7Zm9yKGxldCBaPTA7WjwkO1orKyl0aGlzLmJiLndyaXRlSW50OCgtLXRoaXMuc3BhY2UsMCl9d3JpdGVJbnQ4KCQpe3RoaXMuYmIud3JpdGVJbnQ4KHRoaXMuc3BhY2UtPTEsJCl9d3JpdGVJbnQxNigkKXt0aGlzLmJiLndyaXRlSW50MTYodGhpcy5zcGFjZS09MiwkKX13cml0ZUludDMyKCQpe3RoaXMuYmIud3JpdGVJbnQzMih0aGlzLnNwYWNlLT00LCQpfXdyaXRlSW50NjQoJCl7dGhpcy5iYi53cml0ZUludDY0KHRoaXMuc3BhY2UtPTgsJCl9d3JpdGVGbG9hdDMyKCQpe3RoaXMuYmIud3JpdGVGbG9hdDMyKHRoaXMuc3BhY2UtPTQsJCl9d3JpdGVGbG9hdDY0KCQpe3RoaXMuYmIud3JpdGVGbG9hdDY0KHRoaXMuc3BhY2UtPTgsJCl9YWRkSW50OCgkKXt0aGlzLnByZXAoMSwwKSx0aGlzLndyaXRlSW50OCgkKX1hZGRJbnQxNigkKXt0aGlzLnByZXAoMiwwKSx0aGlzLndyaXRlSW50MTYoJCl9YWRkSW50MzIoJCl7dGhpcy5wcmVwKDQsMCksdGhpcy53cml0ZUludDMyKCQpfWFkZEludDY0KCQpe3RoaXMucHJlcCg4LDApLHRoaXMud3JpdGVJbnQ2NCgkKX1hZGRGbG9hdDMyKCQpe3RoaXMucHJlcCg0LDApLHRoaXMud3JpdGVGbG9hdDMyKCQpfWFkZEZsb2F0NjQoJCl7dGhpcy5wcmVwKDgsMCksdGhpcy53cml0ZUZsb2F0NjQoJCl9YWRkRmllbGRJbnQ4KCQsWixRKXtpZih0aGlzLmZvcmNlX2RlZmF1bHRzfHxaIT1RKXRoaXMuYWRkSW50OChaKSx0aGlzLnNsb3QoJCl9YWRkRmllbGRJbnQxNigkLFosUSl7aWYodGhpcy5mb3JjZV9kZWZhdWx0c3x8WiE9USl0aGlzLmFkZEludDE2KFopLHRoaXMuc2xvdCgkKX1hZGRGaWVsZEludDMyKCQsWixRKXtpZih0aGlzLmZvcmNlX2RlZmF1bHRzfHxaIT1RKXRoaXMuYWRkSW50MzIoWiksdGhpcy5zbG90KCQpfWFkZEZpZWxkSW50NjQoJCxaLFEpe2lmKHRoaXMuZm9yY2VfZGVmYXVsdHN8fFohPT1RKXRoaXMuYWRkSW50NjQoWiksdGhpcy5zbG90KCQpfWFkZEZpZWxkRmxvYXQzMigkLFosUSl7aWYodGhpcy5mb3JjZV9kZWZhdWx0c3x8WiE9USl0aGlzLmFkZEZsb2F0MzIoWiksdGhpcy5zbG90KCQpfWFkZEZpZWxkRmxvYXQ2NCgkLFosUSl7aWYodGhpcy5mb3JjZV9kZWZhdWx0c3x8WiE9USl0aGlzLmFkZEZsb2F0NjQoWiksdGhpcy5zbG90KCQpfWFkZEZpZWxkT2Zmc2V0KCQsWixRKXtpZih0aGlzLmZvcmNlX2RlZmF1bHRzfHxaIT1RKXRoaXMuYWRkT2Zmc2V0KFopLHRoaXMuc2xvdCgkKX1hZGRGaWVsZFN0cnVjdCgkLFosUSl7aWYoWiE9USl0aGlzLm5lc3RlZChaKSx0aGlzLnNsb3QoJCl9bmVzdGVkKCQpe2lmKCQhPXRoaXMub2Zmc2V0KCkpdGhyb3cgVHlwZUVycm9yKCJGbGF0QnVmZmVyczogc3RydWN0IG11c3QgYmUgc2VyaWFsaXplZCBpbmxpbmUuIil9bm90TmVzdGVkKCl7aWYodGhpcy5pc05lc3RlZCl0aHJvdyBUeXBlRXJyb3IoIkZsYXRCdWZmZXJzOiBvYmplY3Qgc2VyaWFsaXphdGlvbiBtdXN0IG5vdCBiZSBuZXN0ZWQuIil9c2xvdCgkKXtpZih0aGlzLnZ0YWJsZSE9PW51bGwpdGhpcy52dGFibGVbJF09dGhpcy5vZmZzZXQoKX1vZmZzZXQoKXtyZXR1cm4gdGhpcy5iYi5jYXBhY2l0eSgpLXRoaXMuc3BhY2V9c3RhdGljIGdyb3dCeXRlQnVmZmVyKCQpe2xldCBaPSQuY2FwYWNpdHkoKTtpZihaJjMyMjEyMjU0NzIpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBjYW5ub3QgZ3JvdyBidWZmZXIgYmV5b25kIDIgZ2lnYWJ5dGVzLiIpO2xldCBRPVo8PDEsWD1VWi5hbGxvY2F0ZShRKTtyZXR1cm4gWC5zZXRQb3NpdGlvbihRLVopLFguYnl0ZXMoKS5zZXQoJC5ieXRlcygpLFEtWiksWH1hZGRPZmZzZXQoJCl7dGhpcy5wcmVwKERRLDApLHRoaXMud3JpdGVJbnQzMih0aGlzLm9mZnNldCgpLSQrRFEpfXN0YXJ0T2JqZWN0KCQpe2lmKHRoaXMubm90TmVzdGVkKCksdGhpcy52dGFibGU9PW51bGwpdGhpcy52dGFibGU9W107dGhpcy52dGFibGVfaW5fdXNlPSQ7Zm9yKGxldCBaPTA7WjwkO1orKyl0aGlzLnZ0YWJsZVtaXT0wO3RoaXMuaXNOZXN0ZWQ9ITAsdGhpcy5vYmplY3Rfc3RhcnQ9dGhpcy5vZmZzZXQoKX1lbmRPYmplY3QoKXtpZih0aGlzLnZ0YWJsZT09bnVsbHx8IXRoaXMuaXNOZXN0ZWQpdGhyb3cgRXJyb3IoIkZsYXRCdWZmZXJzOiBlbmRPYmplY3QgY2FsbGVkIHdpdGhvdXQgc3RhcnRPYmplY3QiKTt0aGlzLmFkZEludDMyKDApO2xldCAkPXRoaXMub2Zmc2V0KCksWj10aGlzLnZ0YWJsZV9pbl91c2UtMTtmb3IoO1o+PTAmJnRoaXMudnRhYmxlW1pdPT0wO1otLSk7bGV0IFE9WisxO2Zvcig7Wj49MDtaLS0pdGhpcy5hZGRJbnQxNih0aGlzLnZ0YWJsZVtaXSE9MD8kLXRoaXMudnRhYmxlW1pdOjApO2xldCBYPTI7dGhpcy5hZGRJbnQxNigkLXRoaXMub2JqZWN0X3N0YXJ0KTtsZXQgSj0oUStYKSpNWTt0aGlzLmFkZEludDE2KEopO2xldCBXPTAsWT10aGlzLnNwYWNlOyQ6Zm9yKFo9MDtaPHRoaXMudnRhYmxlcy5sZW5ndGg7WisrKXtsZXQgRz10aGlzLmJiLmNhcGFjaXR5KCktdGhpcy52dGFibGVzW1pdO2lmKEo9PXRoaXMuYmIucmVhZEludDE2KEcpKXtmb3IobGV0IEg9TVk7SDxKO0grPU1ZKWlmKHRoaXMuYmIucmVhZEludDE2KFkrSCkhPXRoaXMuYmIucmVhZEludDE2KEcrSCkpY29udGludWUgJDtXPXRoaXMudnRhYmxlc1taXTticmVha319aWYoVyl0aGlzLnNwYWNlPXRoaXMuYmIuY2FwYWNpdHkoKS0kLHRoaXMuYmIud3JpdGVJbnQzMih0aGlzLnNwYWNlLFctJCk7ZWxzZSB0aGlzLnZ0YWJsZXMucHVzaCh0aGlzLm9mZnNldCgpKSx0aGlzLmJiLndyaXRlSW50MzIodGhpcy5iYi5jYXBhY2l0eSgpLSQsdGhpcy5vZmZzZXQoKS0kKTtyZXR1cm4gdGhpcy5pc05lc3RlZD0hMSwkfWZpbmlzaCgkLFosUSl7bGV0IFg9UT90OjA7aWYoWil7bGV0IEo9WjtpZih0aGlzLnByZXAodGhpcy5taW5hbGlnbixEUSt1UStYKSxKLmxlbmd0aCE9dVEpdGhyb3cgVHlwZUVycm9yKCJGbGF0QnVmZmVyczogZmlsZSBpZGVudGlmaWVyIG11c3QgYmUgbGVuZ3RoICIrdVEpO2ZvcihsZXQgVz11US0xO1c+PTA7Vy0tKXRoaXMud3JpdGVJbnQ4KEouY2hhckNvZGVBdChXKSl9aWYodGhpcy5wcmVwKHRoaXMubWluYWxpZ24sRFErWCksdGhpcy5hZGRPZmZzZXQoJCksWCl0aGlzLmFkZEludDMyKHRoaXMuYmIuY2FwYWNpdHkoKS10aGlzLnNwYWNlKTt0aGlzLmJiLnNldFBvc2l0aW9uKHRoaXMuc3BhY2UpfWZpbmlzaFNpemVQcmVmaXhlZCgkLFope3RoaXMuZmluaXNoKCQsWiwhMCl9cmVxdWlyZWRGaWVsZCgkLFope2xldCBRPXRoaXMuYmIuY2FwYWNpdHkoKS0kLFg9US10aGlzLmJiLnJlYWRJbnQzMihRKTtpZighKFo8dGhpcy5iYi5yZWFkSW50MTYoWCkmJnRoaXMuYmIucmVhZEludDE2KFgrWikhPTApKXRocm93IFR5cGVFcnJvcigiRmxhdEJ1ZmZlcnM6IGZpZWxkICIrWisiIG11c3QgYmUgc2V0Iil9c3RhcnRWZWN0b3IoJCxaLFEpe3RoaXMubm90TmVzdGVkKCksdGhpcy52ZWN0b3JfbnVtX2VsZW1zPVosdGhpcy5wcmVwKERRLCQqWiksdGhpcy5wcmVwKFEsJCpaKX1lbmRWZWN0b3IoKXtyZXR1cm4gdGhpcy53cml0ZUludDMyKHRoaXMudmVjdG9yX251bV9lbGVtcyksdGhpcy5vZmZzZXQoKX1jcmVhdGVTaGFyZWRTdHJpbmcoJCl7aWYoISQpcmV0dXJuIDA7aWYoIXRoaXMuc3RyaW5nX21hcHMpdGhpcy5zdHJpbmdfbWFwcz1uZXcgTWFwO2lmKHRoaXMuc3RyaW5nX21hcHMuaGFzKCQpKXJldHVybiB0aGlzLnN0cmluZ19tYXBzLmdldCgkKTtsZXQgWj10aGlzLmNyZWF0ZVN0cmluZygkKTtyZXR1cm4gdGhpcy5zdHJpbmdfbWFwcy5zZXQoJCxaKSxafWNyZWF0ZVN0cmluZygkKXtpZigkPT09bnVsbHx8JD09PXZvaWQgMClyZXR1cm4gMDtsZXQgWjtpZigkIGluc3RhbmNlb2YgVWludDhBcnJheSlaPSQ7ZWxzZSBaPXRoaXMudGV4dF9lbmNvZGVyLmVuY29kZSgkKTtyZXR1cm4gdGhpcy5hZGRJbnQ4KDApLHRoaXMuc3RhcnRWZWN0b3IoMSxaLmxlbmd0aCwxKSx0aGlzLmJiLnNldFBvc2l0aW9uKHRoaXMuc3BhY2UtPVoubGVuZ3RoKSx0aGlzLmJiLmJ5dGVzKCkuc2V0KFosdGhpcy5zcGFjZSksdGhpcy5lbmRWZWN0b3IoKX1jcmVhdGVCeXRlVmVjdG9yKCQpe2lmKCQ9PT1udWxsfHwkPT09dm9pZCAwKXJldHVybiAwO3JldHVybiB0aGlzLnN0YXJ0VmVjdG9yKDEsJC5sZW5ndGgsMSksdGhpcy5iYi5zZXRQb3NpdGlvbih0aGlzLnNwYWNlLT0kLmxlbmd0aCksdGhpcy5iYi5ieXRlcygpLnNldCgkLHRoaXMuc3BhY2UpLHRoaXMuZW5kVmVjdG9yKCl9Y3JlYXRlT2JqZWN0T2Zmc2V0KCQpe2lmKCQ9PT1udWxsKXJldHVybiAwO2lmKHR5cGVvZiAkPT09InN0cmluZyIpcmV0dXJuIHRoaXMuY3JlYXRlU3RyaW5nKCQpO2Vsc2UgcmV0dXJuICQucGFjayh0aGlzKX1jcmVhdGVPYmplY3RPZmZzZXRMaXN0KCQpe2xldCBaPVtdO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7KytRKXtsZXQgWD0kW1FdO2lmKFghPT1udWxsKVoucHVzaCh0aGlzLmNyZWF0ZU9iamVjdE9mZnNldChYKSk7ZWxzZSB0aHJvdyBUeXBlRXJyb3IoIkZsYXRCdWZmZXJzOiBBcmd1bWVudCBmb3IgY3JlYXRlT2JqZWN0T2Zmc2V0TGlzdCBjYW5ub3QgY29udGFpbiBudWxsLiIpfXJldHVybiBafWNyZWF0ZVN0cnVjdE9mZnNldExpc3QoJCxaKXtyZXR1cm4gWih0aGlzLCQubGVuZ3RoKSx0aGlzLmNyZWF0ZU9iamVjdE9mZnNldExpc3QoJC5zbGljZSgpLnJldmVyc2UoKSksdGhpcy5lbmRWZWN0b3IoKX19dmFyIFM5PU8oKCk9PntESygpfSk7dmFyIHkwPU8oKCk9PntMSygpO1M5KCk7REsoKTtBSygpfSk7dmFyIGlKO3ZhciBPSz1PKCgpPT57KGZ1bmN0aW9uKCQpeyRbJC5CVUZGRVI9MF09IkJVRkZFUiJ9KShpSnx8KGlKPXt9KSl9KTt2YXIgZ1o7dmFyIEFZPU8oKCk9PnsoZnVuY3Rpb24oJCl7JFskLkxaNF9GUkFNRT0wXT0iTFo0X0ZSQU1FIiwkWyQuWlNURD0xXT0iWlNURCJ9KShnWnx8KGdaPXt9KSl9KTtjbGFzcyBzWntjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNCb2R5Q29tcHJlc3Npb24oJCxaKXtyZXR1cm4oWnx8bmV3IHNaKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0JvZHlDb21wcmVzc2lvbigkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IHNaKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9Y29kZWMoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDgodGhpcy5iYl9wb3MrJCk6Z1ouTFo0X0ZSQU1FfW1ldGhvZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50OCh0aGlzLmJiX3BvcyskKTppSi5CVUZGRVJ9c3RhdGljIHN0YXJ0Qm9keUNvbXByZXNzaW9uKCQpeyQuc3RhcnRPYmplY3QoMil9c3RhdGljIGFkZENvZGVjKCQsWil7JC5hZGRGaWVsZEludDgoMCxaLGdaLkxaNF9GUkFNRSl9c3RhdGljIGFkZE1ldGhvZCgkLFopeyQuYWRkRmllbGRJbnQ4KDEsWixpSi5CVUZGRVIpfXN0YXRpYyBlbmRCb2R5Q29tcHJlc3Npb24oJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUJvZHlDb21wcmVzc2lvbigkLFosUSl7cmV0dXJuIHNaLnN0YXJ0Qm9keUNvbXByZXNzaW9uKCQpLHNaLmFkZENvZGVjKCQsWiksc1ouYWRkTWV0aG9kKCQsUSksc1ouZW5kQm9keUNvbXByZXNzaW9uKCQpfX12YXIgQ0s9TygoKT0+e3kwKCk7T0soKTtBWSgpfSk7Y2xhc3MgRFl7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31vZmZzZXQoKXtyZXR1cm4gdGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MpfWxlbmd0aCgpe3JldHVybiB0aGlzLmJiLnJlYWRJbnQ2NCh0aGlzLmJiX3Bvcys4KX1zdGF0aWMgc2l6ZU9mKCl7cmV0dXJuIDE2fXN0YXRpYyBjcmVhdGVCdWZmZXIoJCxaLFEpe3JldHVybiAkLnByZXAoOCwxNiksJC53cml0ZUludDY0KEJpZ0ludChRIT09bnVsbCYmUSE9PXZvaWQgMD9ROjApKSwkLndyaXRlSW50NjQoQmlnSW50KFohPT1udWxsJiZaIT09dm9pZCAwP1o6MCkpLCQub2Zmc2V0KCl9fWNsYXNzIE9Ze2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9bGVuZ3RoKCl7cmV0dXJuIHRoaXMuYmIucmVhZEludDY0KHRoaXMuYmJfcG9zKX1udWxsQ291bnQoKXtyZXR1cm4gdGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MrOCl9c3RhdGljIHNpemVPZigpe3JldHVybiAxNn1zdGF0aWMgY3JlYXRlRmllbGROb2RlKCQsWixRKXtyZXR1cm4gJC5wcmVwKDgsMTYpLCQud3JpdGVJbnQ2NChCaWdJbnQoUSE9PW51bGwmJlEhPT12b2lkIDA/UTowKSksJC53cml0ZUludDY0KEJpZ0ludChaIT09bnVsbCYmWiE9PXZvaWQgMD9aOjApKSwkLm9mZnNldCgpfX1jbGFzcyBNWntjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNSZWNvcmRCYXRjaCgkLFope3JldHVybihafHxuZXcgTVopLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzUmVjb3JkQmF0Y2goJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyBNWikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfWxlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MrJCk6QmlnSW50KCIwIil9bm9kZXMoJCxaKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBRPyhafHxuZXcgT1kpLl9faW5pdCh0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1EpKyQqMTYsdGhpcy5iYik6bnVsbH1ub2Rlc0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1idWZmZXJzKCQsWil7bGV0IFE9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gUT8oWnx8bmV3IERZKS5fX2luaXQodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjE2LHRoaXMuYmIpOm51bGx9YnVmZmVyc0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsOCk7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1jb21wcmVzc2lvbigkKXtsZXQgWj10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEwKTtyZXR1cm4gWj8oJHx8bmV3IHNaKS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmJfcG9zK1opLHRoaXMuYmIpOm51bGx9dmFyaWFkaWNCdWZmZXJDb3VudHMoJCl7bGV0IFo9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMik7cmV0dXJuIFo/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytaKSskKjgpOkJpZ0ludCgwKX12YXJpYWRpY0J1ZmZlckNvdW50c0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTIpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9c3RhdGljIHN0YXJ0UmVjb3JkQmF0Y2goJCl7JC5zdGFydE9iamVjdCg1KX1zdGF0aWMgYWRkTGVuZ3RoKCQsWil7JC5hZGRGaWVsZEludDY0KDAsWixCaWdJbnQoIjAiKSl9c3RhdGljIGFkZE5vZGVzKCQsWil7JC5hZGRGaWVsZE9mZnNldCgxLFosMCl9c3RhdGljIHN0YXJ0Tm9kZXNWZWN0b3IoJCxaKXskLnN0YXJ0VmVjdG9yKDE2LFosOCl9c3RhdGljIGFkZEJ1ZmZlcnMoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDIsWiwwKX1zdGF0aWMgc3RhcnRCdWZmZXJzVmVjdG9yKCQsWil7JC5zdGFydFZlY3RvcigxNixaLDgpfXN0YXRpYyBhZGRDb21wcmVzc2lvbigkLFopeyQuYWRkRmllbGRPZmZzZXQoMyxaLDApfXN0YXRpYyBhZGRWYXJpYWRpY0J1ZmZlckNvdW50cygkLFopeyQuYWRkRmllbGRPZmZzZXQoNCxaLDApfXN0YXRpYyBjcmVhdGVWYXJpYWRpY0J1ZmZlckNvdW50c1ZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoOCxaLmxlbmd0aCw4KTtmb3IobGV0IFE9Wi5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZEludDY0KFpbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydFZhcmlhZGljQnVmZmVyQ291bnRzVmVjdG9yKCQsWil7JC5zdGFydFZlY3Rvcig4LFosOCl9c3RhdGljIGVuZFJlY29yZEJhdGNoKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfX12YXIgaks9TygoKT0+e3kwKCk7Q0soKX0pO2NsYXNzIG84e2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0RpY3Rpb25hcnlCYXRjaCgkLFope3JldHVybihafHxuZXcgbzgpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzRGljdGlvbmFyeUJhdGNoKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgbzgpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1pZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50NjQodGhpcy5iYl9wb3MrJCk6QmlnSW50KCIwIil9ZGF0YSgkKXtsZXQgWj10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBaPygkfHxuZXcgTVopLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYl9wb3MrWiksdGhpcy5iYik6bnVsbH1pc0RlbHRhKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gJD8hIXRoaXMuYmIucmVhZEludDgodGhpcy5iYl9wb3MrJCk6ITF9c3RhdGljIHN0YXJ0RGljdGlvbmFyeUJhdGNoKCQpeyQuc3RhcnRPYmplY3QoMyl9c3RhdGljIGFkZElkKCQsWil7JC5hZGRGaWVsZEludDY0KDAsWixCaWdJbnQoIjAiKSl9c3RhdGljIGFkZERhdGEoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDEsWiwwKX1zdGF0aWMgYWRkSXNEZWx0YSgkLFopeyQuYWRkRmllbGRJbnQ4KDIsK1osMCl9c3RhdGljIGVuZERpY3Rpb25hcnlCYXRjaCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX19dmFyIEI5PU8oKCk9Pnt5MCgpO2pLKCl9KTt2YXIgdFg7dmFyIFZLPU8oKCk9PnsoZnVuY3Rpb24oJCl7JFskLkxpdHRsZT0wXT0iTGl0dGxlIiwkWyQuQmlnPTFdPSJCaWcifSkodFh8fCh0WD17fSkpfSk7dmFyIENZO3ZhciBrOT1PKCgpPT57KGZ1bmN0aW9uKCQpeyRbJC5EZW5zZUFycmF5PTBdPSJEZW5zZUFycmF5In0pKENZfHwoQ1k9e30pKX0pO2NsYXNzIFJae2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0ludCgkLFope3JldHVybihafHxuZXcgUlopLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzSW50KCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgUlopLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1iaXRXaWR0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrJCk6MH1pc1NpZ25lZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/ISF0aGlzLmJiLnJlYWRJbnQ4KHRoaXMuYmJfcG9zKyQpOiExfXN0YXRpYyBzdGFydEludCgkKXskLnN0YXJ0T2JqZWN0KDIpfXN0YXRpYyBhZGRCaXRXaWR0aCgkLFopeyQuYWRkRmllbGRJbnQzMigwLFosMCl9c3RhdGljIGFkZElzU2lnbmVkKCQsWil7JC5hZGRGaWVsZEludDgoMSwrWiwwKX1zdGF0aWMgZW5kSW50KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVJbnQoJCxaLFEpe3JldHVybiBSWi5zdGFydEludCgkKSxSWi5hZGRCaXRXaWR0aCgkLFopLFJaLmFkZElzU2lnbmVkKCQsUSksUlouZW5kSW50KCQpfX12YXIgSDQ9TygoKT0+e3kwKCl9KTtjbGFzcyBMOHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNEaWN0aW9uYXJ5RW5jb2RpbmcoJCxaKXtyZXR1cm4oWnx8bmV3IEw4KS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0RpY3Rpb25hcnlFbmNvZGluZygkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IEw4KS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9aWQoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDY0KHRoaXMuYmJfcG9zKyQpOkJpZ0ludCgiMCIpfWluZGV4VHlwZSgkKXtsZXQgWj10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBaPygkfHxuZXcgUlopLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYl9wb3MrWiksdGhpcy5iYik6bnVsbH1pc09yZGVyZWQoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiAkPyEhdGhpcy5iYi5yZWFkSW50OCh0aGlzLmJiX3BvcyskKTohMX1kaWN0aW9uYXJ5S2luZCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTApO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOkNZLkRlbnNlQXJyYXl9c3RhdGljIHN0YXJ0RGljdGlvbmFyeUVuY29kaW5nKCQpeyQuc3RhcnRPYmplY3QoNCl9c3RhdGljIGFkZElkKCQsWil7JC5hZGRGaWVsZEludDY0KDAsWixCaWdJbnQoIjAiKSl9c3RhdGljIGFkZEluZGV4VHlwZSgkLFopeyQuYWRkRmllbGRPZmZzZXQoMSxaLDApfXN0YXRpYyBhZGRJc09yZGVyZWQoJCxaKXskLmFkZEZpZWxkSW50OCgyLCtaLDApfXN0YXRpYyBhZGREaWN0aW9uYXJ5S2luZCgkLFopeyQuYWRkRmllbGRJbnQxNigzLFosQ1kuRGVuc2VBcnJheSl9c3RhdGljIGVuZERpY3Rpb25hcnlFbmNvZGluZygkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX19dmFyIFJLPU8oKCk9Pnt5MCgpO2s5KCk7SDQoKX0pO2NsYXNzIEske2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0tleVZhbHVlKCQsWil7cmV0dXJuKFp8fG5ldyBLJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNLZXlWYWx1ZSgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IEskKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9a2V5KCQpe2xldCBaPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuIFo/dGhpcy5iYi5fX3N0cmluZyh0aGlzLmJiX3BvcytaLCQpOm51bGx9dmFsdWUoJCl7bGV0IFo9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gWj90aGlzLmJiLl9fc3RyaW5nKHRoaXMuYmJfcG9zK1osJCk6bnVsbH1zdGF0aWMgc3RhcnRLZXlWYWx1ZSgkKXskLnN0YXJ0T2JqZWN0KDIpfXN0YXRpYyBhZGRLZXkoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDAsWiwwKX1zdGF0aWMgYWRkVmFsdWUoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDEsWiwwKX1zdGF0aWMgZW5kS2V5VmFsdWUoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUtleVZhbHVlKCQsWixRKXtyZXR1cm4gSyQuc3RhcnRLZXlWYWx1ZSgkKSxLJC5hZGRLZXkoJCxaKSxLJC5hZGRWYWx1ZSgkLFEpLEskLmVuZEtleVZhbHVlKCQpfX12YXIgczY9TygoKT0+e3kwKCl9KTtjbGFzcyBlWHtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNCaW5hcnkoJCxaKXtyZXR1cm4oWnx8bmV3IGVYKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0JpbmFyeSgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IGVYKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0QmluYXJ5KCQpeyQuc3RhcnRPYmplY3QoMCl9c3RhdGljIGVuZEJpbmFyeSgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlQmluYXJ5KCQpe3JldHVybiBlWC5zdGFydEJpbmFyeSgkKSxlWC5lbmRCaW5hcnkoJCl9fXZhciBJOT1PKCgpPT57eTAoKX0pO2NsYXNzICRKe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0JpbmFyeVZpZXcoJCxaKXtyZXR1cm4oWnx8bmV3ICRKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0JpbmFyeVZpZXcoJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyAkSikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydEJpbmFyeVZpZXcoJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kQmluYXJ5VmlldygkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlQmluYXJ5VmlldygkKXtyZXR1cm4gJEouc3RhcnRCaW5hcnlWaWV3KCQpLCRKLmVuZEJpbmFyeVZpZXcoJCl9fXZhciBfOT1PKCgpPT57eTAoKX0pO2NsYXNzIFpKe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0Jvb2woJCxaKXtyZXR1cm4oWnx8bmV3IFpKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0Jvb2woJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyBaSikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydEJvb2woJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kQm9vbCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlQm9vbCgkKXtyZXR1cm4gWkouc3RhcnRCb29sKCQpLFpKLmVuZEJvb2woJCl9fXZhciBUOT1PKCgpPT57eTAoKX0pO2NsYXNzIHBRe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0RhdGUoJCxaKXtyZXR1cm4oWnx8bmV3IHBRKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0RhdGUoJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyBwUSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXVuaXQoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOnIwLk1JTExJU0VDT05EfXN0YXRpYyBzdGFydERhdGUoJCl7JC5zdGFydE9iamVjdCgxKX1zdGF0aWMgYWRkVW5pdCgkLFopeyQuYWRkRmllbGRJbnQxNigwLFoscjAuTUlMTElTRUNPTkQpfXN0YXRpYyBlbmREYXRlKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVEYXRlKCQsWil7cmV0dXJuIHBRLnN0YXJ0RGF0ZSgkKSxwUS5hZGRVbml0KCQsWikscFEuZW5kRGF0ZSgkKX19dmFyIEVLPU8oKCk9Pnt5MCgpO1VLKCl9KTtjbGFzcyBFWntjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNEZWNpbWFsKCQsWil7cmV0dXJuKFp8fG5ldyBFWikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNEZWNpbWFsKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgRVopLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1wcmVjaXNpb24oKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDMyKHRoaXMuYmJfcG9zKyQpOjB9c2NhbGUoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDMyKHRoaXMuYmJfcG9zKyQpOjB9Yml0V2lkdGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDMyKHRoaXMuYmJfcG9zKyQpOjEyOH1zdGF0aWMgc3RhcnREZWNpbWFsKCQpeyQuc3RhcnRPYmplY3QoMyl9c3RhdGljIGFkZFByZWNpc2lvbigkLFopeyQuYWRkRmllbGRJbnQzMigwLFosMCl9c3RhdGljIGFkZFNjYWxlKCQsWil7JC5hZGRGaWVsZEludDMyKDEsWiwwKX1zdGF0aWMgYWRkQml0V2lkdGgoJCxaKXskLmFkZEZpZWxkSW50MzIoMixaLDEyOCl9c3RhdGljIGVuZERlY2ltYWwoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZURlY2ltYWwoJCxaLFEsWCl7cmV0dXJuIEVaLnN0YXJ0RGVjaW1hbCgkKSxFWi5hZGRQcmVjaXNpb24oJCxaKSxFWi5hZGRTY2FsZSgkLFEpLEVaLmFkZEJpdFdpZHRoKCQsWCksRVouZW5kRGVjaW1hbCgkKX19dmFyIHdLPU8oKCk9Pnt5MCgpfSk7Y2xhc3MgY1F7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzRHVyYXRpb24oJCxaKXtyZXR1cm4oWnx8bmV3IGNRKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0R1cmF0aW9uKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgY1EpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX11bml0KCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQxNih0aGlzLmJiX3BvcyskKTpsLk1JTExJU0VDT05EfXN0YXRpYyBzdGFydER1cmF0aW9uKCQpeyQuc3RhcnRPYmplY3QoMSl9c3RhdGljIGFkZFVuaXQoJCxaKXskLmFkZEZpZWxkSW50MTYoMCxaLGwuTUlMTElTRUNPTkQpfXN0YXRpYyBlbmREdXJhdGlvbigkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlRHVyYXRpb24oJCxaKXtyZXR1cm4gY1Euc3RhcnREdXJhdGlvbigkKSxjUS5hZGRVbml0KCQsWiksY1EuZW5kRHVyYXRpb24oJCl9fXZhciBTSz1PKCgpPT57eTAoKTtVWSgpfSk7Y2xhc3MgbFF7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzRml4ZWRTaXplQmluYXJ5KCQsWil7cmV0dXJuKFp8fG5ldyBsUSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGaXhlZFNpemVCaW5hcnkoJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyBsUSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfWJ5dGVXaWR0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRGaXhlZFNpemVCaW5hcnkoJCl7JC5zdGFydE9iamVjdCgxKX1zdGF0aWMgYWRkQnl0ZVdpZHRoKCQsWil7JC5hZGRGaWVsZEludDMyKDAsWiwwKX1zdGF0aWMgZW5kRml4ZWRTaXplQmluYXJ5KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVGaXhlZFNpemVCaW5hcnkoJCxaKXtyZXR1cm4gbFEuc3RhcnRGaXhlZFNpemVCaW5hcnkoJCksbFEuYWRkQnl0ZVdpZHRoKCQsWiksbFEuZW5kRml4ZWRTaXplQmluYXJ5KCQpfX12YXIgQks9TygoKT0+e3kwKCl9KTtjbGFzcyBkUXtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNGaXhlZFNpemVMaXN0KCQsWil7cmV0dXJuKFp8fG5ldyBkUSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGaXhlZFNpemVMaXN0KCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgZFEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1saXN0U2l6ZSgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRGaXhlZFNpemVMaXN0KCQpeyQuc3RhcnRPYmplY3QoMSl9c3RhdGljIGFkZExpc3RTaXplKCQsWil7JC5hZGRGaWVsZEludDMyKDAsWiwwKX1zdGF0aWMgZW5kRml4ZWRTaXplTGlzdCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlRml4ZWRTaXplTGlzdCgkLFope3JldHVybiBkUS5zdGFydEZpeGVkU2l6ZUxpc3QoJCksZFEuYWRkTGlzdFNpemUoJCxaKSxkUS5lbmRGaXhlZFNpemVMaXN0KCQpfX12YXIga0s9TygoKT0+e3kwKCl9KTtjbGFzcyBuUXtjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNGbG9hdGluZ1BvaW50KCQsWil7cmV0dXJuKFp8fG5ldyBuUSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGbG9hdGluZ1BvaW50KCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgblEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1wcmVjaXNpb24oKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOkokLkhBTEZ9c3RhdGljIHN0YXJ0RmxvYXRpbmdQb2ludCgkKXskLnN0YXJ0T2JqZWN0KDEpfXN0YXRpYyBhZGRQcmVjaXNpb24oJCxaKXskLmFkZEZpZWxkSW50MTYoMCxaLEokLkhBTEYpfXN0YXRpYyBlbmRGbG9hdGluZ1BvaW50KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVGbG9hdGluZ1BvaW50KCQsWil7cmV0dXJuIG5RLnN0YXJ0RmxvYXRpbmdQb2ludCgkKSxuUS5hZGRQcmVjaXNpb24oJCxaKSxuUS5lbmRGbG9hdGluZ1BvaW50KCQpfX12YXIgSUs9TygoKT0+e3kwKCk7TksoKX0pO2NsYXNzIG9Re2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0ludGVydmFsKCQsWil7cmV0dXJuKFp8fG5ldyBvUSkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNJbnRlcnZhbCgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IG9RKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9dW5pdCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MTYodGhpcy5iYl9wb3MrJCk6czAuWUVBUl9NT05USH1zdGF0aWMgc3RhcnRJbnRlcnZhbCgkKXskLnN0YXJ0T2JqZWN0KDEpfXN0YXRpYyBhZGRVbml0KCQsWil7JC5hZGRGaWVsZEludDE2KDAsWixzMC5ZRUFSX01PTlRIKX1zdGF0aWMgZW5kSW50ZXJ2YWwoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUludGVydmFsKCQsWil7cmV0dXJuIG9RLnN0YXJ0SW50ZXJ2YWwoJCksb1EuYWRkVW5pdCgkLFopLG9RLmVuZEludGVydmFsKCQpfX12YXIgX0s9TygoKT0+e3kwKCk7TUsoKX0pO2NsYXNzIFFKe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0xhcmdlQmluYXJ5KCQsWil7cmV0dXJuKFp8fG5ldyBRSikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNMYXJnZUJpbmFyeSgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IFFKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0TGFyZ2VCaW5hcnkoJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kTGFyZ2VCaW5hcnkoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZUxhcmdlQmluYXJ5KCQpe3JldHVybiBRSi5zdGFydExhcmdlQmluYXJ5KCQpLFFKLmVuZExhcmdlQmluYXJ5KCQpfX12YXIgZzk9TygoKT0+e3kwKCl9KTtjbGFzcyBYSntjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNMYXJnZVV0ZjgoJCxaKXtyZXR1cm4oWnx8bmV3IFhKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0xhcmdlVXRmOCgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IFhKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0TGFyZ2VVdGY4KCQpeyQuc3RhcnRPYmplY3QoMCl9c3RhdGljIGVuZExhcmdlVXRmOCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlTGFyZ2VVdGY4KCQpe3JldHVybiBYSi5zdGFydExhcmdlVXRmOCgkKSxYSi5lbmRMYXJnZVV0ZjgoJCl9fXZhciB4OT1PKCgpPT57eTAoKX0pO2NsYXNzIEpKe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0xpc3QoJCxaKXtyZXR1cm4oWnx8bmV3IEpKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc0xpc3QoJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyBKSikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBzdGFydExpc3QoJCl7JC5zdGFydE9iamVjdCgwKX1zdGF0aWMgZW5kTGlzdCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlTGlzdCgkKXtyZXR1cm4gSkouc3RhcnRMaXN0KCQpLEpKLmVuZExpc3QoJCl9fXZhciB2OT1PKCgpPT57eTAoKX0pO2NsYXNzIHNRe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc01hcCgkLFope3JldHVybihafHxuZXcgc1EpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzTWFwKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgc1EpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1rZXlzU29ydGVkKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gJD8hIXRoaXMuYmIucmVhZEludDgodGhpcy5iYl9wb3MrJCk6ITF9c3RhdGljIHN0YXJ0TWFwKCQpeyQuc3RhcnRPYmplY3QoMSl9c3RhdGljIGFkZEtleXNTb3J0ZWQoJCxaKXskLmFkZEZpZWxkSW50OCgwLCtaLDApfXN0YXRpYyBlbmRNYXAoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZU1hcCgkLFope3JldHVybiBzUS5zdGFydE1hcCgkKSxzUS5hZGRLZXlzU29ydGVkKCQsWiksc1EuZW5kTWFwKCQpfX12YXIgVEs9TygoKT0+e3kwKCl9KTtjbGFzcyBXSntjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNOdWxsKCQsWil7cmV0dXJuKFp8fG5ldyBXSikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNOdWxsKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgV0opLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgc3RhcnROdWxsKCQpeyQuc3RhcnRPYmplY3QoMCl9c3RhdGljIGVuZE51bGwoJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZU51bGwoJCl7cmV0dXJuIFdKLnN0YXJ0TnVsbCgkKSxXSi5lbmROdWxsKCQpfX12YXIgeTk9TygoKT0+e3kwKCl9KTtjbGFzcyBZSntjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNTdHJ1Y3RfKCQsWil7cmV0dXJuKFp8fG5ldyBZSikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNTdHJ1Y3RfKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgWUopLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgc3RhcnRTdHJ1Y3RfKCQpeyQuc3RhcnRPYmplY3QoMCl9c3RhdGljIGVuZFN0cnVjdF8oJCl7cmV0dXJuICQuZW5kT2JqZWN0KCl9c3RhdGljIGNyZWF0ZVN0cnVjdF8oJCl7cmV0dXJuIFlKLnN0YXJ0U3RydWN0XygkKSxZSi5lbmRTdHJ1Y3RfKCQpfX12YXIgaDk9TygoKT0+e3kwKCl9KTtjbGFzcyBpWntjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfXN0YXRpYyBnZXRSb290QXNUaW1lKCQsWil7cmV0dXJuKFp8fG5ldyBpWikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNUaW1lKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgaVopLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX11bml0KCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQxNih0aGlzLmJiX3BvcyskKTpsLk1JTExJU0VDT05EfWJpdFdpZHRoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQzMih0aGlzLmJiX3BvcyskKTozMn1zdGF0aWMgc3RhcnRUaW1lKCQpeyQuc3RhcnRPYmplY3QoMil9c3RhdGljIGFkZFVuaXQoJCxaKXskLmFkZEZpZWxkSW50MTYoMCxaLGwuTUlMTElTRUNPTkQpfXN0YXRpYyBhZGRCaXRXaWR0aCgkLFopeyQuYWRkRmllbGRJbnQzMigxLFosMzIpfXN0YXRpYyBlbmRUaW1lKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVUaW1lKCQsWixRKXtyZXR1cm4gaVouc3RhcnRUaW1lKCQpLGlaLmFkZFVuaXQoJCxaKSxpWi5hZGRCaXRXaWR0aCgkLFEpLGlaLmVuZFRpbWUoJCl9fXZhciBnSz1PKCgpPT57eTAoKTtVWSgpfSk7Y2xhc3Mgclp7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzVGltZXN0YW1wKCQsWil7cmV0dXJuKFp8fG5ldyByWikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNUaW1lc3RhbXAoJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyByWikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXVuaXQoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOmwuU0VDT05EfXRpbWV6b25lKCQpe2xldCBaPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuIFo/dGhpcy5iYi5fX3N0cmluZyh0aGlzLmJiX3BvcytaLCQpOm51bGx9c3RhdGljIHN0YXJ0VGltZXN0YW1wKCQpeyQuc3RhcnRPYmplY3QoMil9c3RhdGljIGFkZFVuaXQoJCxaKXskLmFkZEZpZWxkSW50MTYoMCxaLGwuU0VDT05EKX1zdGF0aWMgYWRkVGltZXpvbmUoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDEsWiwwKX1zdGF0aWMgZW5kVGltZXN0YW1wKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVUaW1lc3RhbXAoJCxaLFEpe3JldHVybiByWi5zdGFydFRpbWVzdGFtcCgkKSxyWi5hZGRVbml0KCQsWiksclouYWRkVGltZXpvbmUoJCxRKSxyWi5lbmRUaW1lc3RhbXAoJCl9fXZhciB4Sz1PKCgpPT57eTAoKTtVWSgpfSk7Y2xhc3Mgd1p7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzVW5pb24oJCxaKXtyZXR1cm4oWnx8bmV3IHdaKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc1VuaW9uKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgd1opLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1tb2RlKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQxNih0aGlzLmJiX3BvcyskKTptMC5TcGFyc2V9dHlwZUlkcygkKXtsZXQgWj10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBaP3RoaXMuYmIucmVhZEludDMyKHRoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrWikrJCo0KTowfXR5cGVJZHNMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9dHlwZUlkc0FycmF5KCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gJD9uZXcgSW50MzJBcnJheSh0aGlzLmJiLmJ5dGVzKCkuYnVmZmVyLHRoaXMuYmIuYnl0ZXMoKS5ieXRlT2Zmc2V0K3RoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrJCksdGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCkpOm51bGx9c3RhdGljIHN0YXJ0VW5pb24oJCl7JC5zdGFydE9iamVjdCgyKX1zdGF0aWMgYWRkTW9kZSgkLFopeyQuYWRkRmllbGRJbnQxNigwLFosbTAuU3BhcnNlKX1zdGF0aWMgYWRkVHlwZUlkcygkLFopeyQuYWRkRmllbGRPZmZzZXQoMSxaLDApfXN0YXRpYyBjcmVhdGVUeXBlSWRzVmVjdG9yKCQsWil7JC5zdGFydFZlY3Rvcig0LFoubGVuZ3RoLDQpO2ZvcihsZXQgUT1aLmxlbmd0aC0xO1E+PTA7US0tKSQuYWRkSW50MzIoWltRXSk7cmV0dXJuICQuZW5kVmVjdG9yKCl9c3RhdGljIHN0YXJ0VHlwZUlkc1ZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLDQpfXN0YXRpYyBlbmRVbmlvbigkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlVW5pb24oJCxaLFEpe3JldHVybiB3Wi5zdGFydFVuaW9uKCQpLHdaLmFkZE1vZGUoJCxaKSx3Wi5hZGRUeXBlSWRzKCQsUSksd1ouZW5kVW5pb24oJCl9fXZhciB2Sz1PKCgpPT57eTAoKTtGSygpfSk7Y2xhc3MgR0p7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzVXRmOCgkLFope3JldHVybihafHxuZXcgR0opLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzVXRmOCgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IEdKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIHN0YXJ0VXRmOCgkKXskLnN0YXJ0T2JqZWN0KDApfXN0YXRpYyBlbmRVdGY4KCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBjcmVhdGVVdGY4KCQpe3JldHVybiBHSi5zdGFydFV0ZjgoJCksR0ouZW5kVXRmOCgkKX19dmFyIGI5PU8oKCk9Pnt5MCgpfSk7Y2xhc3MgS0p7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzVXRmOFZpZXcoJCxaKXtyZXR1cm4oWnx8bmV3IEtKKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9c3RhdGljIGdldFNpemVQcmVmaXhlZFJvb3RBc1V0ZjhWaWV3KCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgS0opLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgc3RhcnRVdGY4VmlldygkKXskLnN0YXJ0T2JqZWN0KDApfXN0YXRpYyBlbmRVdGY4VmlldygkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlVXRmOFZpZXcoJCl7cmV0dXJuIEtKLnN0YXJ0VXRmOFZpZXcoJCksS0ouZW5kVXRmOFZpZXcoJCl9fXZhciBtOT1PKCgpPT57eTAoKX0pO3ZhciBlMDt2YXIgeUs9TygoKT0+eyhmdW5jdGlvbigkKXskWyQuTk9ORT0wXT0iTk9ORSIsJFskLk51bGw9MV09Ik51bGwiLCRbJC5JbnQ9Ml09IkludCIsJFskLkZsb2F0aW5nUG9pbnQ9M109IkZsb2F0aW5nUG9pbnQiLCRbJC5CaW5hcnk9NF09IkJpbmFyeSIsJFskLlV0Zjg9NV09IlV0ZjgiLCRbJC5Cb29sPTZdPSJCb29sIiwkWyQuRGVjaW1hbD03XT0iRGVjaW1hbCIsJFskLkRhdGU9OF09IkRhdGUiLCRbJC5UaW1lPTldPSJUaW1lIiwkWyQuVGltZXN0YW1wPTEwXT0iVGltZXN0YW1wIiwkWyQuSW50ZXJ2YWw9MTFdPSJJbnRlcnZhbCIsJFskLkxpc3Q9MTJdPSJMaXN0IiwkWyQuU3RydWN0Xz0xM109IlN0cnVjdF8iLCRbJC5Vbmlvbj0xNF09IlVuaW9uIiwkWyQuRml4ZWRTaXplQmluYXJ5PTE1XT0iRml4ZWRTaXplQmluYXJ5IiwkWyQuRml4ZWRTaXplTGlzdD0xNl09IkZpeGVkU2l6ZUxpc3QiLCRbJC5NYXA9MTddPSJNYXAiLCRbJC5EdXJhdGlvbj0xOF09IkR1cmF0aW9uIiwkWyQuTGFyZ2VCaW5hcnk9MTldPSJMYXJnZUJpbmFyeSIsJFskLkxhcmdlVXRmOD0yMF09IkxhcmdlVXRmOCIsJFskLkxhcmdlTGlzdD0yMV09IkxhcmdlTGlzdCIsJFskLlJ1bkVuZEVuY29kZWQ9MjJdPSJSdW5FbmRFbmNvZGVkIiwkWyQuQmluYXJ5Vmlldz0yM109IkJpbmFyeVZpZXciLCRbJC5VdGY4Vmlldz0yNF09IlV0ZjhWaWV3IiwkWyQuTGlzdFZpZXc9MjVdPSJMaXN0VmlldyIsJFskLkxhcmdlTGlzdFZpZXc9MjZdPSJMYXJnZUxpc3RWaWV3In0pKGUwfHwoZTA9e30pKX0pO2NsYXNzIFdae2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0ZpZWxkKCQsWil7cmV0dXJuKFp8fG5ldyBXWikuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNGaWVsZCgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IFdaKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9bmFtZSgkKXtsZXQgWj10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiBaP3RoaXMuYmIuX19zdHJpbmcodGhpcy5iYl9wb3MrWiwkKTpudWxsfW51bGxhYmxlKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gJD8hIXRoaXMuYmIucmVhZEludDgodGhpcy5iYl9wb3MrJCk6ITF9dHlwZVR5cGUoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDgpO3JldHVybiAkP3RoaXMuYmIucmVhZFVpbnQ4KHRoaXMuYmJfcG9zKyQpOmUwLk5PTkV9dHlwZSgkKXtsZXQgWj10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEwKTtyZXR1cm4gWj90aGlzLmJiLl9fdW5pb24oJCx0aGlzLmJiX3BvcytaKTpudWxsfWRpY3Rpb25hcnkoJCl7bGV0IFo9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMik7cmV0dXJuIFo/KCR8fG5ldyBMOCkuX19pbml0KHRoaXMuYmIuX19pbmRpcmVjdCh0aGlzLmJiX3BvcytaKSx0aGlzLmJiKTpudWxsfWNoaWxkcmVuKCQsWil7bGV0IFE9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxNCk7cmV0dXJuIFE/KFp8fG5ldyBXWikuX19pbml0KHRoaXMuYmIuX19pbmRpcmVjdCh0aGlzLmJiLl9fdmVjdG9yKHRoaXMuYmJfcG9zK1EpKyQqNCksdGhpcy5iYik6bnVsbH1jaGlsZHJlbkxlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTQpO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9Y3VzdG9tTWV0YWRhdGEoJCxaKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDE2KTtyZXR1cm4gUT8oWnx8bmV3IEskKS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrUSkrJCo0KSx0aGlzLmJiKTpudWxsfWN1c3RvbU1ldGFkYXRhTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxNik7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRGaWVsZCgkKXskLnN0YXJ0T2JqZWN0KDcpfXN0YXRpYyBhZGROYW1lKCQsWil7JC5hZGRGaWVsZE9mZnNldCgwLFosMCl9c3RhdGljIGFkZE51bGxhYmxlKCQsWil7JC5hZGRGaWVsZEludDgoMSwrWiwwKX1zdGF0aWMgYWRkVHlwZVR5cGUoJCxaKXskLmFkZEZpZWxkSW50OCgyLFosZTAuTk9ORSl9c3RhdGljIGFkZFR5cGUoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDMsWiwwKX1zdGF0aWMgYWRkRGljdGlvbmFyeSgkLFopeyQuYWRkRmllbGRPZmZzZXQoNCxaLDApfXN0YXRpYyBhZGRDaGlsZHJlbigkLFopeyQuYWRkRmllbGRPZmZzZXQoNSxaLDApfXN0YXRpYyBjcmVhdGVDaGlsZHJlblZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLmxlbmd0aCw0KTtmb3IobGV0IFE9Wi5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZE9mZnNldChaW1FdKTtyZXR1cm4gJC5lbmRWZWN0b3IoKX1zdGF0aWMgc3RhcnRDaGlsZHJlblZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLDQpfXN0YXRpYyBhZGRDdXN0b21NZXRhZGF0YSgkLFopeyQuYWRkRmllbGRPZmZzZXQoNixaLDApfXN0YXRpYyBjcmVhdGVDdXN0b21NZXRhZGF0YVZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLmxlbmd0aCw0KTtmb3IobGV0IFE9Wi5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZE9mZnNldChaW1FdKTtyZXR1cm4gJC5lbmRWZWN0b3IoKX1zdGF0aWMgc3RhcnRDdXN0b21NZXRhZGF0YVZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLDQpfXN0YXRpYyBlbmRGaWVsZCgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX19dmFyIGhLPU8oKCk9Pnt5MCgpO1JLKCk7czYoKTt5SygpfSk7Y2xhc3MgXyR7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzU2NoZW1hKCQsWil7cmV0dXJuKFp8fG5ldyBfJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfXN0YXRpYyBnZXRTaXplUHJlZml4ZWRSb290QXNTY2hlbWEoJCxaKXtyZXR1cm4gJC5zZXRQb3NpdGlvbigkLnBvc2l0aW9uKCkrdCksKFp8fG5ldyBfJCkuX19pbml0KCQucmVhZEludDMyKCQucG9zaXRpb24oKSkrJC5wb3NpdGlvbigpLCQpfWVuZGlhbm5lc3MoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDQpO3JldHVybiAkP3RoaXMuYmIucmVhZEludDE2KHRoaXMuYmJfcG9zKyQpOnRYLkxpdHRsZX1maWVsZHMoJCxaKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDYpO3JldHVybiBRPyhafHxuZXcgV1opLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjQpLHRoaXMuYmIpOm51bGx9ZmllbGRzTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gJD90aGlzLmJiLl9fdmVjdG9yX2xlbih0aGlzLmJiX3BvcyskKTowfWN1c3RvbU1ldGFkYXRhKCQsWil7bGV0IFE9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gUT8oWnx8bmV3IEskKS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrUSkrJCo0KSx0aGlzLmJiKTpudWxsfWN1c3RvbU1ldGFkYXRhTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gJD90aGlzLmJiLl9fdmVjdG9yX2xlbih0aGlzLmJiX3BvcyskKTowfWZlYXR1cmVzKCQpe2xldCBaPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTApO3JldHVybiBaP3RoaXMuYmIucmVhZEludDY0KHRoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrWikrJCo4KTpCaWdJbnQoMCl9ZmVhdHVyZXNMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEwKTtyZXR1cm4gJD90aGlzLmJiLl9fdmVjdG9yX2xlbih0aGlzLmJiX3BvcyskKTowfXN0YXRpYyBzdGFydFNjaGVtYSgkKXskLnN0YXJ0T2JqZWN0KDQpfXN0YXRpYyBhZGRFbmRpYW5uZXNzKCQsWil7JC5hZGRGaWVsZEludDE2KDAsWix0WC5MaXR0bGUpfXN0YXRpYyBhZGRGaWVsZHMoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDEsWiwwKX1zdGF0aWMgY3JlYXRlRmllbGRzVmVjdG9yKCQsWil7JC5zdGFydFZlY3Rvcig0LFoubGVuZ3RoLDQpO2ZvcihsZXQgUT1aLmxlbmd0aC0xO1E+PTA7US0tKSQuYWRkT2Zmc2V0KFpbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydEZpZWxkc1ZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLDQpfXN0YXRpYyBhZGRDdXN0b21NZXRhZGF0YSgkLFopeyQuYWRkRmllbGRPZmZzZXQoMixaLDApfXN0YXRpYyBjcmVhdGVDdXN0b21NZXRhZGF0YVZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLmxlbmd0aCw0KTtmb3IobGV0IFE9Wi5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZE9mZnNldChaW1FdKTtyZXR1cm4gJC5lbmRWZWN0b3IoKX1zdGF0aWMgc3RhcnRDdXN0b21NZXRhZGF0YVZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLDQpfXN0YXRpYyBhZGRGZWF0dXJlcygkLFopeyQuYWRkRmllbGRPZmZzZXQoMyxaLDApfXN0YXRpYyBjcmVhdGVGZWF0dXJlc1ZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoOCxaLmxlbmd0aCw4KTtmb3IobGV0IFE9Wi5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZEludDY0KFpbUV0pO3JldHVybiAkLmVuZFZlY3RvcigpfXN0YXRpYyBzdGFydEZlYXR1cmVzVmVjdG9yKCQsWil7JC5zdGFydFZlY3Rvcig4LFosOCl9c3RhdGljIGVuZFNjaGVtYSgkKXtyZXR1cm4gJC5lbmRPYmplY3QoKX1zdGF0aWMgY3JlYXRlU2NoZW1hKCQsWixRLFgsSil7cmV0dXJuIF8kLnN0YXJ0U2NoZW1hKCQpLF8kLmFkZEVuZGlhbm5lc3MoJCxaKSxfJC5hZGRGaWVsZHMoJCxRKSxfJC5hZGRDdXN0b21NZXRhZGF0YSgkLFgpLF8kLmFkZEZlYXR1cmVzKCQsSiksXyQuZW5kU2NoZW1hKCQpfX12YXIgYks9TygoKT0+e3kwKCk7VksoKTtoSygpO3M2KCl9KTt2YXIgVDA7dmFyIG1LPU8oKCk9PnsoZnVuY3Rpb24oJCl7JFskLk5PTkU9MF09Ik5PTkUiLCRbJC5TY2hlbWE9MV09IlNjaGVtYSIsJFskLkRpY3Rpb25hcnlCYXRjaD0yXT0iRGljdGlvbmFyeUJhdGNoIiwkWyQuUmVjb3JkQmF0Y2g9M109IlJlY29yZEJhdGNoIiwkWyQuVGVuc29yPTRdPSJUZW5zb3IiLCRbJC5TcGFyc2VUZW5zb3I9NV09IlNwYXJzZVRlbnNvciJ9KShUMHx8KFQwPXt9KSl9KTt2YXIgQSxhWjt2YXIgdSQ9TygoKT0+e1k0KCk7RksoKTtOSygpO1VLKCk7VVkoKTtNSygpO21LKCk7KGZ1bmN0aW9uKCQpeyRbJC5OT05FPTBdPSJOT05FIiwkWyQuTnVsbD0xXT0iTnVsbCIsJFskLkludD0yXT0iSW50IiwkWyQuRmxvYXQ9M109IkZsb2F0IiwkWyQuQmluYXJ5PTRdPSJCaW5hcnkiLCRbJC5VdGY4PTVdPSJVdGY4IiwkWyQuQm9vbD02XT0iQm9vbCIsJFskLkRlY2ltYWw9N109IkRlY2ltYWwiLCRbJC5EYXRlPThdPSJEYXRlIiwkWyQuVGltZT05XT0iVGltZSIsJFskLlRpbWVzdGFtcD0xMF09IlRpbWVzdGFtcCIsJFskLkludGVydmFsPTExXT0iSW50ZXJ2YWwiLCRbJC5MaXN0PTEyXT0iTGlzdCIsJFskLlN0cnVjdD0xM109IlN0cnVjdCIsJFskLlVuaW9uPTE0XT0iVW5pb24iLCRbJC5GaXhlZFNpemVCaW5hcnk9MTVdPSJGaXhlZFNpemVCaW5hcnkiLCRbJC5GaXhlZFNpemVMaXN0PTE2XT0iRml4ZWRTaXplTGlzdCIsJFskLk1hcD0xN109Ik1hcCIsJFskLkR1cmF0aW9uPTE4XT0iRHVyYXRpb24iLCRbJC5MYXJnZUJpbmFyeT0xOV09IkxhcmdlQmluYXJ5IiwkWyQuTGFyZ2VVdGY4PTIwXT0iTGFyZ2VVdGY4IiwkWyQuQmluYXJ5Vmlldz0yM109IkJpbmFyeVZpZXciLCRbJC5VdGY4Vmlldz0yNF09IlV0ZjhWaWV3IiwkWyQuRGljdGlvbmFyeT0tMV09IkRpY3Rpb25hcnkiLCRbJC5JbnQ4PS0yXT0iSW50OCIsJFskLkludDE2PS0zXT0iSW50MTYiLCRbJC5JbnQzMj0tNF09IkludDMyIiwkWyQuSW50NjQ9LTVdPSJJbnQ2NCIsJFskLlVpbnQ4PS02XT0iVWludDgiLCRbJC5VaW50MTY9LTddPSJVaW50MTYiLCRbJC5VaW50MzI9LThdPSJVaW50MzIiLCRbJC5VaW50NjQ9LTldPSJVaW50NjQiLCRbJC5GbG9hdDE2PS0xMF09IkZsb2F0MTYiLCRbJC5GbG9hdDMyPS0xMV09IkZsb2F0MzIiLCRbJC5GbG9hdDY0PS0xMl09IkZsb2F0NjQiLCRbJC5EYXRlRGF5PS0xM109IkRhdGVEYXkiLCRbJC5EYXRlTWlsbGlzZWNvbmQ9LTE0XT0iRGF0ZU1pbGxpc2Vjb25kIiwkWyQuVGltZXN0YW1wU2Vjb25kPS0xNV09IlRpbWVzdGFtcFNlY29uZCIsJFskLlRpbWVzdGFtcE1pbGxpc2Vjb25kPS0xNl09IlRpbWVzdGFtcE1pbGxpc2Vjb25kIiwkWyQuVGltZXN0YW1wTWljcm9zZWNvbmQ9LTE3XT0iVGltZXN0YW1wTWljcm9zZWNvbmQiLCRbJC5UaW1lc3RhbXBOYW5vc2Vjb25kPS0xOF09IlRpbWVzdGFtcE5hbm9zZWNvbmQiLCRbJC5UaW1lU2Vjb25kPS0xOV09IlRpbWVTZWNvbmQiLCRbJC5UaW1lTWlsbGlzZWNvbmQ9LTIwXT0iVGltZU1pbGxpc2Vjb25kIiwkWyQuVGltZU1pY3Jvc2Vjb25kPS0yMV09IlRpbWVNaWNyb3NlY29uZCIsJFskLlRpbWVOYW5vc2Vjb25kPS0yMl09IlRpbWVOYW5vc2Vjb25kIiwkWyQuRGVuc2VVbmlvbj0tMjNdPSJEZW5zZVVuaW9uIiwkWyQuU3BhcnNlVW5pb249LTI0XT0iU3BhcnNlVW5pb24iLCRbJC5JbnRlcnZhbERheVRpbWU9LTI1XT0iSW50ZXJ2YWxEYXlUaW1lIiwkWyQuSW50ZXJ2YWxZZWFyTW9udGg9LTI2XT0iSW50ZXJ2YWxZZWFyTW9udGgiLCRbJC5EdXJhdGlvblNlY29uZD0tMjddPSJEdXJhdGlvblNlY29uZCIsJFskLkR1cmF0aW9uTWlsbGlzZWNvbmQ9LTI4XT0iRHVyYXRpb25NaWxsaXNlY29uZCIsJFskLkR1cmF0aW9uTWljcm9zZWNvbmQ9LTI5XT0iRHVyYXRpb25NaWNyb3NlY29uZCIsJFskLkR1cmF0aW9uTmFub3NlY29uZD0tMzBdPSJEdXJhdGlvbk5hbm9zZWNvbmQiLCRbJC5JbnRlcnZhbE1vbnRoRGF5TmFubz0tMzFdPSJJbnRlcnZhbE1vbnRoRGF5TmFubyJ9KShBfHwoQT17fSkpOyhmdW5jdGlvbigkKXskWyQuT0ZGU0VUPTBdPSJPRkZTRVQiLCRbJC5EQVRBPTFdPSJEQVRBIiwkWyQuVkFMSURJVFk9Ml09IlZBTElESVRZIiwkWyQuVFlQRT0zXT0iVFlQRSJ9KShhWnx8KGFaPXt9KSl9KTt2YXIgZks9e307UDgoZksse3ZhbHVlVG9TdHJpbmc6KCk9PkE4fSk7ZnVuY3Rpb24gQTgoJCl7aWYoJD09PW51bGwpcmV0dXJuIm51bGwiO2lmKCQ9PT12b2lkIDApcmV0dXJuInVuZGVmaW5lZCI7c3dpdGNoKHR5cGVvZiAkKXtjYXNlIm51bWJlciI6cmV0dXJuYCR7JH1gO2Nhc2UiYmlnaW50IjpyZXR1cm5gJHskfWA7Y2FzZSJzdHJpbmciOnJldHVybmAiJHskfSJgfWlmKHR5cGVvZiAkW1N5bWJvbC50b1ByaW1pdGl2ZV09PT0iZnVuY3Rpb24iKXJldHVybiAkW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpO2lmKEFycmF5QnVmZmVyLmlzVmlldygkKSl7aWYoJCBpbnN0YW5jZW9mIEJpZ0ludDY0QXJyYXl8fCQgaW5zdGFuY2VvZiBCaWdVaW50NjRBcnJheSlyZXR1cm5gWyR7Wy4uLiRdLm1hcCgoWik9PkE4KFopKX1dYDtyZXR1cm5gWyR7JH1dYH1yZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KCQpP2BbJHskfV1gOkpTT04uc3RyaW5naWZ5KCQsKFosUSk9PnR5cGVvZiBRPT09ImJpZ2ludCI/YCR7UX1gOlEpfWZ1bmN0aW9uIGMwKCQpe2lmKHR5cGVvZiAkPT09ImJpZ2ludCImJigkPE51bWJlci5NSU5fU0FGRV9JTlRFR0VSfHwkPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl0aHJvdyBUeXBlRXJyb3IoYCR7JH0gaXMgbm90IHNhZmUgdG8gY29udmVydCB0byBhIG51bWJlci5gKTtyZXR1cm4gTnVtYmVyKCQpfWZ1bmN0aW9uIHVLKCQsWil7cmV0dXJuIGMwKCQvWikrYzAoJCVaKS9jMChaKX12YXIgbEs9e307UDgobEsse2lzQXJyb3dCaWdOdW1TeW1ib2w6KCk9PmY5LGJpZ051bVRvU3RyaW5nOigpPT5hNixiaWdOdW1Ub051bWJlcjooKT0+Y0ssYmlnTnVtVG9CaWdJbnQ6KCk9PnU5LEJOOigpPT5WWX0pO2Z1bmN0aW9uIEQ4KCQsLi4uWil7aWYoWi5sZW5ndGg9PT0wKXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoUzAodGhpcy5UeXBlZEFycmF5LCQpLHRoaXMuY29uc3RydWN0b3IucHJvdG90eXBlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ldyB0aGlzLlR5cGVkQXJyYXkoJCwuLi5aKSx0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZSl9ZnVuY3Rpb24gaTYoLi4uJCl7cmV0dXJuIEQ4LmFwcGx5KHRoaXMsJCl9ZnVuY3Rpb24gcjYoLi4uJCl7cmV0dXJuIEQ4LmFwcGx5KHRoaXMsJCl9ZnVuY3Rpb24galkoLi4uJCl7cmV0dXJuIEQ4LmFwcGx5KHRoaXMsJCl9ZnVuY3Rpb24gY0soJCxaKXtsZXR7YnVmZmVyOlEsYnl0ZU9mZnNldDpYLGJ5dGVMZW5ndGg6SixzaWduZWQ6V309JCxZPW5ldyBCaWdVaW50NjRBcnJheShRLFgsSi84KSxHPVcmJlkuYXQoLTEpJkJpZ0ludCgxKTw8QmlnSW50KDYzKSxIPUJpZ0ludCgwKSx6PTA7aWYoRyl7Zm9yKGxldCBxIG9mIFkpSHw9KHFeckQpKihCaWdJbnQoMSk8PEJpZ0ludCg2NCp6KyspKTtIKj1CaWdJbnQoLTEpLEgtPUJpZ0ludCgxKX1lbHNlIGZvcihsZXQgcSBvZiBZKUh8PXEqKEJpZ0ludCgxKTw8QmlnSW50KDY0KnorKykpO2lmKHR5cGVvZiBaPT09Im51bWJlciImJlo+MCl7bGV0IHE9QmlnSW50KCIxIi5wYWRFbmQoWisxLCIwIikpLFA9SC9xLFU9Rz8tKEglcSk6SCVxLE09YzAoUCksTD1gJHtVfWAucGFkU3RhcnQoWiwiMCIpO3JldHVybitgJHtHJiZNPT09MD8iLSI6IiJ9JHtNfS4ke0x9YH1yZXR1cm4gYzAoSCl9ZnVuY3Rpb24gYTYoJCl7aWYoJC5ieXRlTGVuZ3RoPT09OClyZXR1cm5gJHtuZXcgJC5CaWdJbnRBcnJheSgkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsMSlbMF19YDtpZighJC5zaWduZWQpcmV0dXJuIHBLKCQpO2xldCBaPW5ldyBVaW50MTZBcnJheSgkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsJC5ieXRlTGVuZ3RoLzIpO2lmKG5ldyBJbnQxNkFycmF5KFtaLmF0KC0xKV0pWzBdPj0wKXJldHVybiBwSygkKTtaPVouc2xpY2UoKTtsZXQgWD0xO2ZvcihsZXQgVz0wO1c8Wi5sZW5ndGg7VysrKXtsZXQgWT1aW1ddLEc9flkrWDtaW1ddPUcsWCY9WT09PTA/MTowfXJldHVybmAtJHtwSyhaKX1gfWZ1bmN0aW9uIHU5KCQpe2lmKCQuYnl0ZUxlbmd0aD09PTgpcmV0dXJuIG5ldyAkLkJpZ0ludEFycmF5KCQuYnVmZmVyLCQuYnl0ZU9mZnNldCwxKVswXTtlbHNlIHJldHVybiBhNigkKX1mdW5jdGlvbiBwSygkKXtsZXQgWj0iIixRPW5ldyBVaW50MzJBcnJheSgyKSxYPW5ldyBVaW50MTZBcnJheSgkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsJC5ieXRlTGVuZ3RoLzIpLEo9bmV3IFVpbnQzMkFycmF5KChYPW5ldyBVaW50MTZBcnJheShYKS5yZXZlcnNlKCkpLmJ1ZmZlciksVz0tMSxZPVgubGVuZ3RoLTE7ZG97Zm9yKFFbMF09WFtXPTBdO1c8WTspWFtXKytdPVFbMV09UVswXS8xMCxRWzBdPShRWzBdLVFbMV0qMTA8PDE2KStYW1ddO1hbV109UVsxXT1RWzBdLzEwLFFbMF09UVswXS1RWzFdKjEwLFo9YCR7UVswXX0ke1p9YH13aGlsZShKWzBdfHxKWzFdfHxKWzJdfHxKWzNdKTtyZXR1cm4gWiE9PW51bGwmJlohPT12b2lkIDA/WjoiMCJ9Y2xhc3MgVll7c3RhdGljIG5ldygkLFope3N3aXRjaChaKXtjYXNlITA6cmV0dXJuIG5ldyBpNigkKTtjYXNlITE6cmV0dXJuIG5ldyByNigkKX1zd2l0Y2goJC5jb25zdHJ1Y3Rvcil7Y2FzZSBJbnQ4QXJyYXk6Y2FzZSBJbnQxNkFycmF5OmNhc2UgSW50MzJBcnJheTpjYXNlIEJpZ0ludDY0QXJyYXk6cmV0dXJuIG5ldyBpNigkKX1pZigkLmJ5dGVMZW5ndGg9PT0xNilyZXR1cm4gbmV3IGpZKCQpO3JldHVybiBuZXcgcjYoJCl9c3RhdGljIHNpZ25lZCgkKXtyZXR1cm4gbmV3IGk2KCQpfXN0YXRpYyB1bnNpZ25lZCgkKXtyZXR1cm4gbmV3IHI2KCQpfXN0YXRpYyBkZWNpbWFsKCQpe3JldHVybiBuZXcgalkoJCl9Y29uc3RydWN0b3IoJCxaKXtyZXR1cm4gVlkubmV3KCQsWil9fXZhciBmOSxpRCxyRDt2YXIgZEs9TygoKT0+e3MkKCk7Zjk9U3ltYm9sLmZvcigiaXNBcnJvd0JpZ051bSIpO0Q4LnByb3RvdHlwZVtmOV09ITA7RDgucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybmAiJHthNih0aGlzKX0iYH07RDgucHJvdG90eXBlLnZhbHVlT2Y9ZnVuY3Rpb24oJCl7cmV0dXJuIGNLKHRoaXMsJCl9O0Q4LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBhNih0aGlzKX07RDgucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV09ZnVuY3Rpb24oJD0iZGVmYXVsdCIpe3N3aXRjaCgkKXtjYXNlIm51bWJlciI6cmV0dXJuIGNLKHRoaXMpO2Nhc2Uic3RyaW5nIjpyZXR1cm4gYTYodGhpcyk7Y2FzZSJkZWZhdWx0IjpyZXR1cm4gdTkodGhpcyl9cmV0dXJuIGE2KHRoaXMpfTtPYmplY3Quc2V0UHJvdG90eXBlT2YoaTYucHJvdG90eXBlLE9iamVjdC5jcmVhdGUoSW50MzJBcnJheS5wcm90b3R5cGUpKTtPYmplY3Quc2V0UHJvdG90eXBlT2YocjYucHJvdG90eXBlLE9iamVjdC5jcmVhdGUoVWludDMyQXJyYXkucHJvdG90eXBlKSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKGpZLnByb3RvdHlwZSxPYmplY3QuY3JlYXRlKFVpbnQzMkFycmF5LnByb3RvdHlwZSkpO09iamVjdC5hc3NpZ24oaTYucHJvdG90eXBlLEQ4LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6aTYsc2lnbmVkOiEwLFR5cGVkQXJyYXk6SW50MzJBcnJheSxCaWdJbnRBcnJheTpCaWdJbnQ2NEFycmF5fSk7T2JqZWN0LmFzc2lnbihyNi5wcm90b3R5cGUsRDgucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpyNixzaWduZWQ6ITEsVHlwZWRBcnJheTpVaW50MzJBcnJheSxCaWdJbnRBcnJheTpCaWdVaW50NjRBcnJheX0pO09iamVjdC5hc3NpZ24oalkucHJvdG90eXBlLEQ4LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6alksc2lnbmVkOiEwLFR5cGVkQXJyYXk6VWludDMyQXJyYXksQmlnSW50QXJyYXk6QmlnVWludDY0QXJyYXl9KTtpRD1CaWdJbnQoNDI5NDk2NzI5NikqQmlnSW50KDQyOTQ5NjcyOTYpLHJEPWlELUJpZ0ludCgxKX0pO2NsYXNzIGt7c3RhdGljIGlzRGF0YVR5cGUoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokW1BxXSk9PT0hMH1zdGF0aWMgaXNOdWxsKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5OdWxsfXN0YXRpYyBpc0ludCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUEuSW50fXN0YXRpYyBpc0Zsb2F0KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5GbG9hdH1zdGF0aWMgaXNCaW5hcnkoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1BLkJpbmFyeX1zdGF0aWMgaXNCaW5hcnlWaWV3KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5CaW5hcnlWaWV3fXN0YXRpYyBpc0xhcmdlQmluYXJ5KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5MYXJnZUJpbmFyeX1zdGF0aWMgaXNVdGY4KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5VdGY4fXN0YXRpYyBpc1V0ZjhWaWV3KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5VdGY4Vmlld31zdGF0aWMgaXNMYXJnZVV0ZjgoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1BLkxhcmdlVXRmOH1zdGF0aWMgaXNCb29sKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5Cb29sfXN0YXRpYyBpc0RlY2ltYWwoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1BLkRlY2ltYWx9c3RhdGljIGlzRGF0ZSgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUEuRGF0ZX1zdGF0aWMgaXNUaW1lKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5UaW1lfXN0YXRpYyBpc1RpbWVzdGFtcCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUEuVGltZXN0YW1wfXN0YXRpYyBpc0ludGVydmFsKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5JbnRlcnZhbH1zdGF0aWMgaXNEdXJhdGlvbigkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUEuRHVyYXRpb259c3RhdGljIGlzTGlzdCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUEuTGlzdH1zdGF0aWMgaXNTdHJ1Y3QoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1BLlN0cnVjdH1zdGF0aWMgaXNVbmlvbigkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUEuVW5pb259c3RhdGljIGlzRml4ZWRTaXplQmluYXJ5KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5GaXhlZFNpemVCaW5hcnl9c3RhdGljIGlzRml4ZWRTaXplTGlzdCgkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZUlkKT09PUEuRml4ZWRTaXplTGlzdH1zdGF0aWMgaXNNYXAoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLnR5cGVJZCk9PT1BLk1hcH1zdGF0aWMgaXNEaWN0aW9uYXJ5KCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlSWQpPT09QS5EaWN0aW9uYXJ5fXN0YXRpYyBpc0RlbnNlVW5pb24oJCl7cmV0dXJuIGsuaXNVbmlvbigkKSYmJC5tb2RlPT09bTAuRGVuc2V9c3RhdGljIGlzU3BhcnNlVW5pb24oJCl7cmV0dXJuIGsuaXNVbmlvbigkKSYmJC5tb2RlPT09bTAuU3BhcnNlfWNvbnN0cnVjdG9yKCQpe3RoaXMudHlwZUlkPSR9fWZ1bmN0aW9uIFJRKCQpe2xldCBaPSQ7c3dpdGNoKCQudHlwZUlkKXtjYXNlIEEuRGVjaW1hbDpyZXR1cm4gJC5iaXRXaWR0aC8zMjtjYXNlIEEuSW50ZXJ2YWw6e2lmKFoudW5pdD09PXMwLk1PTlRIX0RBWV9OQU5PKXJldHVybiA0O3JldHVybiAxK1oudW5pdH1jYXNlIEEuQmluYXJ5VmlldzpjYXNlIEEuVXRmOFZpZXc6cmV0dXJuIDE2O2Nhc2UgQS5GaXhlZFNpemVMaXN0OnJldHVybiBaLmxpc3RTaXplO2Nhc2UgQS5GaXhlZFNpemVCaW5hcnk6cmV0dXJuIFouYnl0ZVdpZHRoO2RlZmF1bHQ6cmV0dXJuIDF9fXZhciBwOSxjOSxsOSxkOSxuOSxvOSxzOSxpOSxyOSxhOSx0OSxlOSwkcSxacSxRcSxYcSxKcSxXcSxZcSxHcSxLcSxIcSx6cSxxcSxQcSxqJCxpJCxzOCxpOCxHWixBWixyOCxhOCx0OCxWUSxpUSx0NixlOCwkUSx4WixSMCxyUSxUJCxPUSxhUSxWJCx0USxPOCxDOCx0WixSWSxqOCxWOCxMWixqMCxDUSxFWSxISixlUSxqUSxlWixhRCxZWjt2YXIgSCQ9TygoKT0+e3UkKCk7UHE9U3ltYm9sLmZvcigiYXBhY2hlLWFycm93L0RhdGFUeXBlIik7cDk9U3ltYm9sLnRvU3RyaW5nVGFnO2tbcDldPSgoJCk9PntyZXR1cm4gJC5jaGlsZHJlbj1udWxsLCQuQXJyYXlUeXBlPUFycmF5LCQuT2Zmc2V0QXJyYXlUeXBlPUludDMyQXJyYXksJFtQcV09ITAsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJEYXRhVHlwZSJ9KShrLnByb3RvdHlwZSk7aiQ9Y2xhc3MgaiQgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCl7c3VwZXIoQS5OdWxsKX10b1N0cmluZygpe3JldHVybiJOdWxsIn19O2M5PVN5bWJvbC50b1N0cmluZ1RhZztqJFtjOV09KCgkKT0+JFtTeW1ib2wudG9TdHJpbmdUYWddPSJOdWxsIikoaiQucHJvdG90eXBlKTtpJD1jbGFzcyBpJCBleHRlbmRzIGt7Y29uc3RydWN0b3IoJCxaKXtzdXBlcihBLkludCk7dGhpcy5pc1NpZ25lZD0kLHRoaXMuYml0V2lkdGg9Wn1nZXQgQXJyYXlUeXBlKCl7c3dpdGNoKHRoaXMuYml0V2lkdGgpe2Nhc2UgODpyZXR1cm4gdGhpcy5pc1NpZ25lZD9JbnQ4QXJyYXk6VWludDhBcnJheTtjYXNlIDE2OnJldHVybiB0aGlzLmlzU2lnbmVkP0ludDE2QXJyYXk6VWludDE2QXJyYXk7Y2FzZSAzMjpyZXR1cm4gdGhpcy5pc1NpZ25lZD9JbnQzMkFycmF5OlVpbnQzMkFycmF5O2Nhc2UgNjQ6cmV0dXJuIHRoaXMuaXNTaWduZWQ/QmlnSW50NjRBcnJheTpCaWdVaW50NjRBcnJheX10aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkICR7dGhpc1tTeW1ib2wudG9TdHJpbmdUYWddfSB0eXBlYCl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLmlzU2lnbmVkPyJJIjoiVWkifW50JHt0aGlzLmJpdFdpZHRofWB9fTtsOT1TeW1ib2wudG9TdHJpbmdUYWc7aSRbbDldPSgoJCk9PntyZXR1cm4gJC5pc1NpZ25lZD1udWxsLCQuYml0V2lkdGg9bnVsbCwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkludCJ9KShpJC5wcm90b3R5cGUpO3M4PWNsYXNzIHM4IGV4dGVuZHMgaSR7Y29uc3RydWN0b3IoKXtzdXBlcighMCw4KX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIEludDhBcnJheX19O2k4PWNsYXNzIGk4IGV4dGVuZHMgaSR7Y29uc3RydWN0b3IoKXtzdXBlcighMCwxNil9Z2V0IEFycmF5VHlwZSgpe3JldHVybiBJbnQxNkFycmF5fX07R1o9Y2xhc3MgR1ogZXh0ZW5kcyBpJHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCEwLDMyKX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIEludDMyQXJyYXl9fTtBWj1jbGFzcyBBWiBleHRlbmRzIGkke2NvbnN0cnVjdG9yKCl7c3VwZXIoITAsNjQpfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gQmlnSW50NjRBcnJheX19O3I4PWNsYXNzIHI4IGV4dGVuZHMgaSR7Y29uc3RydWN0b3IoKXtzdXBlcighMSw4KX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIFVpbnQ4QXJyYXl9fTthOD1jbGFzcyBhOCBleHRlbmRzIGkke2NvbnN0cnVjdG9yKCl7c3VwZXIoITEsMTYpfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gVWludDE2QXJyYXl9fTt0OD1jbGFzcyB0OCBleHRlbmRzIGkke2NvbnN0cnVjdG9yKCl7c3VwZXIoITEsMzIpfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gVWludDMyQXJyYXl9fTtWUT1jbGFzcyBWUSBleHRlbmRzIGkke2NvbnN0cnVjdG9yKCl7c3VwZXIoITEsNjQpfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gQmlnVWludDY0QXJyYXl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoczgucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpJbnQ4QXJyYXl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTgucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpJbnQxNkFycmF5fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEdaLnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6SW50MzJBcnJheX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBWi5wcm90b3R5cGUsIkFycmF5VHlwZSIse3ZhbHVlOkJpZ0ludDY0QXJyYXl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocjgucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpVaW50OEFycmF5fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE4LnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6VWludDE2QXJyYXl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodDgucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpVaW50MzJBcnJheX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShWUS5wcm90b3R5cGUsIkFycmF5VHlwZSIse3ZhbHVlOkJpZ1VpbnQ2NEFycmF5fSk7aVE9Y2xhc3MgaVEgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCQpe3N1cGVyKEEuRmxvYXQpO3RoaXMucHJlY2lzaW9uPSR9Z2V0IEFycmF5VHlwZSgpe3N3aXRjaCh0aGlzLnByZWNpc2lvbil7Y2FzZSBKJC5IQUxGOnJldHVybiBVaW50MTZBcnJheTtjYXNlIEokLlNJTkdMRTpyZXR1cm4gRmxvYXQzMkFycmF5O2Nhc2UgSiQuRE9VQkxFOnJldHVybiBGbG9hdDY0QXJyYXl9dGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCAke3RoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXX0gdHlwZWApfXRvU3RyaW5nKCl7cmV0dXJuYEZsb2F0JHt0aGlzLnByZWNpc2lvbjw8NXx8MTZ9YH19O2Q5PVN5bWJvbC50b1N0cmluZ1RhZztpUVtkOV09KCgkKT0+e3JldHVybiAkLnByZWNpc2lvbj1udWxsLCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iRmxvYXQifSkoaVEucHJvdG90eXBlKTt0Nj1jbGFzcyB0NiBleHRlbmRzIGlRe2NvbnN0cnVjdG9yKCl7c3VwZXIoSiQuSEFMRil9fTtlOD1jbGFzcyBlOCBleHRlbmRzIGlRe2NvbnN0cnVjdG9yKCl7c3VwZXIoSiQuU0lOR0xFKX19OyRRPWNsYXNzICRRIGV4dGVuZHMgaVF7Y29uc3RydWN0b3IoKXtzdXBlcihKJC5ET1VCTEUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQ2LnByb3RvdHlwZSwiQXJyYXlUeXBlIix7dmFsdWU6VWludDE2QXJyYXl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZTgucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpGbG9hdDMyQXJyYXl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFEucHJvdG90eXBlLCJBcnJheVR5cGUiLHt2YWx1ZTpGbG9hdDY0QXJyYXl9KTt4Wj1jbGFzcyB4WiBleHRlbmRzIGt7Y29uc3RydWN0b3IoKXtzdXBlcihBLkJpbmFyeSl9dG9TdHJpbmcoKXtyZXR1cm4iQmluYXJ5In19O245PVN5bWJvbC50b1N0cmluZ1RhZzt4WltuOV09KCgkKT0+e3JldHVybiAkLkFycmF5VHlwZT1VaW50OEFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iQmluYXJ5In0pKHhaLnByb3RvdHlwZSk7UjA9Y2xhc3MgUjAgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCl7c3VwZXIoQS5CaW5hcnlWaWV3KX10b1N0cmluZygpe3JldHVybiJCaW5hcnlWaWV3In19O285PVN5bWJvbC50b1N0cmluZ1RhZztSMC5FTEVNRU5UX1dJRFRIPTE2O1IwLklOTElORV9DQVBBQ0lUWT0xMjtSMC5MRU5HVEhfT0ZGU0VUPTA7UjAuSU5MSU5FX09GRlNFVD00O1IwLkJVRkZFUl9JTkRFWF9PRkZTRVQ9ODtSMC5CVUZGRVJfT0ZGU0VUX09GRlNFVD0xMjtSMFtvOV09KCgkKT0+e3JldHVybiAkLkFycmF5VHlwZT1VaW50OEFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iQmluYXJ5VmlldyJ9KShSMC5wcm90b3R5cGUpO3JRPWNsYXNzIHJRIGV4dGVuZHMga3tjb25zdHJ1Y3Rvcigpe3N1cGVyKEEuTGFyZ2VCaW5hcnkpfXRvU3RyaW5nKCl7cmV0dXJuIkxhcmdlQmluYXJ5In19O3M5PVN5bWJvbC50b1N0cmluZ1RhZztyUVtzOV09KCgkKT0+e3JldHVybiAkLkFycmF5VHlwZT1VaW50OEFycmF5LCQuT2Zmc2V0QXJyYXlUeXBlPUJpZ0ludDY0QXJyYXksJFtTeW1ib2wudG9TdHJpbmdUYWddPSJMYXJnZUJpbmFyeSJ9KShyUS5wcm90b3R5cGUpO1QkPWNsYXNzIFQkIGV4dGVuZHMga3tjb25zdHJ1Y3Rvcigpe3N1cGVyKEEuVXRmOCl9dG9TdHJpbmcoKXtyZXR1cm4iVXRmOCJ9fTtpOT1TeW1ib2wudG9TdHJpbmdUYWc7VCRbaTldPSgoJCk9PntyZXR1cm4gJC5BcnJheVR5cGU9VWludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IlV0ZjgifSkoVCQucHJvdG90eXBlKTtPUT1jbGFzcyBPUSBleHRlbmRzIGt7Y29uc3RydWN0b3IoKXtzdXBlcihBLlV0ZjhWaWV3KX10b1N0cmluZygpe3JldHVybiJVdGY4VmlldyJ9fTtyOT1TeW1ib2wudG9TdHJpbmdUYWc7T1EuRUxFTUVOVF9XSURUSD1SMC5FTEVNRU5UX1dJRFRIO09RLklOTElORV9DQVBBQ0lUWT1SMC5JTkxJTkVfQ0FQQUNJVFk7T1FbcjldPSgoJCk9PntyZXR1cm4gJC5BcnJheVR5cGU9VWludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IlV0ZjhWaWV3In0pKE9RLnByb3RvdHlwZSk7YVE9Y2xhc3MgYVEgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCl7c3VwZXIoQS5MYXJnZVV0ZjgpfXRvU3RyaW5nKCl7cmV0dXJuIkxhcmdlVXRmOCJ9fTthOT1TeW1ib2wudG9TdHJpbmdUYWc7YVFbYTldPSgoJCk9PntyZXR1cm4gJC5BcnJheVR5cGU9VWludDhBcnJheSwkLk9mZnNldEFycmF5VHlwZT1CaWdJbnQ2NEFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iTGFyZ2VVdGY4In0pKGFRLnByb3RvdHlwZSk7ViQ9Y2xhc3MgViQgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCl7c3VwZXIoQS5Cb29sKX10b1N0cmluZygpe3JldHVybiJCb29sIn19O3Q5PVN5bWJvbC50b1N0cmluZ1RhZztWJFt0OV09KCgkKT0+e3JldHVybiAkLkFycmF5VHlwZT1VaW50OEFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iQm9vbCJ9KShWJC5wcm90b3R5cGUpO3RRPWNsYXNzIHRRIGV4dGVuZHMga3tjb25zdHJ1Y3RvcigkLFosUT0xMjgpe3N1cGVyKEEuRGVjaW1hbCk7dGhpcy5zY2FsZT0kLHRoaXMucHJlY2lzaW9uPVosdGhpcy5iaXRXaWR0aD1RfXRvU3RyaW5nKCl7cmV0dXJuYERlY2ltYWxbJHt0aGlzLnByZWNpc2lvbn1lJHt0aGlzLnNjYWxlPjA/IisiOiIifSR7dGhpcy5zY2FsZX1dYH19O2U5PVN5bWJvbC50b1N0cmluZ1RhZzt0UVtlOV09KCgkKT0+e3JldHVybiAkLnNjYWxlPW51bGwsJC5wcmVjaXNpb249bnVsbCwkLkFycmF5VHlwZT1VaW50MzJBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkRlY2ltYWwifSkodFEucHJvdG90eXBlKTtPOD1jbGFzcyBPOCBleHRlbmRzIGt7Y29uc3RydWN0b3IoJCl7c3VwZXIoQS5EYXRlKTt0aGlzLnVuaXQ9JH10b1N0cmluZygpe3JldHVybmBEYXRlJHsodGhpcy51bml0KzEpKjMyfTwke3IwW3RoaXMudW5pdF19PmB9Z2V0IEFycmF5VHlwZSgpe3JldHVybiB0aGlzLnVuaXQ9PT1yMC5EQVk/SW50MzJBcnJheTpCaWdJbnQ2NEFycmF5fX07JHE9U3ltYm9sLnRvU3RyaW5nVGFnO084WyRxXT0oKCQpPT57cmV0dXJuICQudW5pdD1udWxsLCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iRGF0ZSJ9KShPOC5wcm90b3R5cGUpO0M4PWNsYXNzIEM4IGV4dGVuZHMga3tjb25zdHJ1Y3RvcigkLFope3N1cGVyKEEuVGltZSk7dGhpcy51bml0PSQsdGhpcy5iaXRXaWR0aD1afXRvU3RyaW5nKCl7cmV0dXJuYFRpbWUke3RoaXMuYml0V2lkdGh9PCR7bFt0aGlzLnVuaXRdfT5gfWdldCBBcnJheVR5cGUoKXtzd2l0Y2godGhpcy5iaXRXaWR0aCl7Y2FzZSAzMjpyZXR1cm4gSW50MzJBcnJheTtjYXNlIDY0OnJldHVybiBCaWdJbnQ2NEFycmF5fXRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgJHt0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ119IHR5cGVgKX19O1pxPVN5bWJvbC50b1N0cmluZ1RhZztDOFtacV09KCgkKT0+e3JldHVybiAkLnVuaXQ9bnVsbCwkLmJpdFdpZHRoPW51bGwsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJUaW1lIn0pKEM4LnByb3RvdHlwZSk7dFo9Y2xhc3MgdFogZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCQsWil7c3VwZXIoQS5UaW1lc3RhbXApO3RoaXMudW5pdD0kLHRoaXMudGltZXpvbmU9Wn10b1N0cmluZygpe3JldHVybmBUaW1lc3RhbXA8JHtsW3RoaXMudW5pdF19JHt0aGlzLnRpbWV6b25lP2AsICR7dGhpcy50aW1lem9uZX1gOiIifT5gfX07UXE9U3ltYm9sLnRvU3RyaW5nVGFnO3RaW1FxXT0oKCQpPT57cmV0dXJuICQudW5pdD1udWxsLCQudGltZXpvbmU9bnVsbCwkLkFycmF5VHlwZT1CaWdJbnQ2NEFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iVGltZXN0YW1wIn0pKHRaLnByb3RvdHlwZSk7Ulk9Y2xhc3MgUlkgZXh0ZW5kcyB0Wntjb25zdHJ1Y3RvcigkKXtzdXBlcihsLk1JTExJU0VDT05ELCQpfX07ajg9Y2xhc3MgajggZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCQpe3N1cGVyKEEuSW50ZXJ2YWwpO3RoaXMudW5pdD0kfXRvU3RyaW5nKCl7cmV0dXJuYEludGVydmFsPCR7czBbdGhpcy51bml0XX0+YH19O1hxPVN5bWJvbC50b1N0cmluZ1RhZztqOFtYcV09KCgkKT0+e3JldHVybiAkLnVuaXQ9bnVsbCwkLkFycmF5VHlwZT1JbnQzMkFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iSW50ZXJ2YWwifSkoajgucHJvdG90eXBlKTtWOD1jbGFzcyBWOCBleHRlbmRzIGt7Y29uc3RydWN0b3IoJCl7c3VwZXIoQS5EdXJhdGlvbik7dGhpcy51bml0PSR9dG9TdHJpbmcoKXtyZXR1cm5gRHVyYXRpb248JHtsW3RoaXMudW5pdF19PmB9fTtKcT1TeW1ib2wudG9TdHJpbmdUYWc7VjhbSnFdPSgoJCk9PntyZXR1cm4gJC51bml0PW51bGwsJC5BcnJheVR5cGU9QmlnSW50NjRBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkR1cmF0aW9uIn0pKFY4LnByb3RvdHlwZSk7TFo9Y2xhc3MgTFogZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCQpe3N1cGVyKEEuTGlzdCk7dGhpcy5jaGlsZHJlbj1bJF19dG9TdHJpbmcoKXtyZXR1cm5gTGlzdDwke3RoaXMudmFsdWVUeXBlfT5gfWdldCB2YWx1ZVR5cGUoKXtyZXR1cm4gdGhpcy5jaGlsZHJlblswXS50eXBlfWdldCB2YWx1ZUZpZWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF19Z2V0IEFycmF5VHlwZSgpe3JldHVybiB0aGlzLnZhbHVlVHlwZS5BcnJheVR5cGV9fTtXcT1TeW1ib2wudG9TdHJpbmdUYWc7TFpbV3FdPSgoJCk9PntyZXR1cm4gJC5jaGlsZHJlbj1udWxsLCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iTGlzdCJ9KShMWi5wcm90b3R5cGUpO2owPWNsYXNzIGowIGV4dGVuZHMga3tjb25zdHJ1Y3RvcigkKXtzdXBlcihBLlN0cnVjdCk7dGhpcy5jaGlsZHJlbj0kfXRvU3RyaW5nKCl7cmV0dXJuYFN0cnVjdDx7JHt0aGlzLmNoaWxkcmVuLm1hcCgoJCk9PmAkeyQubmFtZX06JHskLnR5cGV9YCkuam9pbigiLCAiKX19PmB9fTtZcT1TeW1ib2wudG9TdHJpbmdUYWc7ajBbWXFdPSgoJCk9PntyZXR1cm4gJC5jaGlsZHJlbj1udWxsLCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iU3RydWN0In0pKGowLnByb3RvdHlwZSk7Q1E9Y2xhc3MgQ1EgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCQsWixRKXtzdXBlcihBLlVuaW9uKTt0aGlzLm1vZGU9JCx0aGlzLmNoaWxkcmVuPVEsdGhpcy50eXBlSWRzPVo9SW50MzJBcnJheS5mcm9tKFopLHRoaXMudHlwZUlkVG9DaGlsZEluZGV4PVoucmVkdWNlKChYLEosVyk9PihYW0pdPVcpJiZYfHxYLE9iamVjdC5jcmVhdGUobnVsbCkpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpc1tTeW1ib2wudG9TdHJpbmdUYWddfTwke3RoaXMuY2hpbGRyZW4ubWFwKCgkKT0+YCR7JC50eXBlfWApLmpvaW4oIiB8ICIpfT5gfX07R3E9U3ltYm9sLnRvU3RyaW5nVGFnO0NRW0dxXT0oKCQpPT57cmV0dXJuICQubW9kZT1udWxsLCQudHlwZUlkcz1udWxsLCQuY2hpbGRyZW49bnVsbCwkLnR5cGVJZFRvQ2hpbGRJbmRleD1udWxsLCQuQXJyYXlUeXBlPUludDhBcnJheSwkW1N5bWJvbC50b1N0cmluZ1RhZ109IlVuaW9uIn0pKENRLnByb3RvdHlwZSk7RVk9Y2xhc3MgRVkgZXh0ZW5kcyBDUXtjb25zdHJ1Y3RvcigkLFope3N1cGVyKG0wLkRlbnNlLCQsWil9fTtISj1jbGFzcyBISiBleHRlbmRzIENRe2NvbnN0cnVjdG9yKCQsWil7c3VwZXIobTAuU3BhcnNlLCQsWil9fTtlUT1jbGFzcyBlUSBleHRlbmRzIGt7Y29uc3RydWN0b3IoJCl7c3VwZXIoQS5GaXhlZFNpemVCaW5hcnkpO3RoaXMuYnl0ZVdpZHRoPSR9dG9TdHJpbmcoKXtyZXR1cm5gRml4ZWRTaXplQmluYXJ5WyR7dGhpcy5ieXRlV2lkdGh9XWB9fTtLcT1TeW1ib2wudG9TdHJpbmdUYWc7ZVFbS3FdPSgoJCk9PntyZXR1cm4gJC5ieXRlV2lkdGg9bnVsbCwkLkFycmF5VHlwZT1VaW50OEFycmF5LCRbU3ltYm9sLnRvU3RyaW5nVGFnXT0iRml4ZWRTaXplQmluYXJ5In0pKGVRLnByb3RvdHlwZSk7alE9Y2xhc3MgalEgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKCQsWil7c3VwZXIoQS5GaXhlZFNpemVMaXN0KTt0aGlzLmxpc3RTaXplPSQsdGhpcy5jaGlsZHJlbj1bWl19Z2V0IHZhbHVlVHlwZSgpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLnR5cGV9Z2V0IHZhbHVlRmllbGQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlblswXX1nZXQgQXJyYXlUeXBlKCl7cmV0dXJuIHRoaXMudmFsdWVUeXBlLkFycmF5VHlwZX10b1N0cmluZygpe3JldHVybmBGaXhlZFNpemVMaXN0WyR7dGhpcy5saXN0U2l6ZX1dPCR7dGhpcy52YWx1ZVR5cGV9PmB9fTtIcT1TeW1ib2wudG9TdHJpbmdUYWc7alFbSHFdPSgoJCk9PntyZXR1cm4gJC5jaGlsZHJlbj1udWxsLCQubGlzdFNpemU9bnVsbCwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkZpeGVkU2l6ZUxpc3QifSkoalEucHJvdG90eXBlKTtlWj1jbGFzcyBlWiBleHRlbmRzIGt7Y29uc3RydWN0b3IoJCxaPSExKXt2YXIgUSxYLEo7c3VwZXIoQS5NYXApO2lmKHRoaXMuY2hpbGRyZW49WyRdLHRoaXMua2V5c1NvcnRlZD1aLCQpe2lmKCQubmFtZT0iZW50cmllcyIsKFE9JD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZSk9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLmNoaWxkcmVuKXtsZXQgVz0oWD0kPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC50eXBlKT09PW51bGx8fFg9PT12b2lkIDA/dm9pZCAwOlguY2hpbGRyZW5bMF07aWYoVylXLm5hbWU9ImtleSI7bGV0IFk9KEo9JD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiQudHlwZSk9PT1udWxsfHxKPT09dm9pZCAwP3ZvaWQgMDpKLmNoaWxkcmVuWzFdO2lmKFkpWS5uYW1lPSJ2YWx1ZSJ9fX1nZXQga2V5VHlwZSgpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdLnR5cGUuY2hpbGRyZW5bMF0udHlwZX1nZXQgdmFsdWVUeXBlKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0udHlwZS5jaGlsZHJlblsxXS50eXBlfWdldCBjaGlsZFR5cGUoKXtyZXR1cm4gdGhpcy5jaGlsZHJlblswXS50eXBlfXRvU3RyaW5nKCl7cmV0dXJuYE1hcDx7JHt0aGlzLmNoaWxkcmVuWzBdLnR5cGUuY2hpbGRyZW4ubWFwKCgkKT0+YCR7JC5uYW1lfTokeyQudHlwZX1gKS5qb2luKCIsICIpfX0+YH19O3pxPVN5bWJvbC50b1N0cmluZ1RhZztlWlt6cV09KCgkKT0+e3JldHVybiAkLmNoaWxkcmVuPW51bGwsJC5rZXlzU29ydGVkPW51bGwsJFtTeW1ib2wudG9TdHJpbmdUYWddPSJNYXBfIn0pKGVaLnByb3RvdHlwZSk7YUQ9KCgkKT0+KCk9PisrJCkoLTEpO1laPWNsYXNzIFlaIGV4dGVuZHMga3tjb25zdHJ1Y3RvcigkLFosUSxYKXtzdXBlcihBLkRpY3Rpb25hcnkpO3RoaXMuaW5kaWNlcz1aLHRoaXMuZGljdGlvbmFyeT0kLHRoaXMuaXNPcmRlcmVkPVh8fCExLHRoaXMuaWQ9UT09bnVsbD9hRCgpOmMwKFEpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmRpY3Rpb25hcnkuY2hpbGRyZW59Z2V0IHZhbHVlVHlwZSgpe3JldHVybiB0aGlzLmRpY3Rpb25hcnl9Z2V0IEFycmF5VHlwZSgpe3JldHVybiB0aGlzLmRpY3Rpb25hcnkuQXJyYXlUeXBlfXRvU3RyaW5nKCl7cmV0dXJuYERpY3Rpb25hcnk8JHt0aGlzLmluZGljZXN9LCAke3RoaXMuZGljdGlvbmFyeX0+YH19O3FxPVN5bWJvbC50b1N0cmluZ1RhZztZWltxcV09KCgkKT0+e3JldHVybiAkLmlkPW51bGwsJC5pbmRpY2VzPW51bGwsJC5pc09yZGVyZWQ9bnVsbCwkLmRpY3Rpb25hcnk9bnVsbCwkW1N5bWJvbC50b1N0cmluZ1RhZ109IkRpY3Rpb25hcnkifSkoWVoucHJvdG90eXBlKX0pO2NsYXNzIEgwe3Zpc2l0TWFueSgkLC4uLlope3JldHVybiAkLm1hcCgoUSxYKT0+dGhpcy52aXNpdChRLC4uLloubWFwKChKKT0+SltYXSkpKX12aXNpdCguLi4kKXtyZXR1cm4gdGhpcy5nZXRWaXNpdEZuKCRbMF0sITEpLmFwcGx5KHRoaXMsJCl9Z2V0VmlzaXRGbigkLFo9ITApe3JldHVybiB0RCh0aGlzLCQsWil9Z2V0VmlzaXRGbkJ5VHlwZUlkKCQsWj0hMCl7cmV0dXJuIGU2KHRoaXMsJCxaKX12aXNpdE51bGwoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdEJvb2woJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdEludCgkLC4uLlope3JldHVybiBudWxsfXZpc2l0RmxvYXQoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdFV0ZjgoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdExhcmdlVXRmOCgkLC4uLlope3JldHVybiBudWxsfXZpc2l0VXRmOFZpZXcoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdEJpbmFyeSgkLC4uLlope3JldHVybiBudWxsfXZpc2l0TGFyZ2VCaW5hcnkoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdEJpbmFyeVZpZXcoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdEZpeGVkU2l6ZUJpbmFyeSgkLC4uLlope3JldHVybiBudWxsfXZpc2l0RGF0ZSgkLC4uLlope3JldHVybiBudWxsfXZpc2l0VGltZXN0YW1wKCQsLi4uWil7cmV0dXJuIG51bGx9dmlzaXRUaW1lKCQsLi4uWil7cmV0dXJuIG51bGx9dmlzaXREZWNpbWFsKCQsLi4uWil7cmV0dXJuIG51bGx9dmlzaXRMaXN0KCQsLi4uWil7cmV0dXJuIG51bGx9dmlzaXRTdHJ1Y3QoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdFVuaW9uKCQsLi4uWil7cmV0dXJuIG51bGx9dmlzaXREaWN0aW9uYXJ5KCQsLi4uWil7cmV0dXJuIG51bGx9dmlzaXRJbnRlcnZhbCgkLC4uLlope3JldHVybiBudWxsfXZpc2l0RHVyYXRpb24oJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdEZpeGVkU2l6ZUxpc3QoJCwuLi5aKXtyZXR1cm4gbnVsbH12aXNpdE1hcCgkLC4uLlope3JldHVybiBudWxsfX1mdW5jdGlvbiB0RCgkLFosUT0hMCl7aWYodHlwZW9mIFo9PT0ibnVtYmVyIilyZXR1cm4gZTYoJCxaLFEpO2lmKHR5cGVvZiBaPT09InN0cmluZyImJlogaW4gQSlyZXR1cm4gZTYoJCxBW1pdLFEpO2lmKFomJlogaW5zdGFuY2VvZiBrKXJldHVybiBlNigkLE5xKFopLFEpO2lmKChaPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi50eXBlKSYmWi50eXBlIGluc3RhbmNlb2YgaylyZXR1cm4gZTYoJCxOcShaLnR5cGUpLFEpO3JldHVybiBlNigkLEEuTk9ORSxRKX1mdW5jdGlvbiBlNigkLFosUT0hMCl7bGV0IFg9bnVsbDtzd2l0Y2goWil7Y2FzZSBBLk51bGw6WD0kLnZpc2l0TnVsbDticmVhaztjYXNlIEEuQm9vbDpYPSQudmlzaXRCb29sO2JyZWFrO2Nhc2UgQS5JbnQ6WD0kLnZpc2l0SW50O2JyZWFrO2Nhc2UgQS5JbnQ4Olg9JC52aXNpdEludDh8fCQudmlzaXRJbnQ7YnJlYWs7Y2FzZSBBLkludDE2Olg9JC52aXNpdEludDE2fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgQS5JbnQzMjpYPSQudmlzaXRJbnQzMnx8JC52aXNpdEludDticmVhaztjYXNlIEEuSW50NjQ6WD0kLnZpc2l0SW50NjR8fCQudmlzaXRJbnQ7YnJlYWs7Y2FzZSBBLlVpbnQ4Olg9JC52aXNpdFVpbnQ4fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgQS5VaW50MTY6WD0kLnZpc2l0VWludDE2fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgQS5VaW50MzI6WD0kLnZpc2l0VWludDMyfHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgQS5VaW50NjQ6WD0kLnZpc2l0VWludDY0fHwkLnZpc2l0SW50O2JyZWFrO2Nhc2UgQS5GbG9hdDpYPSQudmlzaXRGbG9hdDticmVhaztjYXNlIEEuRmxvYXQxNjpYPSQudmlzaXRGbG9hdDE2fHwkLnZpc2l0RmxvYXQ7YnJlYWs7Y2FzZSBBLkZsb2F0MzI6WD0kLnZpc2l0RmxvYXQzMnx8JC52aXNpdEZsb2F0O2JyZWFrO2Nhc2UgQS5GbG9hdDY0Olg9JC52aXNpdEZsb2F0NjR8fCQudmlzaXRGbG9hdDticmVhaztjYXNlIEEuVXRmODpYPSQudmlzaXRVdGY4O2JyZWFrO2Nhc2UgQS5MYXJnZVV0Zjg6WD0kLnZpc2l0TGFyZ2VVdGY4O2JyZWFrO2Nhc2UgQS5VdGY4VmlldzpYPSQudmlzaXRVdGY4Vmlld3x8JC52aXNpdFV0Zjg7YnJlYWs7Y2FzZSBBLkJpbmFyeTpYPSQudmlzaXRCaW5hcnk7YnJlYWs7Y2FzZSBBLkxhcmdlQmluYXJ5Olg9JC52aXNpdExhcmdlQmluYXJ5O2JyZWFrO2Nhc2UgQS5CaW5hcnlWaWV3Olg9JC52aXNpdEJpbmFyeVZpZXd8fCQudmlzaXRCaW5hcnk7YnJlYWs7Y2FzZSBBLkZpeGVkU2l6ZUJpbmFyeTpYPSQudmlzaXRGaXhlZFNpemVCaW5hcnk7YnJlYWs7Y2FzZSBBLkRhdGU6WD0kLnZpc2l0RGF0ZTticmVhaztjYXNlIEEuRGF0ZURheTpYPSQudmlzaXREYXRlRGF5fHwkLnZpc2l0RGF0ZTticmVhaztjYXNlIEEuRGF0ZU1pbGxpc2Vjb25kOlg9JC52aXNpdERhdGVNaWxsaXNlY29uZHx8JC52aXNpdERhdGU7YnJlYWs7Y2FzZSBBLlRpbWVzdGFtcDpYPSQudmlzaXRUaW1lc3RhbXA7YnJlYWs7Y2FzZSBBLlRpbWVzdGFtcFNlY29uZDpYPSQudmlzaXRUaW1lc3RhbXBTZWNvbmR8fCQudmlzaXRUaW1lc3RhbXA7YnJlYWs7Y2FzZSBBLlRpbWVzdGFtcE1pbGxpc2Vjb25kOlg9JC52aXNpdFRpbWVzdGFtcE1pbGxpc2Vjb25kfHwkLnZpc2l0VGltZXN0YW1wO2JyZWFrO2Nhc2UgQS5UaW1lc3RhbXBNaWNyb3NlY29uZDpYPSQudmlzaXRUaW1lc3RhbXBNaWNyb3NlY29uZHx8JC52aXNpdFRpbWVzdGFtcDticmVhaztjYXNlIEEuVGltZXN0YW1wTmFub3NlY29uZDpYPSQudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kfHwkLnZpc2l0VGltZXN0YW1wO2JyZWFrO2Nhc2UgQS5UaW1lOlg9JC52aXNpdFRpbWU7YnJlYWs7Y2FzZSBBLlRpbWVTZWNvbmQ6WD0kLnZpc2l0VGltZVNlY29uZHx8JC52aXNpdFRpbWU7YnJlYWs7Y2FzZSBBLlRpbWVNaWxsaXNlY29uZDpYPSQudmlzaXRUaW1lTWlsbGlzZWNvbmR8fCQudmlzaXRUaW1lO2JyZWFrO2Nhc2UgQS5UaW1lTWljcm9zZWNvbmQ6WD0kLnZpc2l0VGltZU1pY3Jvc2Vjb25kfHwkLnZpc2l0VGltZTticmVhaztjYXNlIEEuVGltZU5hbm9zZWNvbmQ6WD0kLnZpc2l0VGltZU5hbm9zZWNvbmR8fCQudmlzaXRUaW1lO2JyZWFrO2Nhc2UgQS5EZWNpbWFsOlg9JC52aXNpdERlY2ltYWw7YnJlYWs7Y2FzZSBBLkxpc3Q6WD0kLnZpc2l0TGlzdDticmVhaztjYXNlIEEuU3RydWN0Olg9JC52aXNpdFN0cnVjdDticmVhaztjYXNlIEEuVW5pb246WD0kLnZpc2l0VW5pb247YnJlYWs7Y2FzZSBBLkRlbnNlVW5pb246WD0kLnZpc2l0RGVuc2VVbmlvbnx8JC52aXNpdFVuaW9uO2JyZWFrO2Nhc2UgQS5TcGFyc2VVbmlvbjpYPSQudmlzaXRTcGFyc2VVbmlvbnx8JC52aXNpdFVuaW9uO2JyZWFrO2Nhc2UgQS5EaWN0aW9uYXJ5Olg9JC52aXNpdERpY3Rpb25hcnk7YnJlYWs7Y2FzZSBBLkludGVydmFsOlg9JC52aXNpdEludGVydmFsO2JyZWFrO2Nhc2UgQS5JbnRlcnZhbERheVRpbWU6WD0kLnZpc2l0SW50ZXJ2YWxEYXlUaW1lfHwkLnZpc2l0SW50ZXJ2YWw7YnJlYWs7Y2FzZSBBLkludGVydmFsWWVhck1vbnRoOlg9JC52aXNpdEludGVydmFsWWVhck1vbnRofHwkLnZpc2l0SW50ZXJ2YWw7YnJlYWs7Y2FzZSBBLkludGVydmFsTW9udGhEYXlOYW5vOlg9JC52aXNpdEludGVydmFsTW9udGhEYXlOYW5vfHwkLnZpc2l0SW50ZXJ2YWw7YnJlYWs7Y2FzZSBBLkR1cmF0aW9uOlg9JC52aXNpdER1cmF0aW9uO2JyZWFrO2Nhc2UgQS5EdXJhdGlvblNlY29uZDpYPSQudmlzaXREdXJhdGlvblNlY29uZHx8JC52aXNpdER1cmF0aW9uO2JyZWFrO2Nhc2UgQS5EdXJhdGlvbk1pbGxpc2Vjb25kOlg9JC52aXNpdER1cmF0aW9uTWlsbGlzZWNvbmR8fCQudmlzaXREdXJhdGlvbjticmVhaztjYXNlIEEuRHVyYXRpb25NaWNyb3NlY29uZDpYPSQudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kfHwkLnZpc2l0RHVyYXRpb247YnJlYWs7Y2FzZSBBLkR1cmF0aW9uTmFub3NlY29uZDpYPSQudmlzaXREdXJhdGlvbk5hbm9zZWNvbmR8fCQudmlzaXREdXJhdGlvbjticmVhaztjYXNlIEEuRml4ZWRTaXplTGlzdDpYPSQudmlzaXRGaXhlZFNpemVMaXN0O2JyZWFrO2Nhc2UgQS5NYXA6WD0kLnZpc2l0TWFwO2JyZWFrfWlmKHR5cGVvZiBYPT09ImZ1bmN0aW9uIilyZXR1cm4gWDtpZighUSlyZXR1cm4oKT0+bnVsbDt0aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkIHR5cGUgJyR7QVtaXX0nYCl9ZnVuY3Rpb24gTnEoJCl7c3dpdGNoKCQudHlwZUlkKXtjYXNlIEEuTnVsbDpyZXR1cm4gQS5OdWxsO2Nhc2UgQS5JbnQ6e2xldHtiaXRXaWR0aDpaLGlzU2lnbmVkOlF9PSQ7c3dpdGNoKFope2Nhc2UgODpyZXR1cm4gUT9BLkludDg6QS5VaW50ODtjYXNlIDE2OnJldHVybiBRP0EuSW50MTY6QS5VaW50MTY7Y2FzZSAzMjpyZXR1cm4gUT9BLkludDMyOkEuVWludDMyO2Nhc2UgNjQ6cmV0dXJuIFE/QS5JbnQ2NDpBLlVpbnQ2NH1yZXR1cm4gQS5JbnR9Y2FzZSBBLkZsb2F0OnN3aXRjaCgkLnByZWNpc2lvbil7Y2FzZSBKJC5IQUxGOnJldHVybiBBLkZsb2F0MTY7Y2FzZSBKJC5TSU5HTEU6cmV0dXJuIEEuRmxvYXQzMjtjYXNlIEokLkRPVUJMRTpyZXR1cm4gQS5GbG9hdDY0fXJldHVybiBBLkZsb2F0O2Nhc2UgQS5CaW5hcnk6cmV0dXJuIEEuQmluYXJ5O2Nhc2UgQS5MYXJnZUJpbmFyeTpyZXR1cm4gQS5MYXJnZUJpbmFyeTtjYXNlIEEuQmluYXJ5VmlldzpyZXR1cm4gQS5CaW5hcnlWaWV3O2Nhc2UgQS5VdGY4OnJldHVybiBBLlV0Zjg7Y2FzZSBBLkxhcmdlVXRmODpyZXR1cm4gQS5MYXJnZVV0Zjg7Y2FzZSBBLlV0ZjhWaWV3OnJldHVybiBBLlV0ZjhWaWV3O2Nhc2UgQS5Cb29sOnJldHVybiBBLkJvb2w7Y2FzZSBBLkRlY2ltYWw6cmV0dXJuIEEuRGVjaW1hbDtjYXNlIEEuVGltZTpzd2l0Y2goJC51bml0KXtjYXNlIGwuU0VDT05EOnJldHVybiBBLlRpbWVTZWNvbmQ7Y2FzZSBsLk1JTExJU0VDT05EOnJldHVybiBBLlRpbWVNaWxsaXNlY29uZDtjYXNlIGwuTUlDUk9TRUNPTkQ6cmV0dXJuIEEuVGltZU1pY3Jvc2Vjb25kO2Nhc2UgbC5OQU5PU0VDT05EOnJldHVybiBBLlRpbWVOYW5vc2Vjb25kfXJldHVybiBBLlRpbWU7Y2FzZSBBLlRpbWVzdGFtcDpzd2l0Y2goJC51bml0KXtjYXNlIGwuU0VDT05EOnJldHVybiBBLlRpbWVzdGFtcFNlY29uZDtjYXNlIGwuTUlMTElTRUNPTkQ6cmV0dXJuIEEuVGltZXN0YW1wTWlsbGlzZWNvbmQ7Y2FzZSBsLk1JQ1JPU0VDT05EOnJldHVybiBBLlRpbWVzdGFtcE1pY3Jvc2Vjb25kO2Nhc2UgbC5OQU5PU0VDT05EOnJldHVybiBBLlRpbWVzdGFtcE5hbm9zZWNvbmR9cmV0dXJuIEEuVGltZXN0YW1wO2Nhc2UgQS5EYXRlOnN3aXRjaCgkLnVuaXQpe2Nhc2UgcjAuREFZOnJldHVybiBBLkRhdGVEYXk7Y2FzZSByMC5NSUxMSVNFQ09ORDpyZXR1cm4gQS5EYXRlTWlsbGlzZWNvbmR9cmV0dXJuIEEuRGF0ZTtjYXNlIEEuSW50ZXJ2YWw6c3dpdGNoKCQudW5pdCl7Y2FzZSBzMC5EQVlfVElNRTpyZXR1cm4gQS5JbnRlcnZhbERheVRpbWU7Y2FzZSBzMC5ZRUFSX01PTlRIOnJldHVybiBBLkludGVydmFsWWVhck1vbnRoO2Nhc2UgczAuTU9OVEhfREFZX05BTk86cmV0dXJuIEEuSW50ZXJ2YWxNb250aERheU5hbm99cmV0dXJuIEEuSW50ZXJ2YWw7Y2FzZSBBLkR1cmF0aW9uOnN3aXRjaCgkLnVuaXQpe2Nhc2UgbC5TRUNPTkQ6cmV0dXJuIEEuRHVyYXRpb25TZWNvbmQ7Y2FzZSBsLk1JTExJU0VDT05EOnJldHVybiBBLkR1cmF0aW9uTWlsbGlzZWNvbmQ7Y2FzZSBsLk1JQ1JPU0VDT05EOnJldHVybiBBLkR1cmF0aW9uTWljcm9zZWNvbmQ7Y2FzZSBsLk5BTk9TRUNPTkQ6cmV0dXJuIEEuRHVyYXRpb25OYW5vc2Vjb25kfXJldHVybiBBLkR1cmF0aW9uO2Nhc2UgQS5NYXA6cmV0dXJuIEEuTWFwO2Nhc2UgQS5MaXN0OnJldHVybiBBLkxpc3Q7Y2FzZSBBLlN0cnVjdDpyZXR1cm4gQS5TdHJ1Y3Q7Y2FzZSBBLlVuaW9uOnN3aXRjaCgkLm1vZGUpe2Nhc2UgbTAuRGVuc2U6cmV0dXJuIEEuRGVuc2VVbmlvbjtjYXNlIG0wLlNwYXJzZTpyZXR1cm4gQS5TcGFyc2VVbmlvbn1yZXR1cm4gQS5VbmlvbjtjYXNlIEEuRml4ZWRTaXplQmluYXJ5OnJldHVybiBBLkZpeGVkU2l6ZUJpbmFyeTtjYXNlIEEuRml4ZWRTaXplTGlzdDpyZXR1cm4gQS5GaXhlZFNpemVMaXN0O2Nhc2UgQS5EaWN0aW9uYXJ5OnJldHVybiBBLkRpY3Rpb25hcnl9dGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCB0eXBlICcke0FbJC50eXBlSWRdfSdgKX12YXIgUjg9TygoKT0+e3UkKCk7SCQoKTtIMC5wcm90b3R5cGUudmlzaXRJbnQ4PW51bGw7SDAucHJvdG90eXBlLnZpc2l0SW50MTY9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRJbnQzMj1udWxsO0gwLnByb3RvdHlwZS52aXNpdEludDY0PW51bGw7SDAucHJvdG90eXBlLnZpc2l0VWludDg9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRVaW50MTY9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRVaW50MzI9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRVaW50NjQ9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRGbG9hdDE2PW51bGw7SDAucHJvdG90eXBlLnZpc2l0RmxvYXQzMj1udWxsO0gwLnByb3RvdHlwZS52aXNpdEZsb2F0NjQ9bnVsbDtIMC5wcm90b3R5cGUudmlzaXREYXRlRGF5PW51bGw7SDAucHJvdG90eXBlLnZpc2l0RGF0ZU1pbGxpc2Vjb25kPW51bGw7SDAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wU2Vjb25kPW51bGw7SDAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBNaWNyb3NlY29uZD1udWxsO0gwLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE5hbm9zZWNvbmQ9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRUaW1lU2Vjb25kPW51bGw7SDAucHJvdG90eXBlLnZpc2l0VGltZU1pbGxpc2Vjb25kPW51bGw7SDAucHJvdG90eXBlLnZpc2l0VGltZU1pY3Jvc2Vjb25kPW51bGw7SDAucHJvdG90eXBlLnZpc2l0VGltZU5hbm9zZWNvbmQ9bnVsbDtIMC5wcm90b3R5cGUudmlzaXREZW5zZVVuaW9uPW51bGw7SDAucHJvdG90eXBlLnZpc2l0U3BhcnNlVW5pb249bnVsbDtIMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbERheVRpbWU9bnVsbDtIMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbFllYXJNb250aD1udWxsO0gwLnByb3RvdHlwZS52aXNpdEludGVydmFsTW9udGhEYXlOYW5vPW51bGw7SDAucHJvdG90eXBlLnZpc2l0RHVyYXRpb249bnVsbDtIMC5wcm90b3R5cGUudmlzaXREdXJhdGlvblNlY29uZD1udWxsO0gwLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTWlsbGlzZWNvbmQ9bnVsbDtIMC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kPW51bGw7SDAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25OYW5vc2Vjb25kPW51bGx9KTt2YXIgbks9e307UDgobksse3VpbnQxNlRvRmxvYXQ2NDooKT0+ejQsZmxvYXQ2NFRvVWludDE2OigpPT53WX0pO2Z1bmN0aW9uIHo0KCQpe2xldCBaPSgkJjMxNzQ0KT4+MTAsUT0oJCYxMDIzKS8xMDI0LFg9TWF0aC5wb3coLTEsKCQmMzI3NjgpPj4xNSk7c3dpdGNoKFope2Nhc2UgMzE6cmV0dXJuIFgqKFE/TnVtYmVyLk5hTjoxLzApO2Nhc2UgMDpyZXR1cm4gWCooUT8wLjAwMDA2MTAzNTE1NjI1KlE6MCl9cmV0dXJuIFgqTWF0aC5wb3coMixaLTE1KSooMStRKX1mdW5jdGlvbiB3WSgkKXtpZigkIT09JClyZXR1cm4gMzIyNTY7VXFbMF09JDtsZXQgWj0oJFdbMV0mMjE0NzQ4MzY0OCk+PjE2JjY1NTM1LFE9JFdbMV0mMjE0NjQzNTA3MixYPTA7aWYoUT49MTA4OTQ3MDQ2NClpZigkV1swXT4wKVE9MzE3NDQ7ZWxzZSBRPShRJjIwODAzNzQ3ODQpPj4xNixYPSgkV1sxXSYxMDQ4NTc1KT4+MTA7ZWxzZSBpZihRPD0xMDU2OTY0NjA4KVg9MTA0ODU3NisoJFdbMV0mMTA0ODU3NSksWD0xMDQ4NTc2KyhYPDwoUT4+MjApLTk5OCk+PjIxLFE9MDtlbHNlIFE9US0xMDU2OTY0NjA4Pj4xMCxYPSgkV1sxXSYxMDQ4NTc1KSs1MTI+PjEwO3JldHVybiBafFF8WCY2NTUzNX12YXIgVXEsJFc7dmFyIFNZPU8oKCk9PntVcT1uZXcgRmxvYXQ2NEFycmF5KDEpLCRXPW5ldyBVaW50MzJBcnJheShVcS5idWZmZXIpfSk7ZnVuY3Rpb24gTjAoJCl7cmV0dXJuKFosUSxYKT0+e2lmKFouc2V0VmFsaWQoUSxYIT1udWxsKSlyZXR1cm4gJChaLFEsWCl9fXZhciBLMCxlRD0oJCxaLFEpPT57JFtaXT1NYXRoLmZsb29yKFEvODY0MDAwMDApfSxNcT0oJCxaLFEsWCk9PntpZihRKzE8Wi5sZW5ndGgpe2xldCBKPWMwKFpbUV0pLFc9YzAoWltRKzFdKTskLnNldChYLnN1YmFycmF5KDAsVy1KKSxKKX19LCRPPSh7b2Zmc2V0OiQsdmFsdWVzOlp9LFEsWCk9PntsZXQgSj0kK1E7WD9aW0o+PjNdfD0xPDxKJTg6WltKPj4zXSY9figxPDxKJTgpfSxWWD0oe3ZhbHVlczokfSxaLFEpPT57JFtaXT1RfSxvSz0oe3ZhbHVlczokfSxaLFEpPT57JFtaXT1RfSxMcT0oe3ZhbHVlczokfSxaLFEpPT57JFtaXT13WShRKX0sWk89KCQsWixRKT0+e3N3aXRjaCgkLnR5cGUucHJlY2lzaW9uKXtjYXNlIEokLkhBTEY6cmV0dXJuIExxKCQsWixRKTtjYXNlIEokLlNJTkdMRTpjYXNlIEokLkRPVUJMRTpyZXR1cm4gb0soJCxaLFEpfX0scTQ9KHt2YWx1ZXM6JH0sWixRKT0+e2VEKCQsWixRLnZhbHVlT2YoKSl9LFA0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPUJpZ0ludChRKX0sc0s9KHtzdHJpZGU6JCx2YWx1ZXM6Wn0sUSxYKT0+e1ouc2V0KFguc3ViYXJyYXkoMCwkKSwkKlEpfSxBcT0oe3ZhbHVlczokLHZhbHVlT2Zmc2V0czpafSxRLFgpPT5NcSgkLFosUSxYKSxRTz0oJCk9PntsZXQgWj0kLnZhcmlhZGljQnVmZmVycztpZighQXJyYXkuaXNBcnJheShaKXx8T2JqZWN0LmlzRnJvemVuKFopKVo9QXJyYXkuZnJvbShaKSwkLnZhcmlhZGljQnVmZmVycz1aO3JldHVybiBafSxEcT0oJCxaLFEpPT57dmFyIFgsSixXLFk7bGV0IEc9JC52YWx1ZXM7aWYoIUcpdGhyb3cgRXJyb3IoIkJpbmFyeVZpZXcgZGF0YSBpcyBtaXNzaW5nIHZpZXcgYnVmZmVyIik7bGV0IEg9UjAuRUxFTUVOVF9XSURUSCx6PVoqSCxxPXorSDtpZih6PDB8fHE+Ry5sZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcihgQmluYXJ5VmlldyBpbmRleCAke1p9IG91dCBvZiBib3VuZHNgKTtHLmZpbGwoMCx6LHEpO2xldCBQPW5ldyBEYXRhVmlldyhHLmJ1ZmZlcixHLmJ5dGVPZmZzZXQreixIKSxVPVEubGVuZ3RoO2lmKFAuc2V0SW50MzIoUjAuTEVOR1RIX09GRlNFVCxVLCEwKSxVPD1SMC5JTkxJTkVfQ0FQQUNJVFkpe0cuc2V0KFEseitSMC5JTkxJTkVfT0ZGU0VUKTtyZXR1cm59bGV0IE09KChYPVFbMF0pIT09bnVsbCYmWCE9PXZvaWQgMD9YOjApfCgoSj1RWzFdKSE9PW51bGwmJkohPT12b2lkIDA/SjowKTw8OHwoKFc9UVsyXSkhPT1udWxsJiZXIT09dm9pZCAwP1c6MCk8PDE2fCgoWT1RWzNdKSE9PW51bGwmJlkhPT12b2lkIDA/WTowKTw8MjQ7UC5zZXRVaW50MzIoUjAuSU5MSU5FX09GRlNFVCxNPj4+MCwhMCk7bGV0IEw9UU8oJCksRD1RLnNsaWNlKCksUj1MLnB1c2goRCktMTtQLnNldEludDMyKFIwLkJVRkZFUl9JTkRFWF9PRkZTRVQsUiwhMCksUC5zZXRJbnQzMihSMC5CVUZGRVJfT0ZGU0VUX09GRlNFVCwwLCEwKX0sWE89KCQsWixRKT0+e2xldCBYPVEgaW5zdGFuY2VvZiBVaW50OEFycmF5P1E6bmV3IFVpbnQ4QXJyYXkoUSk7RHEoJCxaLFgpfSxPcT0oe3ZhbHVlczokLHZhbHVlT2Zmc2V0czpafSxRLFgpPT5NcSgkLFosUSxMUShYKSksSk89KCQsWixRKT0+e2xldCBYPUxRKFEpO0RxKCQsWixYKX0saUs9KCQsWixRKT0+eyQudHlwZS51bml0PT09cjAuREFZP3E0KCQsWixRKTpQNCgkLFosUSl9LEY0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPUJpZ0ludChRLzEwMDApfSxOND0oe3ZhbHVlczokfSxaLFEpPT57JFtaXT1CaWdJbnQoUSl9LFU0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPUJpZ0ludChRKjEwMDApfSxNND0oe3ZhbHVlczokfSxaLFEpPT57JFtaXT1CaWdJbnQoUSoxZTYpfSxySz0oJCxaLFEpPT57c3dpdGNoKCQudHlwZS51bml0KXtjYXNlIGwuU0VDT05EOnJldHVybiBGNCgkLFosUSk7Y2FzZSBsLk1JTExJU0VDT05EOnJldHVybiBONCgkLFosUSk7Y2FzZSBsLk1JQ1JPU0VDT05EOnJldHVybiBVNCgkLFosUSk7Y2FzZSBsLk5BTk9TRUNPTkQ6cmV0dXJuIE00KCQsWixRKX19LEw0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LEE0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LEQ0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LE80PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LGFLPSgkLFosUSk9Pntzd2l0Y2goJC50eXBlLnVuaXQpe2Nhc2UgbC5TRUNPTkQ6cmV0dXJuIEw0KCQsWixRKTtjYXNlIGwuTUlMTElTRUNPTkQ6cmV0dXJuIEE0KCQsWixRKTtjYXNlIGwuTUlDUk9TRUNPTkQ6cmV0dXJuIEQ0KCQsWixRKTtjYXNlIGwuTkFOT1NFQ09ORDpyZXR1cm4gTzQoJCxaLFEpfX0sdEs9KHt2YWx1ZXM6JCxzdHJpZGU6Wn0sUSxYKT0+eyQuc2V0KFguc3ViYXJyYXkoMCxaKSxaKlEpfSxXTz0oJCxaLFEpPT57bGV0IFg9JC5jaGlsZHJlblswXSxKPSQudmFsdWVPZmZzZXRzLFc9RFouZ2V0VmlzaXRGbihYKTtpZihBcnJheS5pc0FycmF5KFEpKWZvcihsZXQgWT0tMSxHPUpbWl0sSD1KW1orMV07RzxIOylXKFgsRysrLFFbKytZXSk7ZWxzZSBmb3IobGV0IFk9LTEsRz1KW1pdLEg9SltaKzFdO0c8SDspVyhYLEcrKyxRLmdldCgrK1kpKX0sWU89KCQsWixRKT0+e2xldCBYPSQuY2hpbGRyZW5bMF0se3ZhbHVlT2Zmc2V0czpKfT0kLFc9RFouZ2V0VmlzaXRGbihYKSx7W1pdOlksW1orMV06R309SixIPVEgaW5zdGFuY2VvZiBNYXA/US5lbnRyaWVzKCk6T2JqZWN0LmVudHJpZXMoUSk7Zm9yKGxldCB6IG9mIEgpaWYoVyhYLFkseiksKytZPj1HKWJyZWFrfSxHTz0oJCxaKT0+KFEsWCxKLFcpPT5YJiZRKFgsJCxaW1ddKSxLTz0oJCxaKT0+KFEsWCxKLFcpPT5YJiZRKFgsJCxaLmdldChXKSksSE89KCQsWik9PihRLFgsSixXKT0+WCYmUShYLCQsWi5nZXQoSi5uYW1lKSksek89KCQsWik9PihRLFgsSixXKT0+WCYmUShYLCQsWltKLm5hbWVdKSxxTz0oJCxaLFEpPT57bGV0IFg9JC50eXBlLmNoaWxkcmVuLm1hcCgoVyk9PkRaLmdldFZpc2l0Rm4oVy50eXBlKSksSj1RIGluc3RhbmNlb2YgTWFwP0hPKFosUSk6USBpbnN0YW5jZW9mIHI/S08oWixRKTpBcnJheS5pc0FycmF5KFEpP0dPKFosUSk6ek8oWixRKTskLnR5cGUuY2hpbGRyZW4uZm9yRWFjaCgoVyxZKT0+SihYW1ldLCQuY2hpbGRyZW5bWV0sVyxZKSl9LFBPPSgkLFosUSk9PnskLnR5cGUubW9kZT09PW0wLkRlbnNlP0NxKCQsWixRKTpqcSgkLFosUSl9LENxPSgkLFosUSk9PntsZXQgWD0kLnR5cGUudHlwZUlkVG9DaGlsZEluZGV4WyQudHlwZUlkc1taXV0sSj0kLmNoaWxkcmVuW1hdO0RaLnZpc2l0KEosJC52YWx1ZU9mZnNldHNbWl0sUSl9LGpxPSgkLFosUSk9PntsZXQgWD0kLnR5cGUudHlwZUlkVG9DaGlsZEluZGV4WyQudHlwZUlkc1taXV0sSj0kLmNoaWxkcmVuW1hdO0RaLnZpc2l0KEosWixRKX0sRk89KCQsWixRKT0+e3ZhciBYOyhYPSQuZGljdGlvbmFyeSk9PT1udWxsfHxYPT09dm9pZCAwfHxYLnNldCgkLnZhbHVlc1taXSxRKX0sZUs9KCQsWixRKT0+e3N3aXRjaCgkLnR5cGUudW5pdCl7Y2FzZSBzMC5ZRUFSX01PTlRIOnJldHVybiBqNCgkLFosUSk7Y2FzZSBzMC5EQVlfVElNRTpyZXR1cm4gQzQoJCxaLFEpO2Nhc2UgczAuTU9OVEhfREFZX05BTk86cmV0dXJuIFY0KCQsWixRKX19LEM0PSh7dmFsdWVzOiR9LFosUSk9PnskLnNldChRLnN1YmFycmF5KDAsMiksMipaKX0sajQ9KHt2YWx1ZXM6JH0sWixRKT0+eyRbWl09UVswXSoxMitRWzFdJTEyfSxWND0oe3ZhbHVlczokLHN0cmlkZTpafSxRLFgpPT57JC5zZXQoWC5zdWJhcnJheSgwLFopLFoqUSl9LFI0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LEU0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LHc0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LFM0PSh7dmFsdWVzOiR9LFosUSk9PnskW1pdPVF9LCQyPSgkLFosUSk9Pntzd2l0Y2goJC50eXBlLnVuaXQpe2Nhc2UgbC5TRUNPTkQ6cmV0dXJuIFI0KCQsWixRKTtjYXNlIGwuTUlMTElTRUNPTkQ6cmV0dXJuIEU0KCQsWixRKTtjYXNlIGwuTUlDUk9TRUNPTkQ6cmV0dXJuIHc0KCQsWixRKTtjYXNlIGwuTkFOT1NFQ09ORDpyZXR1cm4gUzQoJCxaLFEpfX0sTk89KCQsWixRKT0+e2xldHtzdHJpZGU6WH09JCxKPSQuY2hpbGRyZW5bMF0sVz1EWi5nZXRWaXNpdEZuKEopO2lmKEFycmF5LmlzQXJyYXkoUSkpZm9yKGxldCBZPS0xLEc9WipYOysrWTxYOylXKEosRytZLFFbWV0pO2Vsc2UgZm9yKGxldCBZPS0xLEc9WipYOysrWTxYOylXKEosRytZLFEuZ2V0KFkpKX0sRFo7dmFyIEVRPU8oKCk9PntaUSgpO1I4KCk7algoKTtTWSgpO3UkKCk7SCQoKTtLMD1jbGFzcyBLMCBleHRlbmRzIEgwe307SzAucHJvdG90eXBlLnZpc2l0Qm9vbD1OMCgkTyk7SzAucHJvdG90eXBlLnZpc2l0SW50PU4wKFZYKTtLMC5wcm90b3R5cGUudmlzaXRJbnQ4PU4wKFZYKTtLMC5wcm90b3R5cGUudmlzaXRJbnQxNj1OMChWWCk7SzAucHJvdG90eXBlLnZpc2l0SW50MzI9TjAoVlgpO0swLnByb3RvdHlwZS52aXNpdEludDY0PU4wKFZYKTtLMC5wcm90b3R5cGUudmlzaXRVaW50OD1OMChWWCk7SzAucHJvdG90eXBlLnZpc2l0VWludDE2PU4wKFZYKTtLMC5wcm90b3R5cGUudmlzaXRVaW50MzI9TjAoVlgpO0swLnByb3RvdHlwZS52aXNpdFVpbnQ2ND1OMChWWCk7SzAucHJvdG90eXBlLnZpc2l0RmxvYXQ9TjAoWk8pO0swLnByb3RvdHlwZS52aXNpdEZsb2F0MTY9TjAoTHEpO0swLnByb3RvdHlwZS52aXNpdEZsb2F0MzI9TjAob0spO0swLnByb3RvdHlwZS52aXNpdEZsb2F0NjQ9TjAob0spO0swLnByb3RvdHlwZS52aXNpdFV0Zjg9TjAoT3EpO0swLnByb3RvdHlwZS52aXNpdExhcmdlVXRmOD1OMChPcSk7SzAucHJvdG90eXBlLnZpc2l0VXRmOFZpZXc9TjAoSk8pO0swLnByb3RvdHlwZS52aXNpdEJpbmFyeT1OMChBcSk7SzAucHJvdG90eXBlLnZpc2l0TGFyZ2VCaW5hcnk9TjAoQXEpO0swLnByb3RvdHlwZS52aXNpdEJpbmFyeVZpZXc9TjAoWE8pO0swLnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUJpbmFyeT1OMChzSyk7SzAucHJvdG90eXBlLnZpc2l0RGF0ZT1OMChpSyk7SzAucHJvdG90eXBlLnZpc2l0RGF0ZURheT1OMChxNCk7SzAucHJvdG90eXBlLnZpc2l0RGF0ZU1pbGxpc2Vjb25kPU4wKFA0KTtLMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXA9TjAockspO0swLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcFNlY29uZD1OMChGNCk7SzAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9TjAoTjQpO0swLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pY3Jvc2Vjb25kPU4wKFU0KTtLMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBOYW5vc2Vjb25kPU4wKE00KTtLMC5wcm90b3R5cGUudmlzaXRUaW1lPU4wKGFLKTtLMC5wcm90b3R5cGUudmlzaXRUaW1lU2Vjb25kPU4wKEw0KTtLMC5wcm90b3R5cGUudmlzaXRUaW1lTWlsbGlzZWNvbmQ9TjAoQTQpO0swLnByb3RvdHlwZS52aXNpdFRpbWVNaWNyb3NlY29uZD1OMChENCk7SzAucHJvdG90eXBlLnZpc2l0VGltZU5hbm9zZWNvbmQ9TjAoTzQpO0swLnByb3RvdHlwZS52aXNpdERlY2ltYWw9TjAodEspO0swLnByb3RvdHlwZS52aXNpdExpc3Q9TjAoV08pO0swLnByb3RvdHlwZS52aXNpdFN0cnVjdD1OMChxTyk7SzAucHJvdG90eXBlLnZpc2l0VW5pb249TjAoUE8pO0swLnByb3RvdHlwZS52aXNpdERlbnNlVW5pb249TjAoQ3EpO0swLnByb3RvdHlwZS52aXNpdFNwYXJzZVVuaW9uPU4wKGpxKTtLMC5wcm90b3R5cGUudmlzaXREaWN0aW9uYXJ5PU4wKEZPKTtLMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbD1OMChlSyk7SzAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxEYXlUaW1lPU4wKEM0KTtLMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbFllYXJNb250aD1OMChqNCk7SzAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxNb250aERheU5hbm89TjAoVjQpO0swLnByb3RvdHlwZS52aXNpdER1cmF0aW9uPU4wKCQyKTtLMC5wcm90b3R5cGUudmlzaXREdXJhdGlvblNlY29uZD1OMChSNCk7SzAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWxsaXNlY29uZD1OMChFNCk7SzAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWNyb3NlY29uZD1OMCh3NCk7SzAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25OYW5vc2Vjb25kPU4wKFM0KTtLMC5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVMaXN0PU4wKE5PKTtLMC5wcm90b3R5cGUudmlzaXRNYXA9TjAoWU8pO0RaPW5ldyBLMH0pO2NsYXNzIFJxe2lzRXh0ZW5zaWJsZSgpe3JldHVybiExfWRlbGV0ZVByb3BlcnR5KCl7cmV0dXJuITF9cHJldmVudEV4dGVuc2lvbnMoKXtyZXR1cm4hMH1vd25LZXlzKCQpe3JldHVybiAkW0U4XS50eXBlLmNoaWxkcmVuLm1hcCgoWik9PloubmFtZSl9aGFzKCQsWil7cmV0dXJuICRbRThdLnR5cGUuY2hpbGRyZW4uc29tZSgoUSk9PlEubmFtZT09PVopfWdldE93blByb3BlcnR5RGVzY3JpcHRvcigkLFope2lmKCRbRThdLnR5cGUuY2hpbGRyZW4uc29tZSgoUSk9PlEubmFtZT09PVopKXJldHVybnt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07cmV0dXJufWdldCgkLFope2lmKFJlZmxlY3QuaGFzKCQsWikpcmV0dXJuICRbWl07bGV0IFE9JFtFOF0udHlwZS5jaGlsZHJlbi5maW5kSW5kZXgoKFgpPT5YLm5hbWU9PT1aKTtpZihRIT09LTEpe2xldCBYPXAkLnZpc2l0KCRbRThdLmNoaWxkcmVuW1FdLCRbWlddKTtyZXR1cm4gUmVmbGVjdC5zZXQoJCxaLFgpLFh9fXNldCgkLFosUSl7bGV0IFg9JFtFOF0udHlwZS5jaGlsZHJlbi5maW5kSW5kZXgoKEopPT5KLm5hbWU9PT1aKTtpZihYIT09LTEpcmV0dXJuIERaLnZpc2l0KCRbRThdLmNoaWxkcmVuW1hdLCRbWlddLFEpLFJlZmxlY3Quc2V0KCQsWixRKTtlbHNlIGlmKFJlZmxlY3QuaGFzKCQsWil8fHR5cGVvZiBaPT09InN5bWJvbCIpcmV0dXJuIFJlZmxlY3Quc2V0KCQsWixRKTtyZXR1cm4hMX19dmFyIEU4LFpXLHJKLFZxLFVPO3ZhciBaMj1PKCgpPT57YUooKTtFUSgpO0U4PVN5bWJvbC5mb3IoInBhcmVudCIpLFpXPVN5bWJvbC5mb3IoInJvd0luZGV4Iik7cko9Y2xhc3Mgckp7Y29uc3RydWN0b3IoJCxaKXtyZXR1cm4gdGhpc1tFOF09JCx0aGlzW1pXXT1aLG5ldyBQcm94eSh0aGlzLFVPKX10b0FycmF5KCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy50b0pTT04oKSl9dG9KU09OKCl7bGV0ICQ9dGhpc1taV10sWj10aGlzW0U4XSxRPVoudHlwZS5jaGlsZHJlbixYPXt9O2ZvcihsZXQgSj0tMSxXPVEubGVuZ3RoOysrSjxXOylYW1FbSl0ubmFtZV09cCQudmlzaXQoWi5jaGlsZHJlbltKXSwkKTtyZXR1cm4gWH10b1N0cmluZygpe3JldHVybmB7JHtbLi4udGhpc10ubWFwKChbJCxaXSk9PmAke0E4KCQpfTogJHtBOChaKX1gKS5qb2luKCIsICIpfX1gfVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXSgpe3JldHVybiB0aGlzLnRvU3RyaW5nKCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gbmV3IFZxKHRoaXNbRThdLHRoaXNbWlddKX19O1ZxPWNsYXNzIFZxe2NvbnN0cnVjdG9yKCQsWil7dGhpcy5jaGlsZEluZGV4PTAsdGhpcy5jaGlsZHJlbj0kLmNoaWxkcmVuLHRoaXMucm93SW5kZXg9Wix0aGlzLmNoaWxkRmllbGRzPSQudHlwZS5jaGlsZHJlbix0aGlzLm51bUNoaWxkcmVuPXRoaXMuY2hpbGRGaWVsZHMubGVuZ3RofVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9bmV4dCgpe2xldCAkPXRoaXMuY2hpbGRJbmRleDtpZigkPHRoaXMubnVtQ2hpbGRyZW4pcmV0dXJuIHRoaXMuY2hpbGRJbmRleD0kKzEse2RvbmU6ITEsdmFsdWU6W3RoaXMuY2hpbGRGaWVsZHNbJF0ubmFtZSxwJC52aXNpdCh0aGlzLmNoaWxkcmVuWyRdLHRoaXMucm93SW5kZXgpXX07cmV0dXJue2RvbmU6ITAsdmFsdWU6bnVsbH19fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhySi5wcm90b3R5cGUse1tTeW1ib2wudG9TdHJpbmdUYWddOntlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZToiUm93In0sW0U4XTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsdmFsdWU6bnVsbH0sW1pXXTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsdmFsdWU6LTF9fSk7VU89bmV3IFJxfSk7ZnVuY3Rpb24gejAoJCl7cmV0dXJuKFosUSk9PlouZ2V0VmFsaWQoUSk/JChaLFEpOm51bGx9dmFyIEowLE1PPSgkLFopPT44NjQwMDAwMCokW1pdLFFXPTE2LExPPTEyLEFPPSgkLFopPT5udWxsLEVxPSgkLFosUSk9PntpZihRKzE+PVoubGVuZ3RoKXJldHVybiBudWxsO2xldCBYPWMwKFpbUV0pLEo9YzAoWltRKzFdKTtyZXR1cm4gJC5zdWJhcnJheShYLEopfSxETz0oe29mZnNldDokLHZhbHVlczpafSxRKT0+e2xldCBYPSQrUTtyZXR1cm4oWltYPj4zXSYxPDxYJTgpIT09MH0sd3E9KHt2YWx1ZXM6JH0sWik9Pk1PKCQsWiksU3E9KHt2YWx1ZXM6JH0sWik9PmMwKCRbWl0pLHpKPSh7c3RyaWRlOiQsdmFsdWVzOlp9LFEpPT5aWyQqUV0sT089KHtzdHJpZGU6JCx2YWx1ZXM6Wn0sUSk9Pno0KFpbJCpRXSksQnE9KHt2YWx1ZXM6JH0sWik9PiRbWl0sQ089KHtzdHJpZGU6JCx2YWx1ZXM6Wn0sUSk9Plouc3ViYXJyYXkoJCpRLCQqKFErMSkpLGtxPSh7dmFsdWVzOiQsdmFsdWVPZmZzZXRzOlp9LFEpPT5FcSgkLFosUSksSXE9KCQsWik9Pnt2YXIgUTtsZXQgWD0kLnZhbHVlcztpZighWCl0aHJvdyBFcnJvcigiQmluYXJ5VmlldyBkYXRhIGlzIG1pc3NpbmcgdmlldyBidWZmZXIiKTtsZXQgSj1aKlFXLFc9SitRVztpZihKPDB8fFc+WC5sZW5ndGgpdGhyb3cgRXJyb3IoYEJpbmFyeVZpZXcgZGF0YSBidWZmZXIgaXMgdG9vIHNob3J0OiBleHBlY3RlZCAke1FXfSBieXRlcywgZ290ICR7TWF0aC5tYXgoMCxYLmxlbmd0aC1KKX1gKTtsZXQgWT1YLnN1YmFycmF5KEosVyk7aWYoWS5sZW5ndGg8UVcpdGhyb3cgRXJyb3IoYEJpbmFyeVZpZXcgZGF0YSBidWZmZXIgaXMgdG9vIHNob3J0OiBleHBlY3RlZCAke1FXfSBieXRlcywgZ290ICR7WS5sZW5ndGh9YCk7bGV0IEc9bmV3IERhdGFWaWV3KFguYnVmZmVyLFkuYnl0ZU9mZnNldCxRVyksSD1HLmdldEludDMyKDAsITApO2lmKEg8PTApcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2lmKEg8PUxPKXJldHVybiBZLnN1YmFycmF5KDQsNCtIKTtsZXQgej1HLmdldEludDMyKDgsITApLHE9Ry5nZXRJbnQzMigxMiwhMCksUD0oUT0kLnZhcmlhZGljQnVmZmVycyk9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRW3pdO2lmKCFQKXRocm93IEVycm9yKGBCaW5hcnlWaWV3IHZhcmlhZGljIGJ1ZmZlciAke3p9IGlzIG1pc3NpbmdgKTtyZXR1cm4gUC5zdWJhcnJheShxLHErSCl9LGpPPSgkLFopPT57cmV0dXJuIElxKCQsWil9LF9xPSh7dmFsdWVzOiQsdmFsdWVPZmZzZXRzOlp9LFEpPT57bGV0IFg9RXEoJCxaLFEpO3JldHVybiBYIT09bnVsbD9uNihYKTpudWxsfSxWTz0oJCxaKT0+e2xldCBRPUlxKCQsWik7cmV0dXJuIG42KFEpfSxSTz0oe3ZhbHVlczokfSxaKT0+JFtaXSxFTz0oe3R5cGU6JCx2YWx1ZXM6Wn0sUSk9PiQucHJlY2lzaW9uIT09SiQuSEFMRj9aW1FdOno0KFpbUV0pLHdPPSgkLFopPT4kLnR5cGUudW5pdD09PXIwLkRBWT93cSgkLFopOlNxKCQsWiksVHE9KHt2YWx1ZXM6JH0sWik9PjEwMDAqYzAoJFtaXSksZ3E9KHt2YWx1ZXM6JH0sWik9PmMwKCRbWl0pLHhxPSh7dmFsdWVzOiR9LFopPT51SygkW1pdLEJpZ0ludCgxMDAwKSksdnE9KHt2YWx1ZXM6JH0sWik9PnVLKCRbWl0sQmlnSW50KDFlNikpLFNPPSgkLFopPT57c3dpdGNoKCQudHlwZS51bml0KXtjYXNlIGwuU0VDT05EOnJldHVybiBUcSgkLFopO2Nhc2UgbC5NSUxMSVNFQ09ORDpyZXR1cm4gZ3EoJCxaKTtjYXNlIGwuTUlDUk9TRUNPTkQ6cmV0dXJuIHhxKCQsWik7Y2FzZSBsLk5BTk9TRUNPTkQ6cmV0dXJuIHZxKCQsWil9fSx5cT0oe3ZhbHVlczokfSxaKT0+JFtaXSxocT0oe3ZhbHVlczokfSxaKT0+JFtaXSxicT0oe3ZhbHVlczokfSxaKT0+JFtaXSxtcT0oe3ZhbHVlczokfSxaKT0+JFtaXSxCTz0oJCxaKT0+e3N3aXRjaCgkLnR5cGUudW5pdCl7Y2FzZSBsLlNFQ09ORDpyZXR1cm4geXEoJCxaKTtjYXNlIGwuTUlMTElTRUNPTkQ6cmV0dXJuIGhxKCQsWik7Y2FzZSBsLk1JQ1JPU0VDT05EOnJldHVybiBicSgkLFopO2Nhc2UgbC5OQU5PU0VDT05EOnJldHVybiBtcSgkLFopfX0sa089KHt2YWx1ZXM6JCxzdHJpZGU6Wn0sUSk9PlZZLmRlY2ltYWwoJC5zdWJhcnJheShaKlEsWiooUSsxKSkpLElPPSgkLFopPT57bGV0e3ZhbHVlT2Zmc2V0czpRLHN0cmlkZTpYLGNoaWxkcmVuOkp9PSQse1taKlhdOlcsW1oqWCsxXTpZfT1RLEg9SlswXS5zbGljZShXLFktVyk7cmV0dXJuIG5ldyByKFtIXSl9LF9PPSgkLFopPT57bGV0e3ZhbHVlT2Zmc2V0czpRLGNoaWxkcmVuOlh9PSQse1taXTpKLFtaKzFdOld9PVEsWT1YWzBdO3JldHVybiBuZXcgUlgoWS5zbGljZShKLFctSikpfSxUTz0oJCxaKT0+e3JldHVybiBuZXcgckooJCxaKX0sZ089KCQsWik9PntyZXR1cm4gJC50eXBlLm1vZGU9PT1tMC5EZW5zZT9mcSgkLFopOnVxKCQsWil9LGZxPSgkLFopPT57bGV0IFE9JC50eXBlLnR5cGVJZFRvQ2hpbGRJbmRleFskLnR5cGVJZHNbWl1dLFg9JC5jaGlsZHJlbltRXTtyZXR1cm4gcCQudmlzaXQoWCwkLnZhbHVlT2Zmc2V0c1taXSl9LHVxPSgkLFopPT57bGV0IFE9JC50eXBlLnR5cGVJZFRvQ2hpbGRJbmRleFskLnR5cGVJZHNbWl1dLFg9JC5jaGlsZHJlbltRXTtyZXR1cm4gcCQudmlzaXQoWCxaKX0seE89KCQsWik9Pnt2YXIgUTtyZXR1cm4oUT0kLmRpY3Rpb25hcnkpPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5nZXQoJC52YWx1ZXNbWl0pfSx2Tz0oJCxaKT0+JC50eXBlLnVuaXQ9PT1zMC5NT05USF9EQVlfTkFOTz9scSgkLFopOiQudHlwZS51bml0PT09czAuREFZX1RJTUU/cHEoJCxaKTpjcSgkLFopLHBxPSh7dmFsdWVzOiR9LFopPT4kLnN1YmFycmF5KDIqWiwyKihaKzEpKSxjcT0oe3ZhbHVlczokfSxaKT0+e2xldCBRPSRbWl0sWD1uZXcgSW50MzJBcnJheSgyKTtyZXR1cm4gWFswXT1NYXRoLnRydW5jKFEvMTIpLFhbMV09TWF0aC50cnVuYyhRJTEyKSxYfSxscT0oe3ZhbHVlczokfSxaKT0+JC5zdWJhcnJheSg0KlosNCooWisxKSksZHE9KHt2YWx1ZXM6JH0sWik9PiRbWl0sbnE9KHt2YWx1ZXM6JH0sWik9PiRbWl0sb3E9KHt2YWx1ZXM6JH0sWik9PiRbWl0sc3E9KHt2YWx1ZXM6JH0sWik9PiRbWl0seU89KCQsWik9Pntzd2l0Y2goJC50eXBlLnVuaXQpe2Nhc2UgbC5TRUNPTkQ6cmV0dXJuIGRxKCQsWik7Y2FzZSBsLk1JTExJU0VDT05EOnJldHVybiBucSgkLFopO2Nhc2UgbC5NSUNST1NFQ09ORDpyZXR1cm4gb3EoJCxaKTtjYXNlIGwuTkFOT1NFQ09ORDpyZXR1cm4gc3EoJCxaKX19LGhPPSgkLFopPT57bGV0e3N0cmlkZTpRLGNoaWxkcmVuOlh9PSQsVz1YWzBdLnNsaWNlKFoqUSxRKTtyZXR1cm4gbmV3IHIoW1ddKX0scCQ7dmFyIGFKPU8oKCk9PntkSygpO1pRKCk7UjgoKTtCNCgpO1oyKCk7algoKTtTWSgpO3UkKCk7SjA9Y2xhc3MgSjAgZXh0ZW5kcyBIMHt9O0owLnByb3RvdHlwZS52aXNpdE51bGw9ejAoQU8pO0owLnByb3RvdHlwZS52aXNpdEJvb2w9ejAoRE8pO0owLnByb3RvdHlwZS52aXNpdEludD16MChSTyk7SjAucHJvdG90eXBlLnZpc2l0SW50OD16MCh6Sik7SjAucHJvdG90eXBlLnZpc2l0SW50MTY9ejAoekopO0owLnByb3RvdHlwZS52aXNpdEludDMyPXowKHpKKTtKMC5wcm90b3R5cGUudmlzaXRJbnQ2ND16MChCcSk7SjAucHJvdG90eXBlLnZpc2l0VWludDg9ejAoekopO0owLnByb3RvdHlwZS52aXNpdFVpbnQxNj16MCh6Sik7SjAucHJvdG90eXBlLnZpc2l0VWludDMyPXowKHpKKTtKMC5wcm90b3R5cGUudmlzaXRVaW50NjQ9ejAoQnEpO0owLnByb3RvdHlwZS52aXNpdEZsb2F0PXowKEVPKTtKMC5wcm90b3R5cGUudmlzaXRGbG9hdDE2PXowKE9PKTtKMC5wcm90b3R5cGUudmlzaXRGbG9hdDMyPXowKHpKKTtKMC5wcm90b3R5cGUudmlzaXRGbG9hdDY0PXowKHpKKTtKMC5wcm90b3R5cGUudmlzaXRVdGY4PXowKF9xKTtKMC5wcm90b3R5cGUudmlzaXRMYXJnZVV0Zjg9ejAoX3EpO0owLnByb3RvdHlwZS52aXNpdFV0ZjhWaWV3PXowKFZPKTtKMC5wcm90b3R5cGUudmlzaXRCaW5hcnk9ejAoa3EpO0owLnByb3RvdHlwZS52aXNpdExhcmdlQmluYXJ5PXowKGtxKTtKMC5wcm90b3R5cGUudmlzaXRCaW5hcnlWaWV3PXowKGpPKTtKMC5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVCaW5hcnk9ejAoQ08pO0owLnByb3RvdHlwZS52aXNpdERhdGU9ejAod08pO0owLnByb3RvdHlwZS52aXNpdERhdGVEYXk9ejAod3EpO0owLnByb3RvdHlwZS52aXNpdERhdGVNaWxsaXNlY29uZD16MChTcSk7SjAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wPXowKFNPKTtKMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBTZWNvbmQ9ejAoVHEpO0owLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pbGxpc2Vjb25kPXowKGdxKTtKMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBNaWNyb3NlY29uZD16MCh4cSk7SjAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTmFub3NlY29uZD16MCh2cSk7SjAucHJvdG90eXBlLnZpc2l0VGltZT16MChCTyk7SjAucHJvdG90eXBlLnZpc2l0VGltZVNlY29uZD16MCh5cSk7SjAucHJvdG90eXBlLnZpc2l0VGltZU1pbGxpc2Vjb25kPXowKGhxKTtKMC5wcm90b3R5cGUudmlzaXRUaW1lTWljcm9zZWNvbmQ9ejAoYnEpO0owLnByb3RvdHlwZS52aXNpdFRpbWVOYW5vc2Vjb25kPXowKG1xKTtKMC5wcm90b3R5cGUudmlzaXREZWNpbWFsPXowKGtPKTtKMC5wcm90b3R5cGUudmlzaXRMaXN0PXowKElPKTtKMC5wcm90b3R5cGUudmlzaXRTdHJ1Y3Q9ejAoVE8pO0owLnByb3RvdHlwZS52aXNpdFVuaW9uPXowKGdPKTtKMC5wcm90b3R5cGUudmlzaXREZW5zZVVuaW9uPXowKGZxKTtKMC5wcm90b3R5cGUudmlzaXRTcGFyc2VVbmlvbj16MCh1cSk7SjAucHJvdG90eXBlLnZpc2l0RGljdGlvbmFyeT16MCh4Tyk7SjAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWw9ejAodk8pO0owLnByb3RvdHlwZS52aXNpdEludGVydmFsRGF5VGltZT16MChwcSk7SjAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxZZWFyTW9udGg9ejAoY3EpO0owLnByb3RvdHlwZS52aXNpdEludGVydmFsTW9udGhEYXlOYW5vPXowKGxxKTtKMC5wcm90b3R5cGUudmlzaXREdXJhdGlvbj16MCh5Tyk7SjAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25TZWNvbmQ9ejAoZHEpO0owLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTWlsbGlzZWNvbmQ9ejAobnEpO0owLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTWljcm9zZWNvbmQ9ejAob3EpO0owLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTmFub3NlY29uZD16MChzcSk7SjAucHJvdG90eXBlLnZpc2l0Rml4ZWRTaXplTGlzdD16MChoTyk7SjAucHJvdG90eXBlLnZpc2l0TWFwPXowKF9PKTtwJD1uZXcgSjB9KTtjbGFzcyBycXtpc0V4dGVuc2libGUoKXtyZXR1cm4hMX1kZWxldGVQcm9wZXJ0eSgpe3JldHVybiExfXByZXZlbnRFeHRlbnNpb25zKCl7cmV0dXJuITB9b3duS2V5cygkKXtyZXR1cm4gJFtYV119aGFzKCQsWil7cmV0dXJuICRbWFddLmluY2x1ZGVzKFopfWdldE93blByb3BlcnR5RGVzY3JpcHRvcigkLFope2lmKCRbWFddLmluZGV4T2YoWikhPT0tMSlyZXR1cm57d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O3JldHVybn1nZXQoJCxaKXtpZihSZWZsZWN0LmhhcygkLFopKXJldHVybiAkW1pdO2xldCBRPSRbWFddLmluZGV4T2YoWik7aWYoUSE9PS0xKXtsZXQgWD1wJC52aXNpdChSZWZsZWN0LmdldCgkLEpXKSxRKTtyZXR1cm4gUmVmbGVjdC5zZXQoJCxaLFgpLFh9fXNldCgkLFosUSl7bGV0IFg9JFtYV10uaW5kZXhPZihaKTtpZihYIT09LTEpcmV0dXJuIERaLnZpc2l0KFJlZmxlY3QuZ2V0KCQsSlcpLFgsUSksUmVmbGVjdC5zZXQoJCxaLFEpO2Vsc2UgaWYoUmVmbGVjdC5oYXMoJCxaKSlyZXR1cm4gUmVmbGVjdC5zZXQoJCxaLFEpO3JldHVybiExfX12YXIgcUosSlcsWFcsUTIsUlgsaXE7dmFyIEI0PU8oKCk9PntaUSgpO2FKKCk7RVEoKTtxSj1TeW1ib2wuZm9yKCJrZXlzIiksSlc9U3ltYm9sLmZvcigidmFscyIpLFhXPVN5bWJvbC5mb3IoImtLZXlzQXNTdHJpbmdzIiksUTI9U3ltYm9sLmZvcigiX2tLZXlzQXNTdHJpbmdzIik7Ulg9Y2xhc3MgUlh7Y29uc3RydWN0b3IoJCl7cmV0dXJuIHRoaXNbcUpdPW5ldyByKFskLmNoaWxkcmVuWzBdXSkubWVtb2l6ZSgpLHRoaXNbSlddPSQuY2hpbGRyZW5bMV0sbmV3IFByb3h5KHRoaXMsbmV3IHJxKX1nZXRbWFddKCl7cmV0dXJuIHRoaXNbUTJdfHwodGhpc1tRMl09QXJyYXkuZnJvbSh0aGlzW3FKXS50b0FycmF5KCksU3RyaW5nKSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gbmV3IGlxKHRoaXNbcUpdLHRoaXNbSlddKX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzW3FKXS5sZW5ndGh9dG9BcnJheSgpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMudG9KU09OKCkpfXRvSlNPTigpe2xldCAkPXRoaXNbcUpdLFo9dGhpc1tKV10sUT17fTtmb3IobGV0IFg9LTEsSj0kLmxlbmd0aDsrK1g8SjspUVskLmdldChYKV09cCQudmlzaXQoWixYKTtyZXR1cm4gUX10b1N0cmluZygpe3JldHVybmB7JHtbLi4udGhpc10ubWFwKChbJCxaXSk9PmAke0E4KCQpfTogJHtBOChaKX1gKS5qb2luKCIsICIpfX1gfVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXSgpe3JldHVybiB0aGlzLnRvU3RyaW5nKCl9fTtpcT1jbGFzcyBpcXtjb25zdHJ1Y3RvcigkLFope3RoaXMua2V5cz0kLHRoaXMudmFscz1aLHRoaXMua2V5SW5kZXg9MCx0aGlzLm51bUtleXM9JC5sZW5ndGh9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc31uZXh0KCl7bGV0ICQ9dGhpcy5rZXlJbmRleDtpZigkPT09dGhpcy5udW1LZXlzKXJldHVybntkb25lOiEwLHZhbHVlOm51bGx9O3JldHVybiB0aGlzLmtleUluZGV4Kysse2RvbmU6ITEsdmFsdWU6W3RoaXMua2V5cy5nZXQoJCkscCQudmlzaXQodGhpcy52YWxzLCQpXX19fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhSWC5wcm90b3R5cGUse1tTeW1ib2wudG9TdHJpbmdUYWddOntlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZToiUm93In0sW3FKXTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsdmFsdWU6bnVsbH0sW0pXXTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsdmFsdWU6bnVsbH0sW1EyXTp7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsdmFsdWU6bnVsbH19KX0pO3ZhciBYMj17fTtQOChYMix7d3JhcEluZGV4OigpPT50SixjcmVhdGVFbGVtZW50Q29tcGFyYXRvcjooKT0+UEosY2xhbXBSYW5nZTooKT0+Qll9KTtmdW5jdGlvbiBCWSgkLFosUSxYKXtsZXR7bGVuZ3RoOko9MH09JCxXPXR5cGVvZiBaIT09Im51bWJlciI/MDpaLFk9dHlwZW9mIFEhPT0ibnVtYmVyIj9KOlE7cmV0dXJuIFc8MCYmKFc9KFclSitKKSVKKSxZPDAmJihZPShZJUorSiklSiksWTxXJiYoYXE9VyxXPVksWT1hcSksWT5KJiYoWT1KKSxYP1goJCxXLFkpOltXLFldfWZ1bmN0aW9uIFBKKCQpe2lmKHR5cGVvZiAkIT09Im9iamVjdCJ8fCQ9PT1udWxsKXtpZih0cSgkKSlyZXR1cm4gdHE7cmV0dXJuKFEpPT5RPT09JH1pZigkIGluc3RhbmNlb2YgRGF0ZSl7bGV0IFE9JC52YWx1ZU9mKCk7cmV0dXJuKFgpPT5YIGluc3RhbmNlb2YgRGF0ZT9YLnZhbHVlT2YoKT09PVE6ITF9aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCQpKXJldHVybihRKT0+UT96SygkLFEpOiExO2lmKCQgaW5zdGFuY2VvZiBNYXApcmV0dXJuIG1PKCQpO2lmKEFycmF5LmlzQXJyYXkoJCkpcmV0dXJuIGJPKCQpO2lmKCQgaW5zdGFuY2VvZiByKXJldHVybiBmTygkKTtyZXR1cm4gdU8oJCwhMCl9ZnVuY3Rpb24gYk8oJCl7bGV0IFo9W107Zm9yKGxldCBRPS0xLFg9JC5sZW5ndGg7KytRPFg7KVpbUV09UEooJFtRXSk7cmV0dXJuIGs0KFopfWZ1bmN0aW9uIG1PKCQpe2xldCBaPS0xLFE9W107Zm9yKGxldCBYIG9mICQudmFsdWVzKCkpUVsrK1pdPVBKKFgpO3JldHVybiBrNChRKX1mdW5jdGlvbiBmTygkKXtsZXQgWj1bXTtmb3IobGV0IFE9LTEsWD0kLmxlbmd0aDsrK1E8WDspWltRXT1QSigkLmdldChRKSk7cmV0dXJuIGs0KFopfWZ1bmN0aW9uIHVPKCQsWj0hMSl7bGV0IFE9T2JqZWN0LmtleXMoJCk7aWYoIVomJlEubGVuZ3RoPT09MClyZXR1cm4oKT0+ITE7bGV0IFg9W107Zm9yKGxldCBKPS0xLFc9US5sZW5ndGg7KytKPFc7KVhbSl09UEooJFtRW0pdXSk7cmV0dXJuIGs0KFgsUSl9ZnVuY3Rpb24gazQoJCxaKXtyZXR1cm4oUSk9PntpZighUXx8dHlwZW9mIFEhPT0ib2JqZWN0IilyZXR1cm4hMTtzd2l0Y2goUS5jb25zdHJ1Y3Rvcil7Y2FzZSBBcnJheTpyZXR1cm4gcE8oJCxRKTtjYXNlIE1hcDpyZXR1cm4gZXEoJCxRLFEua2V5cygpKTtjYXNlIFJYOmNhc2Ugcko6Y2FzZSBPYmplY3Q6Y2FzZSB2b2lkIDA6cmV0dXJuIGVxKCQsUSxafHxPYmplY3Qua2V5cyhRKSl9cmV0dXJuIFEgaW5zdGFuY2VvZiByP2NPKCQsUSk6ITF9fWZ1bmN0aW9uIHBPKCQsWil7bGV0IFE9JC5sZW5ndGg7aWYoWi5sZW5ndGghPT1RKXJldHVybiExO2ZvcihsZXQgWD0tMTsrK1g8UTspaWYoISRbWF0oWltYXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gY08oJCxaKXtsZXQgUT0kLmxlbmd0aDtpZihaLmxlbmd0aCE9PVEpcmV0dXJuITE7Zm9yKGxldCBYPS0xOysrWDxROylpZighJFtYXShaLmdldChYKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZXEoJCxaLFEpe2xldCBYPVFbU3ltYm9sLml0ZXJhdG9yXSgpLEo9WiBpbnN0YW5jZW9mIE1hcD9aLmtleXMoKTpPYmplY3Qua2V5cyhaKVtTeW1ib2wuaXRlcmF0b3JdKCksVz1aIGluc3RhbmNlb2YgTWFwP1oudmFsdWVzKCk6T2JqZWN0LnZhbHVlcyhaKVtTeW1ib2wuaXRlcmF0b3JdKCksWT0wLEc9JC5sZW5ndGgsSD1XLm5leHQoKSx6PVgubmV4dCgpLHE9Si5uZXh0KCk7Zm9yKDtZPEcmJiF6LmRvbmUmJiFxLmRvbmUmJiFILmRvbmU7KytZLHo9WC5uZXh0KCkscT1KLm5leHQoKSxIPVcubmV4dCgpKWlmKHoudmFsdWUhPT1xLnZhbHVlfHwhJFtZXShILnZhbHVlKSlicmVhaztpZihZPT09RyYmei5kb25lJiZxLmRvbmUmJkguZG9uZSlyZXR1cm4hMDtyZXR1cm4gWC5yZXR1cm4mJlgucmV0dXJuKCksSi5yZXR1cm4mJkoucmV0dXJuKCksVy5yZXR1cm4mJlcucmV0dXJuKCksITF9dmFyIGFxLHRKPSgkLFopPT4kPDA/WiskOiQsdHE9KCQpPT4kIT09JDt2YXIgV1c9TygoKT0+e1pRKCk7QjQoKTtaMigpO3MkKCl9KTt2YXIgSjI9e307UDgoSjIse3RydW5jYXRlQml0bWFwOigpPT5lSixzZXRCb29sOigpPT5sTyxwb3BjbnRfdWludDMyOigpPT5JNCxwb3BjbnRfYml0X3JhbmdlOigpPT5rWSxwb3BjbnRfYXJyYXk6KCk9PlpQLHBhY2tCb29sczooKT0+JDYsZ2V0Qm9vbDooKT0+XzQsZ2V0Qml0OigpPT4kUCxCaXRJdGVyYXRvcjooKT0+WVd9KTtmdW5jdGlvbiBfNCgkLFosUSxYKXtyZXR1cm4oUSYxPDxYKSE9PTB9ZnVuY3Rpb24gJFAoJCxaLFEsWCl7cmV0dXJuKFEmMTw8WCk+Plh9ZnVuY3Rpb24gbE8oJCxaLFEpe3JldHVybiBRPyEhKCRbWj4+M118PTE8PFolOCl8fCEwOiEoJFtaPj4zXSY9figxPDxaJTgpKSYmITF9ZnVuY3Rpb24gZUooJCxaLFEpe2xldCBYPVEuYnl0ZUxlbmd0aCs3Ji04O2lmKCQ+MHx8US5ieXRlTGVuZ3RoPFgpe2xldCBKPW5ldyBVaW50OEFycmF5KFgpO3JldHVybiBKLnNldCgkJTg9PT0wP1Euc3ViYXJyYXkoJD4+Myk6JDYobmV3IFlXKFEsJCxaLG51bGwsXzQpKS5zdWJhcnJheSgwLFgpKSxKfXJldHVybiBRfWZ1bmN0aW9uICQ2KCQpe2xldCBaPVtdLFE9MCxYPTAsSj0wO2ZvcihsZXQgWSBvZiAkKWlmKFkmJihKfD0xPDxYKSwrK1g9PT04KVpbUSsrXT1KLEo9WD0wO2lmKFE9PT0wfHxYPjApWltRKytdPUo7bGV0IFc9bmV3IFVpbnQ4QXJyYXkoWi5sZW5ndGgrNyYtOCk7cmV0dXJuIFcuc2V0KFopLFd9ZnVuY3Rpb24ga1koJCxaLFEpe2lmKFEtWjw9MClyZXR1cm4gMDtpZihRLVo8OCl7bGV0IFc9MDtmb3IobGV0IFkgb2YgbmV3IFlXKCQsWixRLVosJCwkUCkpVys9WTtyZXR1cm4gV31sZXQgWD1RPj4zPDwzLEo9WisoWiU4PT09MD8wOjgtWiU4KTtyZXR1cm4ga1koJCxaLEopK2tZKCQsWCxRKStaUCgkLEo+PjMsWC1KPj4zKX1mdW5jdGlvbiBaUCgkLFosUSl7bGV0IFg9MCxKPU1hdGgudHJ1bmMoWiksVz1uZXcgRGF0YVZpZXcoJC5idWZmZXIsJC5ieXRlT2Zmc2V0LCQuYnl0ZUxlbmd0aCksWT1RPT09dm9pZCAwPyQuYnl0ZUxlbmd0aDpKK1E7d2hpbGUoWS1KPj00KVgrPUk0KFcuZ2V0VWludDMyKEopKSxKKz00O3doaWxlKFktSj49MilYKz1JNChXLmdldFVpbnQxNihKKSksSis9Mjt3aGlsZShZLUo+PTEpWCs9STQoVy5nZXRVaW50OChKKSksSis9MTtyZXR1cm4gWH1mdW5jdGlvbiBJNCgkKXtsZXQgWj1NYXRoLnRydW5jKCQpO3JldHVybiBaPVotKFo+Pj4xJjE0MzE2NTU3NjUpLFo9KFomODU4OTkzNDU5KSsoWj4+PjImODU4OTkzNDU5KSwoWisoWj4+PjQpJjI1MjY0NTEzNSkqMTY4NDMwMDk+Pj4yNH12YXIgWVc7dmFyIEdXPU8oKCk9PntZVz1jbGFzcyBZV3tjb25zdHJ1Y3RvcigkLFosUSxYLEope3RoaXMuYnl0ZXM9JCx0aGlzLmxlbmd0aD1RLHRoaXMuY29udGV4dD1YLHRoaXMuZ2V0PUosdGhpcy5iaXQ9WiU4LHRoaXMuYnl0ZUluZGV4PVo+PjMsdGhpcy5ieXRlPSRbdGhpcy5ieXRlSW5kZXgrK10sdGhpcy5pbmRleD0wfW5leHQoKXtpZih0aGlzLmluZGV4PHRoaXMubGVuZ3RoKXtpZih0aGlzLmJpdD09PTgpdGhpcy5iaXQ9MCx0aGlzLmJ5dGU9dGhpcy5ieXRlc1t0aGlzLmJ5dGVJbmRleCsrXTtyZXR1cm57dmFsdWU6dGhpcy5nZXQodGhpcy5jb250ZXh0LHRoaXMuaW5kZXgrKyx0aGlzLmJ5dGUsdGhpcy5iaXQrKyl9fXJldHVybntkb25lOiEwLHZhbHVlOm51bGx9fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX0pO2NsYXNzIEEwe3N0YXRpYyBpc0RhdGEoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokW1FQXSk9PT0hMH1nZXQgdHlwZUlkKCl7cmV0dXJuIHRoaXMudHlwZS50eXBlSWR9Z2V0IEFycmF5VHlwZSgpe3JldHVybiB0aGlzLnR5cGUuQXJyYXlUeXBlfWdldCBidWZmZXJzKCl7cmV0dXJuW3RoaXMudmFsdWVPZmZzZXRzLHRoaXMudmFsdWVzLHRoaXMubnVsbEJpdG1hcCx0aGlzLnR5cGVJZHNdfWdldCBudWxsYWJsZSgpe2lmKHRoaXMuX251bGxDb3VudCE9PTApe2xldHt0eXBlOiR9PXRoaXM7aWYoay5pc1NwYXJzZVVuaW9uKCQpKXJldHVybiB0aGlzLmNoaWxkcmVuLnNvbWUoKFopPT5aLm51bGxhYmxlKTtlbHNlIGlmKGsuaXNEZW5zZVVuaW9uKCQpKXJldHVybiB0aGlzLmNoaWxkcmVuLnNvbWUoKFopPT5aLm51bGxhYmxlKTtyZXR1cm4gdGhpcy5udWxsQml0bWFwJiZ0aGlzLm51bGxCaXRtYXAuYnl0ZUxlbmd0aD4wfXJldHVybiEwfWdldCBieXRlTGVuZ3RoKCl7bGV0ICQ9MCx7dmFsdWVPZmZzZXRzOlosdmFsdWVzOlEsbnVsbEJpdG1hcDpYLHR5cGVJZHM6Sn09dGhpcztyZXR1cm4gWiYmKCQrPVouYnl0ZUxlbmd0aCksUSYmKCQrPVEuYnl0ZUxlbmd0aCksWCYmKCQrPVguYnl0ZUxlbmd0aCksSiYmKCQrPUouYnl0ZUxlbmd0aCksJCs9dGhpcy52YXJpYWRpY0J1ZmZlcnMucmVkdWNlKChXLFkpPT57dmFyIEc7cmV0dXJuIFcrKChHPVk9PT1udWxsfHxZPT09dm9pZCAwP3ZvaWQgMDpZLmJ5dGVMZW5ndGgpIT09bnVsbCYmRyE9PXZvaWQgMD9HOjApfSwwKSx0aGlzLmNoaWxkcmVuLnJlZHVjZSgoVyxZKT0+VytZLmJ5dGVMZW5ndGgsJCl9Z2V0IG51bGxDb3VudCgpe2lmKGsuaXNVbmlvbih0aGlzLnR5cGUpKXJldHVybiB0aGlzLmNoaWxkcmVuLnJlZHVjZSgoUSxYKT0+UStYLm51bGxDb3VudCwwKTtsZXQgJD10aGlzLl9udWxsQ291bnQsWjtpZigkPD1kTyYmKFo9dGhpcy5udWxsQml0bWFwKSl0aGlzLl9udWxsQ291bnQ9JD1aLmxlbmd0aD09PTA/MDp0aGlzLmxlbmd0aC1rWShaLHRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0K3RoaXMubGVuZ3RoKTtyZXR1cm4gJH1jb25zdHJ1Y3RvcigkLFosUSxYLEosVz1bXSxZLEc9W10pe3ZhciBIO3RoaXMudHlwZT0kLHRoaXMuY2hpbGRyZW49Vyx0aGlzLmRpY3Rpb25hcnk9WSx0aGlzLm9mZnNldD1NYXRoLmZsb29yKE1hdGgubWF4KFp8fDAsMCkpLHRoaXMubGVuZ3RoPU1hdGguZmxvb3IoTWF0aC5tYXgoUXx8MCwwKSksdGhpcy5fbnVsbENvdW50PU1hdGguZmxvb3IoTWF0aC5tYXgoWHx8MCwtMSkpO2xldCB6O2lmKEogaW5zdGFuY2VvZiBBMCl0aGlzLnN0cmlkZT1KLnN0cmlkZSx0aGlzLnZhbHVlcz1KLnZhbHVlcyx0aGlzLnR5cGVJZHM9Si50eXBlSWRzLHRoaXMubnVsbEJpdG1hcD1KLm51bGxCaXRtYXAsdGhpcy52YWx1ZU9mZnNldHM9Si52YWx1ZU9mZnNldHMsdGhpcy52YXJpYWRpY0J1ZmZlcnM9Si52YXJpYWRpY0J1ZmZlcnM7ZWxzZXtpZih0aGlzLnN0cmlkZT1SUSgkKSxKKSh6PUpbMF0pJiYodGhpcy52YWx1ZU9mZnNldHM9eiksKHo9SlsxXSkmJih0aGlzLnZhbHVlcz16KSwoej1KWzJdKSYmKHRoaXMubnVsbEJpdG1hcD16KSwoej1KWzNdKSYmKHRoaXMudHlwZUlkcz16KTt0aGlzLnZhcmlhZGljQnVmZmVycz1HfShIPXRoaXMudmFyaWFkaWNCdWZmZXJzKSE9PW51bGwmJkghPT12b2lkIDB8fCh0aGlzLnZhcmlhZGljQnVmZmVycz1bXSl9Z2V0VmFsaWQoJCl7bGV0e3R5cGU6Wn09dGhpcztpZihrLmlzVW5pb24oWikpe2xldCBRPVosWD10aGlzLnR5cGVJZHNbJF0sSj1RLnR5cGVJZFRvQ2hpbGRJbmRleFtYXSxXPXRoaXMuY2hpbGRyZW5bSl0sWT10aGlzLnZhbHVlT2Zmc2V0cyxHPVEubW9kZT09PW0wLkRlbnNlJiZZP051bWJlcihZWyRdKTokO3JldHVybiBXLmdldFZhbGlkKEcpfWlmKHRoaXMubnVsbGFibGUmJnRoaXMubnVsbENvdW50PjApe2xldCBRPXRoaXMub2Zmc2V0KyQ7cmV0dXJuKHRoaXMubnVsbEJpdG1hcFtRPj4zXSYxPDxRJTgpIT09MH1yZXR1cm4hMH1zZXRWYWxpZCgkLFope2xldCBRLHt0eXBlOlh9PXRoaXM7aWYoay5pc1VuaW9uKFgpKXtsZXQgSj1YLFc9dGhpcy50eXBlSWRzWyRdLFk9Si50eXBlSWRUb0NoaWxkSW5kZXhbV10sRz10aGlzLmNoaWxkcmVuW1ldLEg9dGhpcy52YWx1ZU9mZnNldHMsej1KLm1vZGU9PT1tMC5EZW5zZSYmSD9OdW1iZXIoSFskXSk6JDtRPUcuZ2V0VmFsaWQoeiksRy5zZXRWYWxpZCh6LFopfWVsc2V7bGV0e251bGxCaXRtYXA6Sn09dGhpcyx7b2Zmc2V0OlcsbGVuZ3RoOll9PXRoaXMsRz1XKyQsSD0xPDxHJTgsej1HPj4zO2lmKCFKfHxKLmJ5dGVMZW5ndGg8PXopaWYoSj1uZXcgVWludDhBcnJheSgoVytZKzYzJi02NCk+PjMpLmZpbGwoMjU1KSx0aGlzLm51bGxDb3VudD4wKUouc2V0KGVKKFcsWSx0aGlzLm51bGxCaXRtYXApLDApLE9iamVjdC5hc3NpZ24odGhpcyx7bnVsbEJpdG1hcDpKfSk7ZWxzZSBPYmplY3QuYXNzaWduKHRoaXMse251bGxCaXRtYXA6SixfbnVsbENvdW50OjB9KTtsZXQgcT1KW3pdO1E9KHEmSCkhPT0wLEpbel09Wj9xfEg6cSZ+SH1pZihRIT09ISFaKXRoaXMuX251bGxDb3VudD10aGlzLm51bGxDb3VudCsoWj8tMToxKTtyZXR1cm4gWn1jbG9uZSgkPXRoaXMudHlwZSxaPXRoaXMub2Zmc2V0LFE9dGhpcy5sZW5ndGgsWD10aGlzLl9udWxsQ291bnQsSj10aGlzLFc9dGhpcy5jaGlsZHJlbixZPXRoaXMudmFyaWFkaWNCdWZmZXJzKXtyZXR1cm4gbmV3IEEwKCQsWixRLFgsSixXLHRoaXMuZGljdGlvbmFyeSxZKX1zbGljZSgkLFope2xldHtzdHJpZGU6USx0eXBlSWQ6WCxjaGlsZHJlbjpKfT10aGlzLFc9Kyh0aGlzLl9udWxsQ291bnQ9PT0wKS0xLFk9WD09PTE2P1E6MSxHPXRoaXMuX3NsaWNlQnVmZmVycygkLFosUSxYKTtyZXR1cm4gdGhpcy5jbG9uZSh0aGlzLnR5cGUsdGhpcy5vZmZzZXQrJCxaLFcsRyxKLmxlbmd0aD09PTB8fHRoaXMudmFsdWVPZmZzZXRzP0o6dGhpcy5fc2xpY2VDaGlsZHJlbihKLFkqJCxZKlopLHRoaXMudmFyaWFkaWNCdWZmZXJzKX1fY2hhbmdlTGVuZ3RoQW5kQmFja2ZpbGxOdWxsQml0bWFwKCQpe2lmKHRoaXMudHlwZUlkPT09QS5OdWxsKXJldHVybiB0aGlzLmNsb25lKHRoaXMudHlwZSwwLCQsMCx0aGlzLmJ1ZmZlcnMsdGhpcy5jaGlsZHJlbix0aGlzLnZhcmlhZGljQnVmZmVycyk7bGV0e2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLFg9bmV3IFVpbnQ4QXJyYXkoKCQrNjMmLTY0KT4+MykuZmlsbCgyNTUsMCxaPj4zKTtpZihYW1o+PjNdPSgxPDxaLShaJi04KSktMSxRPjApWC5zZXQoZUoodGhpcy5vZmZzZXQsWix0aGlzLm51bGxCaXRtYXApLDApO2xldCBKPXRoaXMuYnVmZmVycztyZXR1cm4gSlthWi5WQUxJRElUWV09WCx0aGlzLmNsb25lKHRoaXMudHlwZSwwLCQsUSsoJC1aKSxKLHRoaXMuY2hpbGRyZW4sdGhpcy52YXJpYWRpY0J1ZmZlcnMpfV9zbGljZUJ1ZmZlcnMoJCxaLFEsWCl7bGV0IEose2J1ZmZlcnM6V309dGhpcztpZigoSj1XW2FaLlRZUEVdKSYmKFdbYVouVFlQRV09Si5zdWJhcnJheSgkLCQrWikpLGsuaXNCaW5hcnlWaWV3KHRoaXMudHlwZSl8fGsuaXNVdGY4Vmlldyh0aGlzLnR5cGUpKXtsZXQgWT1SMC5FTEVNRU5UX1dJRFRIOyhKPVdbYVouREFUQV0pJiYoV1thWi5EQVRBXT1KLnN1YmFycmF5KCQqWSwoJCtaKSpZKSl9ZWxzZShKPVdbYVouT0ZGU0VUXSkmJihXW2FaLk9GRlNFVF09Si5zdWJhcnJheSgkLCQrWisxKSl8fChKPVdbYVouREFUQV0pJiYoV1thWi5EQVRBXT1YPT09Nj9KOkouc3ViYXJyYXkoUSokLFEqKCQrWikpKTtyZXR1cm4gV31fc2xpY2VDaGlsZHJlbigkLFosUSl7cmV0dXJuICQubWFwKChYKT0+WC5zbGljZShaLFEpKX19ZnVuY3Rpb24gSSgkKXtyZXR1cm4gbk8udmlzaXQoJCl9dmFyIGRPPS0xLFFQLElZLG5PO3ZhciAkOD1PKCgpPT57WlEoKTt1JCgpO0gkKCk7R1coKTtIJCgpO1I4KCk7cyQoKTtRUD1TeW1ib2wuZm9yKCJhcGFjaGUtYXJyb3cvRGF0YSIpO0EwLnByb3RvdHlwZS5jaGlsZHJlbj1PYmplY3QuZnJlZXplKFtdKTtBMC5wcm90b3R5cGVbUVBdPSEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBMCxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFope3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWil8fHRoaXM9PT1BMCYmQTAuaXNEYXRhKFopfX0pO0lZPWNsYXNzIElZIGV4dGVuZHMgSDB7dmlzaXQoJCl7cmV0dXJuIHRoaXMuZ2V0VmlzaXRGbigkLnR5cGUpLmNhbGwodGhpcywkKX12aXNpdE51bGwoJCl7bGV0e1sidHlwZSJdOlosWyJvZmZzZXQiXTpRPTAsWyJsZW5ndGgiXTpYPTB9PSQ7cmV0dXJuIG5ldyBBMChaLFEsWCxYKX12aXNpdEJvb2woJCl7bGV0e1sidHlwZSJdOlosWyJvZmZzZXQiXTpRPTB9PSQsWD0kMCgkLm51bGxCaXRtYXApLEo9UzAoWi5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpXPUoubGVuZ3RoPj4zLFsibnVsbENvdW50Il06WT0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxXLFksW3ZvaWQgMCxKLFhdKX12aXNpdEludCgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MH09JCxYPSQwKCQubnVsbEJpdG1hcCksSj1TMChaLkFycmF5VHlwZSwkLmRhdGEpLHtbImxlbmd0aCJdOlc9Si5sZW5ndGgsWyJudWxsQ291bnQiXTpZPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgQTAoWixRLFcsWSxbdm9pZCAwLEosWF0pfXZpc2l0RmxvYXQoJCl7bGV0e1sidHlwZSJdOlosWyJvZmZzZXQiXTpRPTB9PSQsWD0kMCgkLm51bGxCaXRtYXApLEo9UzAoWi5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpXPUoubGVuZ3RoLFsibnVsbENvdW50Il06WT0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxXLFksW3ZvaWQgMCxKLFhdKX12aXNpdFV0ZjgoJCl7bGV0e1sidHlwZSJdOlosWyJvZmZzZXQiXTpRPTB9PSQsWD0kMCgkLmRhdGEpLEo9JDAoJC5udWxsQml0bWFwKSxXPW9KKCQudmFsdWVPZmZzZXRzKSx7WyJsZW5ndGgiXTpZPVcubGVuZ3RoLTEsWyJudWxsQ291bnQiXTpHPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgQTAoWixRLFksRyxbVyxYLEpdKX12aXNpdFV0ZjhWaWV3KCQpe3ZhciBaO2xldHtbInR5cGUiXTpRLFsib2Zmc2V0Il06WD0wfT0kLEo9UzAoUS5BcnJheVR5cGUsJC52aWV3cyksVz0kMCgkLm51bGxCaXRtYXApLFk9KCQudmFyaWFkaWNCdWZmZXJzfHxbXSkubWFwKCh6KT0+JDAoeikpLEc9KFo9JC5sZW5ndGgpIT09bnVsbCYmWiE9PXZvaWQgMD9aOk1hdGgudHJ1bmMoSi5sZW5ndGgvT1EuRUxFTUVOVF9XSURUSCksSD0kLm51bGxCaXRtYXA/LTE6MDtyZXR1cm4gbmV3IEEwKFEsWCxHLEgsW3ZvaWQgMCxKLFddLFtdLHZvaWQgMCxZKX12aXNpdExhcmdlVXRmOCgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MH09JCxYPSQwKCQuZGF0YSksSj0kMCgkLm51bGxCaXRtYXApLFc9WDQoJC52YWx1ZU9mZnNldHMpLHtbImxlbmd0aCJdOlk9Vy5sZW5ndGgtMSxbIm51bGxDb3VudCJdOkc9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBBMChaLFEsWSxHLFtXLFgsSl0pfXZpc2l0QmluYXJ5KCQpe2xldHtbInR5cGUiXTpaLFsib2Zmc2V0Il06UT0wfT0kLFg9JDAoJC5kYXRhKSxKPSQwKCQubnVsbEJpdG1hcCksVz1vSigkLnZhbHVlT2Zmc2V0cykse1sibGVuZ3RoIl06WT1XLmxlbmd0aC0xLFsibnVsbENvdW50Il06Rz0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxZLEcsW1csWCxKXSl9dmlzaXRCaW5hcnlWaWV3KCQpe3ZhciBaO2xldHtbInR5cGUiXTpRLFsib2Zmc2V0Il06WD0wfT0kLEo9UzAoUS5BcnJheVR5cGUsJC52aWV3cyksVz0kMCgkLm51bGxCaXRtYXApLFk9KCQudmFyaWFkaWNCdWZmZXJzfHxbXSkubWFwKCh6KT0+JDAoeikpLEc9KFo9JC5sZW5ndGgpIT09bnVsbCYmWiE9PXZvaWQgMD9aOk1hdGgudHJ1bmMoSi5sZW5ndGgvUjAuRUxFTUVOVF9XSURUSCksSD0kLm51bGxCaXRtYXA/LTE6MDtyZXR1cm4gbmV3IEEwKFEsWCxHLEgsW3ZvaWQgMCxKLFddLFtdLHZvaWQgMCxZKX12aXNpdExhcmdlQmluYXJ5KCQpe2xldHtbInR5cGUiXTpaLFsib2Zmc2V0Il06UT0wfT0kLFg9JDAoJC5kYXRhKSxKPSQwKCQubnVsbEJpdG1hcCksVz1YNCgkLnZhbHVlT2Zmc2V0cykse1sibGVuZ3RoIl06WT1XLmxlbmd0aC0xLFsibnVsbENvdW50Il06Rz0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxZLEcsW1csWCxKXSl9dmlzaXRGaXhlZFNpemVCaW5hcnkoJCl7bGV0e1sidHlwZSJdOlosWyJvZmZzZXQiXTpRPTB9PSQsWD0kMCgkLm51bGxCaXRtYXApLEo9UzAoWi5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpXPUoubGVuZ3RoL1JRKFopLFsibnVsbENvdW50Il06WT0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxXLFksW3ZvaWQgMCxKLFhdKX12aXNpdERhdGUoJCl7bGV0e1sidHlwZSJdOlosWyJvZmZzZXQiXTpRPTB9PSQsWD0kMCgkLm51bGxCaXRtYXApLEo9UzAoWi5BcnJheVR5cGUsJC5kYXRhKSx7WyJsZW5ndGgiXTpXPUoubGVuZ3RoL1JRKFopLFsibnVsbENvdW50Il06WT0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxXLFksW3ZvaWQgMCxKLFhdKX12aXNpdFRpbWVzdGFtcCgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MH09JCxYPSQwKCQubnVsbEJpdG1hcCksSj1TMChaLkFycmF5VHlwZSwkLmRhdGEpLHtbImxlbmd0aCJdOlc9Si5sZW5ndGgvUlEoWiksWyJudWxsQ291bnQiXTpZPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgQTAoWixRLFcsWSxbdm9pZCAwLEosWF0pfXZpc2l0VGltZSgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MH09JCxYPSQwKCQubnVsbEJpdG1hcCksSj1TMChaLkFycmF5VHlwZSwkLmRhdGEpLHtbImxlbmd0aCJdOlc9Si5sZW5ndGgvUlEoWiksWyJudWxsQ291bnQiXTpZPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgQTAoWixRLFcsWSxbdm9pZCAwLEosWF0pfXZpc2l0RGVjaW1hbCgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MH09JCxYPSQwKCQubnVsbEJpdG1hcCksSj1TMChaLkFycmF5VHlwZSwkLmRhdGEpLHtbImxlbmd0aCJdOlc9Si5sZW5ndGgvUlEoWiksWyJudWxsQ291bnQiXTpZPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgQTAoWixRLFcsWSxbdm9pZCAwLEosWF0pfXZpc2l0TGlzdCgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MCxbImNoaWxkIl06WH09JCxKPSQwKCQubnVsbEJpdG1hcCksVz1vSigkLnZhbHVlT2Zmc2V0cykse1sibGVuZ3RoIl06WT1XLmxlbmd0aC0xLFsibnVsbENvdW50Il06Rz0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxZLEcsW1csdm9pZCAwLEpdLFtYXSl9dmlzaXRTdHJ1Y3QoJCl7bGV0e1sidHlwZSJdOlosWyJvZmZzZXQiXTpRPTAsWyJjaGlsZHJlbiJdOlg9W119PSQsSj0kMCgkLm51bGxCaXRtYXApLHtsZW5ndGg6Vz1YLnJlZHVjZSgoRyx7bGVuZ3RoOkh9KT0+TWF0aC5tYXgoRyxIKSwwKSxudWxsQ291bnQ6WT0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxXLFksW3ZvaWQgMCx2b2lkIDAsSl0sWCl9dmlzaXRVbmlvbigkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MCxbImNoaWxkcmVuIl06WD1bXX09JCxKPVMwKFouQXJyYXlUeXBlLCQudHlwZUlkcykse1sibGVuZ3RoIl06Vz1KLmxlbmd0aCxbIm51bGxDb3VudCJdOlk9LTF9PSQ7aWYoay5pc1NwYXJzZVVuaW9uKFopKXJldHVybiBuZXcgQTAoWixRLFcsWSxbdm9pZCAwLHZvaWQgMCx2b2lkIDAsSl0sWCk7bGV0IEc9b0ooJC52YWx1ZU9mZnNldHMpO3JldHVybiBuZXcgQTAoWixRLFcsWSxbRyx2b2lkIDAsdm9pZCAwLEpdLFgpfXZpc2l0RGljdGlvbmFyeSgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MH09JCxYPSQwKCQubnVsbEJpdG1hcCksSj1TMChaLmluZGljZXMuQXJyYXlUeXBlLCQuZGF0YSkse1siZGljdGlvbmFyeSJdOlc9bmV3IHIoW25ldyBJWSgpLnZpc2l0KHt0eXBlOlouZGljdGlvbmFyeX0pXSl9PSQse1sibGVuZ3RoIl06WT1KLmxlbmd0aCxbIm51bGxDb3VudCJdOkc9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBBMChaLFEsWSxHLFt2b2lkIDAsSixYXSxbXSxXKX12aXNpdEludGVydmFsKCQpe2xldHtbInR5cGUiXTpaLFsib2Zmc2V0Il06UT0wfT0kLFg9JDAoJC5udWxsQml0bWFwKSxKPVMwKFouQXJyYXlUeXBlLCQuZGF0YSkse1sibGVuZ3RoIl06Vz1KLmxlbmd0aC9SUShaKSxbIm51bGxDb3VudCJdOlk9JC5udWxsQml0bWFwPy0xOjB9PSQ7cmV0dXJuIG5ldyBBMChaLFEsVyxZLFt2b2lkIDAsSixYXSl9dmlzaXREdXJhdGlvbigkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MH09JCxYPSQwKCQubnVsbEJpdG1hcCksSj1TMChaLkFycmF5VHlwZSwkLmRhdGEpLHtbImxlbmd0aCJdOlc9Si5sZW5ndGgsWyJudWxsQ291bnQiXTpZPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgQTAoWixRLFcsWSxbdm9pZCAwLEosWF0pfXZpc2l0Rml4ZWRTaXplTGlzdCgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MCxbImNoaWxkIl06WD1uZXcgSVkoKS52aXNpdCh7dHlwZTpaLnZhbHVlVHlwZX0pfT0kLEo9JDAoJC5udWxsQml0bWFwKSx7WyJsZW5ndGgiXTpXPVgubGVuZ3RoL1JRKFopLFsibnVsbENvdW50Il06WT0kLm51bGxCaXRtYXA/LTE6MH09JDtyZXR1cm4gbmV3IEEwKFosUSxXLFksW3ZvaWQgMCx2b2lkIDAsSl0sW1hdKX12aXNpdE1hcCgkKXtsZXR7WyJ0eXBlIl06WixbIm9mZnNldCJdOlE9MCxbImNoaWxkIl06WD1uZXcgSVkoKS52aXNpdCh7dHlwZTpaLmNoaWxkVHlwZX0pfT0kLEo9JDAoJC5udWxsQml0bWFwKSxXPW9KKCQudmFsdWVPZmZzZXRzKSx7WyJsZW5ndGgiXTpZPVcubGVuZ3RoLTEsWyJudWxsQ291bnQiXTpHPSQubnVsbEJpdG1hcD8tMTowfT0kO3JldHVybiBuZXcgQTAoWixRLFksRyxbVyx2b2lkIDAsSl0sW1hdKX19O25PPW5ldyBJWX0pO2Z1bmN0aW9uIFhQKCQpe3JldHVybiAkLnNvbWUoKFopPT5aLm51bGxhYmxlKX1mdW5jdGlvbiBnNCgkKXtyZXR1cm4gJC5yZWR1Y2UoKFosUSk9PlorUS5udWxsQ291bnQsMCl9ZnVuY3Rpb24geDQoJCl7cmV0dXJuICQucmVkdWNlKChaLFEsWCk9PntyZXR1cm4gWltYKzFdPVpbWF0rUS5sZW5ndGgsWn0sbmV3IFVpbnQzMkFycmF5KCQubGVuZ3RoKzEpKX1mdW5jdGlvbiB2NCgkLFosUSxYKXtsZXQgSj1bXTtmb3IobGV0IFc9LTEsWT0kLmxlbmd0aDsrK1c8WTspe2xldCBHPSRbV10sSD1aW1ddLHtsZW5ndGg6en09RztpZihIPj1YKWJyZWFrO2lmKFE+PUgreiljb250aW51ZTtpZihIPj1RJiZIK3o8PVgpe0oucHVzaChHKTtjb250aW51ZX1sZXQgcT1NYXRoLm1heCgwLFEtSCksUD1NYXRoLm1pbihYLUgseik7Si5wdXNoKEcuc2xpY2UocSxQLXEpKX1pZihKLmxlbmd0aD09PTApSi5wdXNoKCRbMF0uc2xpY2UoMCwwKSk7cmV0dXJuIEp9ZnVuY3Rpb24gVzIoJCxaLFEsWCl7bGV0IEo9MCxXPTAsWT1aLmxlbmd0aC0xO2Rve2lmKEo+PVktMSlyZXR1cm4gUTxaW1ldP1goJCxKLFEtWltKXSk6bnVsbDtXPUorTWF0aC50cnVuYygoWS1KKSowLjUpLFE8WltXXT9ZPVc6Sj1XfXdoaWxlKEo8WSl9ZnVuY3Rpb24gX1koJCxaKXtyZXR1cm4gJC5nZXRWYWxpZChaKX1mdW5jdGlvbiBLVygkKXtmdW5jdGlvbiBaKFEsWCxKKXtyZXR1cm4gJChRW1hdLEopfXJldHVybiBmdW5jdGlvbihRKXtsZXQgWD10aGlzLmRhdGE7cmV0dXJuIFcyKFgsdGhpcy5fb2Zmc2V0cyxRLFopfX1mdW5jdGlvbiB5NCgkKXtsZXQgWjtmdW5jdGlvbiBRKFgsSixXKXtyZXR1cm4gJChYW0pdLFcsWil9cmV0dXJuIGZ1bmN0aW9uKFgsSil7bGV0IFc9dGhpcy5kYXRhO1o9SjtsZXQgWT1XMihXLHRoaXMuX29mZnNldHMsWCxRKTtyZXR1cm4gWj12b2lkIDAsWX19ZnVuY3Rpb24gaDQoJCl7bGV0IFo7ZnVuY3Rpb24gUShYLEosVyl7bGV0IFk9VyxHPTAsSD0wO2ZvcihsZXQgej1KLTEscT1YLmxlbmd0aDsrK3o8cTspe2xldCBQPVhbel07aWYofihHPSQoUCxaLFkpKSlyZXR1cm4gSCtHO1k9MCxIKz1QLmxlbmd0aH1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24oWCxKKXtaPVg7bGV0IFc9dGhpcy5kYXRhLFk9dHlwZW9mIEohPT0ibnVtYmVyIj9RKFcsMCwwKTpXMihXLHRoaXMuX29mZnNldHMsSixRKTtyZXR1cm4gWj12b2lkIDAsWX19dmFyIFQ0O3ZhciBiND1PKCgpPT57VDQ9Y2xhc3MgVDR7Y29uc3RydWN0b3IoJD0wLFope3RoaXMubnVtQ2h1bmtzPSQsdGhpcy5nZXRDaHVua0l0ZXJhdG9yPVosdGhpcy5jaHVua0luZGV4PTAsdGhpcy5jaHVua0l0ZXJhdG9yPXRoaXMuZ2V0Q2h1bmtJdGVyYXRvcigwKX1uZXh0KCl7d2hpbGUodGhpcy5jaHVua0luZGV4PHRoaXMubnVtQ2h1bmtzKXtsZXQgJD10aGlzLmNodW5rSXRlcmF0b3IubmV4dCgpO2lmKCEkLmRvbmUpcmV0dXJuICQ7aWYoKyt0aGlzLmNodW5rSW5kZXg8dGhpcy5udW1DaHVua3MpdGhpcy5jaHVua0l0ZXJhdG9yPXRoaXMuZ2V0Q2h1bmtJdGVyYXRvcih0aGlzLmNodW5rSW5kZXgpfXJldHVybntkb25lOiEwLHZhbHVlOm51bGx9fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX0pO2Z1bmN0aW9uIG9PKCQsWil7cmV0dXJuIFo9PT1udWxsJiYkLmxlbmd0aD4wPzA6LTF9ZnVuY3Rpb24gc08oJCxaKXtsZXR7bnVsbEJpdG1hcDpRfT0kO2lmKCFRfHwkLm51bGxDb3VudDw9MClyZXR1cm4tMTtsZXQgWD0wO2ZvcihsZXQgSiBvZiBuZXcgWVcoUSwkLm9mZnNldCsoWnx8MCksJC5sZW5ndGgsUSxfNCkpe2lmKCFKKXJldHVybiBYOysrWH1yZXR1cm4tMX1mdW5jdGlvbiBVMCgkLFosUSl7aWYoWj09PXZvaWQgMClyZXR1cm4tMTtpZihaPT09bnVsbClzd2l0Y2goJC50eXBlSWQpe2Nhc2UgQS5VbmlvbjpicmVhaztjYXNlIEEuRGljdGlvbmFyeTpicmVhaztkZWZhdWx0OnJldHVybiBzTygkLFEpfWxldCBYPXAkLmdldFZpc2l0Rm4oJCksSj1QSihaKTtmb3IobGV0IFc9KFF8fDApLTEsWT0kLmxlbmd0aDsrK1c8WTspaWYoSihYKCQsVykpKXJldHVybiBXO3JldHVybi0xfWZ1bmN0aW9uIEpQKCQsWixRKXtsZXQgWD1wJC5nZXRWaXNpdEZuKCQpLEo9UEooWik7Zm9yKGxldCBXPShRfHwwKS0xLFk9JC5sZW5ndGg7KytXPFk7KWlmKEooWCgkLFcpKSlyZXR1cm4gVztyZXR1cm4tMX12YXIgVzAsWjY7dmFyIG00PU8oKCk9Pnt1JCgpO1I4KCk7YUooKTtHVygpO1dXKCk7VzA9Y2xhc3MgVzAgZXh0ZW5kcyBIMHt9O1cwLnByb3RvdHlwZS52aXNpdE51bGw9b087VzAucHJvdG90eXBlLnZpc2l0Qm9vbD1VMDtXMC5wcm90b3R5cGUudmlzaXRJbnQ9VTA7VzAucHJvdG90eXBlLnZpc2l0SW50OD1VMDtXMC5wcm90b3R5cGUudmlzaXRJbnQxNj1VMDtXMC5wcm90b3R5cGUudmlzaXRJbnQzMj1VMDtXMC5wcm90b3R5cGUudmlzaXRJbnQ2ND1VMDtXMC5wcm90b3R5cGUudmlzaXRVaW50OD1VMDtXMC5wcm90b3R5cGUudmlzaXRVaW50MTY9VTA7VzAucHJvdG90eXBlLnZpc2l0VWludDMyPVUwO1cwLnByb3RvdHlwZS52aXNpdFVpbnQ2ND1VMDtXMC5wcm90b3R5cGUudmlzaXRGbG9hdD1VMDtXMC5wcm90b3R5cGUudmlzaXRGbG9hdDE2PVUwO1cwLnByb3RvdHlwZS52aXNpdEZsb2F0MzI9VTA7VzAucHJvdG90eXBlLnZpc2l0RmxvYXQ2ND1VMDtXMC5wcm90b3R5cGUudmlzaXRVdGY4PVUwO1cwLnByb3RvdHlwZS52aXNpdExhcmdlVXRmOD1VMDtXMC5wcm90b3R5cGUudmlzaXRVdGY4Vmlldz1VMDtXMC5wcm90b3R5cGUudmlzaXRCaW5hcnk9VTA7VzAucHJvdG90eXBlLnZpc2l0TGFyZ2VCaW5hcnk9VTA7VzAucHJvdG90eXBlLnZpc2l0QmluYXJ5Vmlldz1VMDtXMC5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVCaW5hcnk9VTA7VzAucHJvdG90eXBlLnZpc2l0RGF0ZT1VMDtXMC5wcm90b3R5cGUudmlzaXREYXRlRGF5PVUwO1cwLnByb3RvdHlwZS52aXNpdERhdGVNaWxsaXNlY29uZD1VMDtXMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXA9VTA7VzAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wU2Vjb25kPVUwO1cwLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pbGxpc2Vjb25kPVUwO1cwLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE1pY3Jvc2Vjb25kPVUwO1cwLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcE5hbm9zZWNvbmQ9VTA7VzAucHJvdG90eXBlLnZpc2l0VGltZT1VMDtXMC5wcm90b3R5cGUudmlzaXRUaW1lU2Vjb25kPVUwO1cwLnByb3RvdHlwZS52aXNpdFRpbWVNaWxsaXNlY29uZD1VMDtXMC5wcm90b3R5cGUudmlzaXRUaW1lTWljcm9zZWNvbmQ9VTA7VzAucHJvdG90eXBlLnZpc2l0VGltZU5hbm9zZWNvbmQ9VTA7VzAucHJvdG90eXBlLnZpc2l0RGVjaW1hbD1VMDtXMC5wcm90b3R5cGUudmlzaXRMaXN0PVUwO1cwLnByb3RvdHlwZS52aXNpdFN0cnVjdD1VMDtXMC5wcm90b3R5cGUudmlzaXRVbmlvbj1VMDtXMC5wcm90b3R5cGUudmlzaXREZW5zZVVuaW9uPUpQO1cwLnByb3RvdHlwZS52aXNpdFNwYXJzZVVuaW9uPUpQO1cwLnByb3RvdHlwZS52aXNpdERpY3Rpb25hcnk9VTA7VzAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWw9VTA7VzAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxEYXlUaW1lPVUwO1cwLnByb3RvdHlwZS52aXNpdEludGVydmFsWWVhck1vbnRoPVUwO1cwLnByb3RvdHlwZS52aXNpdEludGVydmFsTW9udGhEYXlOYW5vPVUwO1cwLnByb3RvdHlwZS52aXNpdER1cmF0aW9uPVUwO1cwLnByb3RvdHlwZS52aXNpdER1cmF0aW9uU2Vjb25kPVUwO1cwLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTWlsbGlzZWNvbmQ9VTA7VzAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWNyb3NlY29uZD1VMDtXMC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk5hbm9zZWNvbmQ9VTA7VzAucHJvdG90eXBlLnZpc2l0Rml4ZWRTaXplTGlzdD1VMDtXMC5wcm90b3R5cGUudmlzaXRNYXA9VTA7WjY9bmV3IFcwfSk7ZnVuY3Rpb24gcTAoJCl7bGV0e3R5cGU6Wn09JDtpZigkLm51bGxDb3VudD09PTAmJiQuc3RyaWRlPT09MSYmKGsuaXNJbnQoWikmJlouYml0V2lkdGghPT02NHx8ay5pc1RpbWUoWikmJlouYml0V2lkdGghPT02NHx8ay5pc0Zsb2F0KFopJiZaLnByZWNpc2lvbiE9PUokLkhBTEYpKXJldHVybiBuZXcgVDQoJC5kYXRhLmxlbmd0aCwoWCk9PntsZXQgSj0kLmRhdGFbWF07cmV0dXJuIEoudmFsdWVzLnN1YmFycmF5KDAsSi5sZW5ndGgpW1N5bWJvbC5pdGVyYXRvcl0oKX0pO2xldCBRPTA7cmV0dXJuIG5ldyBUNCgkLmRhdGEubGVuZ3RoLChYKT0+e2xldCBXPSQuZGF0YVtYXS5sZW5ndGgsWT0kLnNsaWNlKFEsUStXKTtyZXR1cm4gUSs9VyxuZXcgV1AoWSl9KX12YXIgWTAsV1AsSFc7dmFyIGY0PU8oKCk9PntSOCgpO3UkKCk7SCQoKTtiNCgpO1kwPWNsYXNzIFkwIGV4dGVuZHMgSDB7fTtXUD1jbGFzcyBXUHtjb25zdHJ1Y3RvcigkKXt0aGlzLnZlY3Rvcj0kLHRoaXMuaW5kZXg9MH1uZXh0KCl7aWYodGhpcy5pbmRleDx0aGlzLnZlY3Rvci5sZW5ndGgpcmV0dXJue3ZhbHVlOnRoaXMudmVjdG9yLmdldCh0aGlzLmluZGV4KyspfTtyZXR1cm57ZG9uZTohMCx2YWx1ZTpudWxsfX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzfX07WTAucHJvdG90eXBlLnZpc2l0TnVsbD1xMDtZMC5wcm90b3R5cGUudmlzaXRCb29sPXEwO1kwLnByb3RvdHlwZS52aXNpdEludD1xMDtZMC5wcm90b3R5cGUudmlzaXRJbnQ4PXEwO1kwLnByb3RvdHlwZS52aXNpdEludDE2PXEwO1kwLnByb3RvdHlwZS52aXNpdEludDMyPXEwO1kwLnByb3RvdHlwZS52aXNpdEludDY0PXEwO1kwLnByb3RvdHlwZS52aXNpdFVpbnQ4PXEwO1kwLnByb3RvdHlwZS52aXNpdFVpbnQxNj1xMDtZMC5wcm90b3R5cGUudmlzaXRVaW50MzI9cTA7WTAucHJvdG90eXBlLnZpc2l0VWludDY0PXEwO1kwLnByb3RvdHlwZS52aXNpdEZsb2F0PXEwO1kwLnByb3RvdHlwZS52aXNpdEZsb2F0MTY9cTA7WTAucHJvdG90eXBlLnZpc2l0RmxvYXQzMj1xMDtZMC5wcm90b3R5cGUudmlzaXRGbG9hdDY0PXEwO1kwLnByb3RvdHlwZS52aXNpdFV0Zjg9cTA7WTAucHJvdG90eXBlLnZpc2l0TGFyZ2VVdGY4PXEwO1kwLnByb3RvdHlwZS52aXNpdFV0ZjhWaWV3PXEwO1kwLnByb3RvdHlwZS52aXNpdEJpbmFyeT1xMDtZMC5wcm90b3R5cGUudmlzaXRMYXJnZUJpbmFyeT1xMDtZMC5wcm90b3R5cGUudmlzaXRCaW5hcnlWaWV3PXEwO1kwLnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUJpbmFyeT1xMDtZMC5wcm90b3R5cGUudmlzaXREYXRlPXEwO1kwLnByb3RvdHlwZS52aXNpdERhdGVEYXk9cTA7WTAucHJvdG90eXBlLnZpc2l0RGF0ZU1pbGxpc2Vjb25kPXEwO1kwLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcD1xMDtZMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBTZWNvbmQ9cTA7WTAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9cTA7WTAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWljcm9zZWNvbmQ9cTA7WTAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTmFub3NlY29uZD1xMDtZMC5wcm90b3R5cGUudmlzaXRUaW1lPXEwO1kwLnByb3RvdHlwZS52aXNpdFRpbWVTZWNvbmQ9cTA7WTAucHJvdG90eXBlLnZpc2l0VGltZU1pbGxpc2Vjb25kPXEwO1kwLnByb3RvdHlwZS52aXNpdFRpbWVNaWNyb3NlY29uZD1xMDtZMC5wcm90b3R5cGUudmlzaXRUaW1lTmFub3NlY29uZD1xMDtZMC5wcm90b3R5cGUudmlzaXREZWNpbWFsPXEwO1kwLnByb3RvdHlwZS52aXNpdExpc3Q9cTA7WTAucHJvdG90eXBlLnZpc2l0U3RydWN0PXEwO1kwLnByb3RvdHlwZS52aXNpdFVuaW9uPXEwO1kwLnByb3RvdHlwZS52aXNpdERlbnNlVW5pb249cTA7WTAucHJvdG90eXBlLnZpc2l0U3BhcnNlVW5pb249cTA7WTAucHJvdG90eXBlLnZpc2l0RGljdGlvbmFyeT1xMDtZMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbD1xMDtZMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbERheVRpbWU9cTA7WTAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxZZWFyTW9udGg9cTA7WTAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxNb250aERheU5hbm89cTA7WTAucHJvdG90eXBlLnZpc2l0RHVyYXRpb249cTA7WTAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25TZWNvbmQ9cTA7WTAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWxsaXNlY29uZD1xMDtZMC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kPXEwO1kwLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTmFub3NlY29uZD1xMDtZMC5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVMaXN0PXEwO1kwLnByb3RvdHlwZS52aXNpdE1hcD1xMDtIVz1uZXcgWTB9KTtmdW5jdGlvbiBRNigkKXtpZigkKXtpZigkIGluc3RhbmNlb2YgQTApcmV0dXJuIG5ldyByKFskXSk7aWYoJCBpbnN0YW5jZW9mIHIpcmV0dXJuIG5ldyByKCQuZGF0YSk7aWYoJC50eXBlIGluc3RhbmNlb2YgaylyZXR1cm4gbmV3IHIoW0koJCldKTtpZihBcnJheS5pc0FycmF5KCQpKXJldHVybiBuZXcgcigkLmZsYXRNYXAoKFopPT5pTyhaKSkpO2lmKEFycmF5QnVmZmVyLmlzVmlldygkKSl7aWYoJCBpbnN0YW5jZW9mIERhdGFWaWV3KSQ9bmV3IFVpbnQ4QXJyYXkoJC5idWZmZXIpO2xldCBaPXtvZmZzZXQ6MCxsZW5ndGg6JC5sZW5ndGgsbnVsbENvdW50Oi0xLGRhdGE6JH07aWYoJCBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gbmV3IHIoW0koT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFopLHt0eXBlOm5ldyBzOH0pKV0pO2lmKCQgaW5zdGFuY2VvZiBJbnQxNkFycmF5KXJldHVybiBuZXcgcihbSShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWikse3R5cGU6bmV3IGk4fSkpXSk7aWYoJCBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIG5ldyByKFtJKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxaKSx7dHlwZTpuZXcgR1p9KSldKTtpZigkIGluc3RhbmNlb2YgQmlnSW50NjRBcnJheSlyZXR1cm4gbmV3IHIoW0koT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFopLHt0eXBlOm5ldyBBWn0pKV0pO2lmKCQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwkIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpcmV0dXJuIG5ldyByKFtJKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxaKSx7dHlwZTpuZXcgcjh9KSldKTtpZigkIGluc3RhbmNlb2YgVWludDE2QXJyYXkpcmV0dXJuIG5ldyByKFtJKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxaKSx7dHlwZTpuZXcgYTh9KSldKTtpZigkIGluc3RhbmNlb2YgVWludDMyQXJyYXkpcmV0dXJuIG5ldyByKFtJKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxaKSx7dHlwZTpuZXcgdDh9KSldKTtpZigkIGluc3RhbmNlb2YgQmlnVWludDY0QXJyYXkpcmV0dXJuIG5ldyByKFtJKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxaKSx7dHlwZTpuZXcgVlF9KSldKTtpZigkIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBuZXcgcihbSShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWikse3R5cGU6bmV3IGU4fSkpXSk7aWYoJCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSlyZXR1cm4gbmV3IHIoW0koT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFopLHt0eXBlOm5ldyAkUX0pKV0pO3Rocm93IEVycm9yKCJVbnJlY29nbml6ZWQgaW5wdXQiKX19dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBpbnB1dCIpfWZ1bmN0aW9uIGlPKCQpe3JldHVybiAkIGluc3RhbmNlb2YgQTA/WyRdOiQgaW5zdGFuY2VvZiByPyQuZGF0YTpRNigkKS5kYXRhfXZhciBZUCxHUCxLUCxIUCxyLHU0O3ZhciBaUT1PKCgpPT57dSQoKTtXVygpO0gkKCk7JDgoKTtiNCgpO2FKKCk7RVEoKTttNCgpO2Y0KCk7SCQoKTtHUD1TeW1ib2wuZm9yKCJhcGFjaGUtYXJyb3cvVmVjdG9yIiksS1A9e30sSFA9e307cj1jbGFzcyBye3N0YXRpYyBpc1ZlY3RvcigkKXtyZXR1cm4oJD09PW51bGx8fCQ9PT12b2lkIDA/dm9pZCAwOiRbR1BdKT09PSEwfWNvbnN0cnVjdG9yKCQpe3ZhciBaLFEsWDtsZXQgSj0kWzBdaW5zdGFuY2VvZiByPyQuZmxhdE1hcCgoWSk9PlkuZGF0YSk6JDtpZihKLmxlbmd0aD09PTB8fEouc29tZSgoWSk9PiEoWSBpbnN0YW5jZW9mIEEwKSkpdGhyb3cgVHlwZUVycm9yKCJWZWN0b3IgY29uc3RydWN0b3IgZXhwZWN0cyBhbiBBcnJheSBvZiBEYXRhIGluc3RhbmNlcy4iKTtsZXQgVz0oWj1KWzBdKT09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOloudHlwZTtzd2l0Y2goSi5sZW5ndGgpe2Nhc2UgMDp0aGlzLl9vZmZzZXRzPVswXTticmVhaztjYXNlIDE6e2xldHtnZXQ6WSxzZXQ6RyxpbmRleE9mOkh9PUtQW1cudHlwZUlkXSx6PUpbMF07dGhpcy5pc1ZhbGlkPShxKT0+X1koeixxKSx0aGlzLmdldD0ocSk9PlkoeixxKSx0aGlzLnNldD0ocSxQKT0+Ryh6LHEsUCksdGhpcy5pbmRleE9mPShxKT0+SCh6LHEpLHRoaXMuX29mZnNldHM9WzAsei5sZW5ndGhdO2JyZWFrfWRlZmF1bHQ6T2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsSFBbVy50eXBlSWRdKSx0aGlzLl9vZmZzZXRzPXg0KEopO2JyZWFrfXRoaXMuZGF0YT1KLHRoaXMudHlwZT1XLHRoaXMuc3RyaWRlPVJRKFcpLHRoaXMubnVtQ2hpbGRyZW49KFg9KFE9Vy5jaGlsZHJlbik9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLmxlbmd0aCkhPT1udWxsJiZYIT09dm9pZCAwP1g6MCx0aGlzLmxlbmd0aD10aGlzLl9vZmZzZXRzLmF0KC0xKX1nZXQgYnl0ZUxlbmd0aCgpe3JldHVybiB0aGlzLmRhdGEucmVkdWNlKCgkLFopPT4kK1ouYnl0ZUxlbmd0aCwwKX1nZXQgbnVsbGFibGUoKXtyZXR1cm4gWFAodGhpcy5kYXRhKX1nZXQgbnVsbENvdW50KCl7cmV0dXJuIGc0KHRoaXMuZGF0YSl9Z2V0IEFycmF5VHlwZSgpe3JldHVybiB0aGlzLnR5cGUuQXJyYXlUeXBlfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuYCR7dGhpcy5WZWN0b3JOYW1lfTwke3RoaXMudHlwZVtTeW1ib2wudG9TdHJpbmdUYWddfT5gfWdldCBWZWN0b3JOYW1lKCl7cmV0dXJuYCR7QVt0aGlzLnR5cGUudHlwZUlkXX1WZWN0b3JgfWlzVmFsaWQoJCl7cmV0dXJuITF9Z2V0KCQpe3JldHVybiBudWxsfWF0KCQpe3JldHVybiB0aGlzLmdldCh0SigkLHRoaXMubGVuZ3RoKSl9c2V0KCQsWil7cmV0dXJufWluZGV4T2YoJCxaKXtyZXR1cm4tMX1pbmNsdWRlcygkLFope3JldHVybiB0aGlzLmluZGV4T2YoJCxaKT4tMX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBIVy52aXNpdCh0aGlzKX1jb25jYXQoLi4uJCl7cmV0dXJuIG5ldyByKHRoaXMuZGF0YS5jb25jYXQoJC5mbGF0TWFwKChaKT0+Wi5kYXRhKS5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpKX1zbGljZSgkLFope3JldHVybiBuZXcgcihCWSh0aGlzLCQsWiwoe2RhdGE6USxfb2Zmc2V0czpYfSxKLFcpPT52NChRLFgsSixXKSkpfXRvSlNPTigpe3JldHVyblsuLi50aGlzXX10b0FycmF5KCl7bGV0e3R5cGU6JCxkYXRhOlosbGVuZ3RoOlEsc3RyaWRlOlgsQXJyYXlUeXBlOkp9PXRoaXM7c3dpdGNoKCQudHlwZUlkKXtjYXNlIEEuSW50OmNhc2UgQS5GbG9hdDpjYXNlIEEuRGVjaW1hbDpjYXNlIEEuVGltZTpjYXNlIEEuVGltZXN0YW1wOnN3aXRjaChaLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgSjtjYXNlIDE6cmV0dXJuIFpbMF0udmFsdWVzLnN1YmFycmF5KDAsUSpYKTtkZWZhdWx0OnJldHVybiBaLnJlZHVjZSgoVyx7dmFsdWVzOlksbGVuZ3RoOkd9KT0+e3JldHVybiBXLmFycmF5LnNldChZLnN1YmFycmF5KDAsRypYKSxXLm9mZnNldCksVy5vZmZzZXQrPUcqWCxXfSx7YXJyYXk6bmV3IEooUSpYKSxvZmZzZXQ6MH0pLmFycmF5fX1yZXR1cm5bLi4udGhpc119dG9TdHJpbmcoKXtyZXR1cm5gWyR7Wy4uLnRoaXNdLmpvaW4oIiwiKX1dYH1nZXRDaGlsZCgkKXt2YXIgWjtyZXR1cm4gdGhpcy5nZXRDaGlsZEF0KChaPXRoaXMudHlwZS5jaGlsZHJlbik9PT1udWxsfHxaPT09dm9pZCAwP3ZvaWQgMDpaLmZpbmRJbmRleCgoUSk9PlEubmFtZT09PSQpKX1nZXRDaGlsZEF0KCQpe2lmKCQ+LTEmJiQ8dGhpcy5udW1DaGlsZHJlbilyZXR1cm4gbmV3IHIodGhpcy5kYXRhLm1hcCgoe2NoaWxkcmVuOlp9KT0+WlskXSkpO3JldHVybiBudWxsfWdldCBpc01lbW9pemVkKCl7aWYoay5pc0RpY3Rpb25hcnkodGhpcy50eXBlKSlyZXR1cm4gdGhpcy5kYXRhWzBdLmRpY3Rpb25hcnkuaXNNZW1vaXplZDtyZXR1cm4hMX1tZW1vaXplKCl7aWYoay5pc0RpY3Rpb25hcnkodGhpcy50eXBlKSl7bGV0ICQ9bmV3IHU0KHRoaXMuZGF0YVswXS5kaWN0aW9uYXJ5KSxaPXRoaXMuZGF0YS5tYXAoKFEpPT57bGV0IFg9US5jbG9uZSgpO3JldHVybiBYLmRpY3Rpb25hcnk9JCxYfSk7cmV0dXJuIG5ldyByKFopfXJldHVybiBuZXcgdTQodGhpcyl9dW5tZW1vaXplKCl7aWYoay5pc0RpY3Rpb25hcnkodGhpcy50eXBlKSYmdGhpcy5pc01lbW9pemVkKXtsZXQgJD10aGlzLmRhdGFbMF0uZGljdGlvbmFyeS51bm1lbW9pemUoKSxaPXRoaXMuZGF0YS5tYXAoKFEpPT57bGV0IFg9US5jbG9uZSgpO3JldHVybiBYLmRpY3Rpb25hcnk9JCxYfSk7cmV0dXJuIG5ldyByKFopfXJldHVybiB0aGlzfX07WVA9U3ltYm9sLnRvU3RyaW5nVGFnO3JbWVBdPSgoJCk9PnskLnR5cGU9ay5wcm90b3R5cGUsJC5kYXRhPVtdLCQubGVuZ3RoPTAsJC5zdHJpZGU9MSwkLm51bUNoaWxkcmVuPTAsJC5fb2Zmc2V0cz1uZXcgVWludDMyQXJyYXkoWzBdKSwkW1N5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVdPSEwLCRbR1BdPSEwO2xldCBaPU9iamVjdC5rZXlzKEEpLm1hcCgoUSk9PkFbUV0pLmZpbHRlcigoUSk9PnR5cGVvZiBRPT09Im51bWJlciImJlEhPT1BLk5PTkUpO2ZvcihsZXQgUSBvZiBaKXtsZXQgWD1wJC5nZXRWaXNpdEZuQnlUeXBlSWQoUSksSj1EWi5nZXRWaXNpdEZuQnlUeXBlSWQoUSksVz1aNi5nZXRWaXNpdEZuQnlUeXBlSWQoUSk7S1BbUV09e2dldDpYLHNldDpKLGluZGV4T2Y6V30sSFBbUV09T2JqZWN0LmNyZWF0ZSgkLHtbImlzVmFsaWQiXTp7dmFsdWU6S1coX1kpfSxbImdldCJdOnt2YWx1ZTpLVyhwJC5nZXRWaXNpdEZuQnlUeXBlSWQoUSkpfSxbInNldCJdOnt2YWx1ZTp5NChEWi5nZXRWaXNpdEZuQnlUeXBlSWQoUSkpfSxbImluZGV4T2YiXTp7dmFsdWU6aDQoWjYuZ2V0VmlzaXRGbkJ5VHlwZUlkKFEpKX19KX1yZXR1cm4iVmVjdG9yIn0pKHIucHJvdG90eXBlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFope3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWil8fHRoaXM9PT1yJiZyLmlzVmVjdG9yKFopfX0pO3U0PWNsYXNzIHU0IGV4dGVuZHMgcntjb25zdHJ1Y3RvcigkKXtzdXBlcigkLmRhdGEpO2xldCBaPXRoaXMuZ2V0LFE9dGhpcy5zZXQsWD10aGlzLnNsaWNlLEo9QXJyYXkodGhpcy5sZW5ndGgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJnZXQiLHt2YWx1ZShXKXtsZXQgWT1KW1ddO2lmKFkhPT12b2lkIDApcmV0dXJuIFk7bGV0IEc9Wi5jYWxsKHRoaXMsVyk7cmV0dXJuIEpbV109RyxHfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzZXQiLHt2YWx1ZShXLFkpe1EuY2FsbCh0aGlzLFcsWSksSltXXT1ZfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzbGljZSIse3ZhbHVlOihXLFkpPT5uZXcgdTQoWC5jYWxsKHRoaXMsVyxZKSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaXNNZW1vaXplZCIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInVubWVtb2l6ZSIse3ZhbHVlOigpPT5uZXcgcih0aGlzLmRhdGEpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm1lbW9pemUiLHt2YWx1ZTooKT0+dGhpc30pfX19KTtmdW5jdGlvbiB6UCgkKXtpZighJHx8JC5sZW5ndGg8PTApcmV0dXJuIGZ1bmN0aW9uKEope3JldHVybiEwfTtsZXQgWj0iIixRPSQuZmlsdGVyKChYKT0+WD09PVgpO2lmKFEubGVuZ3RoPjApWj1gCiAgICBzd2l0Y2ggKHgpIHske1EubWFwKChYKT0+YAogICAgICAgIGNhc2UgJHtyTyhYKX06YCkuam9pbigiIil9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIH1gO2lmKCQubGVuZ3RoIT09US5sZW5ndGgpWj1gaWYgKHggIT09IHgpIHJldHVybiBmYWxzZTsKJHtafWA7cmV0dXJuIEZ1bmN0aW9uKCJ4IixgJHtafQpyZXR1cm4gdHJ1ZTtgKX1mdW5jdGlvbiByTygkKXtpZih0eXBlb2YgJCE9PSJiaWdpbnQiKXJldHVybiBBOCgkKTtyZXR1cm5gJHtBOCgkKX1uYH12YXIgcVA9KCk9Pnt9O2Z1bmN0aW9uIFkyKCQsWil7bGV0IFE9TWF0aC5jZWlsKCQpKlotMTtyZXR1cm4oUS1RJTY0KzY0fHw2NCkvWn1mdW5jdGlvbiBQUCgkLFo9MCl7cmV0dXJuICQubGVuZ3RoPj1aPyQuc3ViYXJyYXkoMCxaKTpGWShuZXcgJC5jb25zdHJ1Y3RvcihaKSwkLDApfWNsYXNzIHdRe2NvbnN0cnVjdG9yKCQsWj0wLFE9MSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKFovUSksdGhpcy5idWZmZXI9bmV3ICQodGhpcy5sZW5ndGgpLHRoaXMuc3RyaWRlPVEsdGhpcy5CWVRFU19QRVJfRUxFTUVOVD0kLkJZVEVTX1BFUl9FTEVNRU5ULHRoaXMuQXJyYXlUeXBlPSR9Z2V0IGJ5dGVMZW5ndGgoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMubGVuZ3RoKnRoaXMuc3RyaWRlKSp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWdldCByZXNlcnZlZExlbmd0aCgpe3JldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGgvdGhpcy5zdHJpZGV9Z2V0IHJlc2VydmVkQnl0ZUxlbmd0aCgpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofXNldCgkLFope3JldHVybiB0aGlzfWFwcGVuZCgkKXtyZXR1cm4gdGhpcy5zZXQodGhpcy5sZW5ndGgsJCl9cmVzZXJ2ZSgkKXtpZigkPjApe3RoaXMubGVuZ3RoKz0kO2xldCBaPXRoaXMuc3RyaWRlLFE9dGhpcy5sZW5ndGgqWixYPXRoaXMuYnVmZmVyLmxlbmd0aDtpZihRPj1YKXRoaXMuX3Jlc2l6ZShYPT09MD9ZMihRKjEsdGhpcy5CWVRFU19QRVJfRUxFTUVOVCk6WTIoUSoyLHRoaXMuQllURVNfUEVSX0VMRU1FTlQpKX1yZXR1cm4gdGhpc31mbHVzaCgkPXRoaXMubGVuZ3RoKXskPVkyKCQqdGhpcy5zdHJpZGUsdGhpcy5CWVRFU19QRVJfRUxFTUVOVCk7bGV0IFo9UFAodGhpcy5idWZmZXIsJCk7cmV0dXJuIHRoaXMuY2xlYXIoKSxafWNsZWFyKCl7cmV0dXJuIHRoaXMubGVuZ3RoPTAsdGhpcy5idWZmZXI9bmV3IHRoaXMuQXJyYXlUeXBlLHRoaXN9X3Jlc2l6ZSgkKXtyZXR1cm4gdGhpcy5idWZmZXI9UFAodGhpcy5idWZmZXIsJCl9fXZhciBGSixUWSxnWTt2YXIgJFg9TygoKT0+e3MkKCk7Rko9Y2xhc3MgRkogZXh0ZW5kcyB3UXtsYXN0KCl7cmV0dXJuIHRoaXMuZ2V0KHRoaXMubGVuZ3RoLTEpfWdldCgkKXtyZXR1cm4gdGhpcy5idWZmZXJbJF19c2V0KCQsWil7cmV0dXJuIHRoaXMucmVzZXJ2ZSgkLXRoaXMubGVuZ3RoKzEpLHRoaXMuYnVmZmVyWyQqdGhpcy5zdHJpZGVdPVosdGhpc319O1RZPWNsYXNzIFRZIGV4dGVuZHMgRkp7Y29uc3RydWN0b3IoKXtzdXBlcihVaW50OEFycmF5LDAsMC4xMjUpO3RoaXMubnVtVmFsaWQ9MH1nZXQgbnVtSW52YWxpZCgpe3JldHVybiB0aGlzLmxlbmd0aC10aGlzLm51bVZhbGlkfWdldCgkKXtyZXR1cm4gdGhpcy5idWZmZXJbJD4+M10+PiQlOCYxfXNldCgkLFope2xldHtidWZmZXI6UX09dGhpcy5yZXNlcnZlKCQtdGhpcy5sZW5ndGgrMSksWD0kPj4zLEo9JCU4LFc9UVtYXT4+SiYxO3JldHVybiBaP1c9PT0wJiYoUVtYXXw9MTw8SiwrK3RoaXMubnVtVmFsaWQpOlc9PT0xJiYoUVtYXSY9figxPDxKKSwtLXRoaXMubnVtVmFsaWQpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5udW1WYWxpZD0wLHN1cGVyLmNsZWFyKCl9fTtnWT1jbGFzcyBnWSBleHRlbmRzIEZKe2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQuT2Zmc2V0QXJyYXlUeXBlLDEsMSl9YXBwZW5kKCQpe3JldHVybiB0aGlzLnNldCh0aGlzLmxlbmd0aC0xLCQpfXNldCgkLFope2xldCBRPXRoaXMubGVuZ3RoLTEsWD10aGlzLnJlc2VydmUoJC1RKzEpLmJ1ZmZlcjtpZihRPCQrKyYmUT49MClYLmZpbGwoWFtRXSxRLCQpO3JldHVybiBYWyRdPVhbJC0xXStaLHRoaXN9Zmx1c2goJD10aGlzLmxlbmd0aC0xKXtpZigkPnRoaXMubGVuZ3RoKXRoaXMuc2V0KCQtMSx0aGlzLkJZVEVTX1BFUl9FTEVNRU5UPjQ/QmlnSW50KDApOjApO3JldHVybiBzdXBlci5mbHVzaCgkKzEpfX19KTtjbGFzcyBNJHtzdGF0aWMgdGhyb3VnaE5vZGUoJCl7dGhyb3cgRXJyb3IoJyJ0aHJvdWdoTm9kZSIgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyl9c3RhdGljIHRocm91Z2hET00oJCl7dGhyb3cgRXJyb3IoJyJ0aHJvdWdoRE9NIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX1jb25zdHJ1Y3Rvcih7dHlwZTokLG51bGxWYWx1ZXM6Wn0pe2lmKHRoaXMubGVuZ3RoPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzLnR5cGU9JCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMubnVsbFZhbHVlcz1aLHRoaXMuc3RyaWRlPVJRKCQpLHRoaXMuX251bGxzPW5ldyBUWSxaJiZaLmxlbmd0aD4wKXRoaXMuX2lzVmFsaWQ9elAoWil9dG9WZWN0b3IoKXtyZXR1cm4gbmV3IHIoW3RoaXMuZmx1c2goKV0pfWdldCBBcnJheVR5cGUoKXtyZXR1cm4gdGhpcy50eXBlLkFycmF5VHlwZX1nZXQgbnVsbENvdW50KCl7cmV0dXJuIHRoaXMuX251bGxzLm51bUludmFsaWR9Z2V0IG51bUNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RofWdldCBieXRlTGVuZ3RoKCl7bGV0ICQ9MCx7X29mZnNldHM6WixfdmFsdWVzOlEsX251bGxzOlgsX3R5cGVJZHM6SixjaGlsZHJlbjpXfT10aGlzO3JldHVybiBaJiYoJCs9Wi5ieXRlTGVuZ3RoKSxRJiYoJCs9US5ieXRlTGVuZ3RoKSxYJiYoJCs9WC5ieXRlTGVuZ3RoKSxKJiYoJCs9Si5ieXRlTGVuZ3RoKSxXLnJlZHVjZSgoWSxHKT0+WStHLmJ5dGVMZW5ndGgsJCl9Z2V0IHJlc2VydmVkTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX251bGxzLnJlc2VydmVkTGVuZ3RofWdldCByZXNlcnZlZEJ5dGVMZW5ndGgoKXtsZXQgJD0wO3JldHVybiB0aGlzLl9vZmZzZXRzJiYoJCs9dGhpcy5fb2Zmc2V0cy5yZXNlcnZlZEJ5dGVMZW5ndGgpLHRoaXMuX3ZhbHVlcyYmKCQrPXRoaXMuX3ZhbHVlcy5yZXNlcnZlZEJ5dGVMZW5ndGgpLHRoaXMuX251bGxzJiYoJCs9dGhpcy5fbnVsbHMucmVzZXJ2ZWRCeXRlTGVuZ3RoKSx0aGlzLl90eXBlSWRzJiYoJCs9dGhpcy5fdHlwZUlkcy5yZXNlcnZlZEJ5dGVMZW5ndGgpLHRoaXMuY2hpbGRyZW4ucmVkdWNlKChaLFEpPT5aK1EucmVzZXJ2ZWRCeXRlTGVuZ3RoLCQpfWdldCB2YWx1ZU9mZnNldHMoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0cz90aGlzLl9vZmZzZXRzLmJ1ZmZlcjpudWxsfWdldCB2YWx1ZXMoKXtyZXR1cm4gdGhpcy5fdmFsdWVzP3RoaXMuX3ZhbHVlcy5idWZmZXI6bnVsbH1nZXQgbnVsbEJpdG1hcCgpe3JldHVybiB0aGlzLl9udWxscz90aGlzLl9udWxscy5idWZmZXI6bnVsbH1nZXQgdHlwZUlkcygpe3JldHVybiB0aGlzLl90eXBlSWRzP3RoaXMuX3R5cGVJZHMuYnVmZmVyOm51bGx9YXBwZW5kKCQpe3JldHVybiB0aGlzLnNldCh0aGlzLmxlbmd0aCwkKX1pc1ZhbGlkKCQpe3JldHVybiB0aGlzLl9pc1ZhbGlkKCQpfXNldCgkLFope2lmKHRoaXMuc2V0VmFsaWQoJCx0aGlzLmlzVmFsaWQoWikpKXRoaXMuc2V0VmFsdWUoJCxaKTtyZXR1cm4gdGhpc31zZXRWYWx1ZSgkLFope3RoaXMuX3NldFZhbHVlKHRoaXMsJCxaKX1zZXRWYWxpZCgkLFope3JldHVybiB0aGlzLmxlbmd0aD10aGlzLl9udWxscy5zZXQoJCwrWikubGVuZ3RoLFp9YWRkQ2hpbGQoJCxaPWAke3RoaXMubnVtQ2hpbGRyZW59YCl7dGhyb3cgRXJyb3IoYENhbm5vdCBhcHBlbmQgY2hpbGRyZW4gdG8gbm9uLW5lc3RlZCB0eXBlICIke3RoaXMudHlwZX0iYCl9Z2V0Q2hpbGRBdCgkKXtyZXR1cm4gdGhpcy5jaGlsZHJlblskXXx8bnVsbH1mbHVzaCgpe2xldCAkLFosUSxYLHt0eXBlOkosbGVuZ3RoOlcsbnVsbENvdW50OlksX3R5cGVJZHM6Ryxfb2Zmc2V0czpILF92YWx1ZXM6eixfbnVsbHM6cX09dGhpcztpZihaPUc9PT1udWxsfHxHPT09dm9pZCAwP3ZvaWQgMDpHLmZsdXNoKFcpKVg9SD09PW51bGx8fEg9PT12b2lkIDA/dm9pZCAwOkguZmx1c2goVyk7ZWxzZSBpZihYPUg9PT1udWxsfHxIPT09dm9pZCAwP3ZvaWQgMDpILmZsdXNoKFcpKSQ9ej09PW51bGx8fHo9PT12b2lkIDA/dm9pZCAwOnouZmx1c2goSC5sYXN0KCkpO2Vsc2UgJD16PT09bnVsbHx8ej09PXZvaWQgMD92b2lkIDA6ei5mbHVzaChXKTtpZihZPjApUT1xPT09bnVsbHx8cT09PXZvaWQgMD92b2lkIDA6cS5mbHVzaChXKTtsZXQgUD10aGlzLmNoaWxkcmVuLm1hcCgoVSk9PlUuZmx1c2goKSk7cmV0dXJuIHRoaXMuY2xlYXIoKSxJKHt0eXBlOkosbGVuZ3RoOlcsbnVsbENvdW50OlksY2hpbGRyZW46UCxjaGlsZDpQWzBdLGRhdGE6JCx0eXBlSWRzOlosbnVsbEJpdG1hcDpRLHZhbHVlT2Zmc2V0czpYfSl9ZmluaXNoKCl7dGhpcy5maW5pc2hlZD0hMDtmb3IobGV0ICQgb2YgdGhpcy5jaGlsZHJlbikkLmZpbmlzaCgpO3JldHVybiB0aGlzfWNsZWFyKCl7dmFyICQsWixRLFg7dGhpcy5sZW5ndGg9MCwoJD10aGlzLl9udWxscyk9PT1udWxsfHwkPT09dm9pZCAwfHwkLmNsZWFyKCksKFo9dGhpcy5fdmFsdWVzKT09PW51bGx8fFo9PT12b2lkIDB8fFouY2xlYXIoKSwoUT10aGlzLl9vZmZzZXRzKT09PW51bGx8fFE9PT12b2lkIDB8fFEuY2xlYXIoKSwoWD10aGlzLl90eXBlSWRzKT09PW51bGx8fFg9PT12b2lkIDB8fFguY2xlYXIoKTtmb3IobGV0IEogb2YgdGhpcy5jaGlsZHJlbilKLmNsZWFyKCk7cmV0dXJuIHRoaXN9fXZhciByJCxTUTt2YXIgUiQ9TygoKT0+e1pRKCk7JDgoKTtCNCgpO0gkKCk7cVAoKTskWCgpO00kLnByb3RvdHlwZS5sZW5ndGg9MTtNJC5wcm90b3R5cGUuc3RyaWRlPTE7TSQucHJvdG90eXBlLmNoaWxkcmVuPW51bGw7TSQucHJvdG90eXBlLmZpbmlzaGVkPSExO00kLnByb3RvdHlwZS5udWxsVmFsdWVzPW51bGw7TSQucHJvdG90eXBlLl9pc1ZhbGlkPSgpPT4hMDtyJD1jbGFzcyByJCBleHRlbmRzIE0ke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3ZhbHVlcz1uZXcgRkoodGhpcy5BcnJheVR5cGUsMCx0aGlzLnN0cmlkZSl9c2V0VmFsdWUoJCxaKXtsZXQgUT10aGlzLl92YWx1ZXM7cmV0dXJuIFEucmVzZXJ2ZSgkLVEubGVuZ3RoKzEpLHN1cGVyLnNldFZhbHVlKCQsWil9fTtTUT1jbGFzcyBTUSBleHRlbmRzIE0ke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3BlbmRpbmdMZW5ndGg9MCx0aGlzLl9vZmZzZXRzPW5ldyBnWSgkLnR5cGUpfXNldFZhbHVlKCQsWil7bGV0IFE9dGhpcy5fcGVuZGluZ3x8KHRoaXMuX3BlbmRpbmc9bmV3IE1hcCksWD1RLmdldCgkKTtYJiYodGhpcy5fcGVuZGluZ0xlbmd0aC09WC5sZW5ndGgpLHRoaXMuX3BlbmRpbmdMZW5ndGgrPVogaW5zdGFuY2VvZiBSWD9aW3FKXS5sZW5ndGg6Wi5sZW5ndGgsUS5zZXQoJCxaKX1zZXRWYWxpZCgkLFope2lmKCFzdXBlci5zZXRWYWxpZCgkLFopKXJldHVybih0aGlzLl9wZW5kaW5nfHwodGhpcy5fcGVuZGluZz1uZXcgTWFwKSkuc2V0KCQsdm9pZCAwKSwhMTtyZXR1cm4hMH1jbGVhcigpe3JldHVybiB0aGlzLl9wZW5kaW5nTGVuZ3RoPTAsdGhpcy5fcGVuZGluZz12b2lkIDAsc3VwZXIuY2xlYXIoKX1mbHVzaCgpe3JldHVybiB0aGlzLl9mbHVzaCgpLHN1cGVyLmZsdXNoKCl9ZmluaXNoKCl7cmV0dXJuIHRoaXMuX2ZsdXNoKCksc3VwZXIuZmluaXNoKCl9X2ZsdXNoKCl7bGV0ICQ9dGhpcy5fcGVuZGluZyxaPXRoaXMuX3BlbmRpbmdMZW5ndGg7aWYodGhpcy5fcGVuZGluZ0xlbmd0aD0wLHRoaXMuX3BlbmRpbmc9dm9pZCAwLCQmJiQuc2l6ZT4wKXRoaXMuX2ZsdXNoUGVuZGluZygkLFopO3JldHVybiB0aGlzfX19KTtjbGFzcyB6V3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmI9bnVsbCx0aGlzLmJiX3Bvcz0wfV9faW5pdCgkLFope3JldHVybiB0aGlzLmJiX3Bvcz0kLHRoaXMuYmI9Wix0aGlzfW9mZnNldCgpe3JldHVybiB0aGlzLmJiLnJlYWRJbnQ2NCh0aGlzLmJiX3Bvcyl9bWV0YURhdGFMZW5ndGgoKXtyZXR1cm4gdGhpcy5iYi5yZWFkSW50MzIodGhpcy5iYl9wb3MrOCl9Ym9keUxlbmd0aCgpe3JldHVybiB0aGlzLmJiLnJlYWRJbnQ2NCh0aGlzLmJiX3BvcysxNil9c3RhdGljIHNpemVPZigpe3JldHVybiAyNH1zdGF0aWMgY3JlYXRlQmxvY2soJCxaLFEsWCl7cmV0dXJuICQucHJlcCg4LDI0KSwkLndyaXRlSW50NjQoQmlnSW50KFghPT1udWxsJiZYIT09dm9pZCAwP1g6MCkpLCQucGFkKDQpLCQud3JpdGVJbnQzMihRKSwkLndyaXRlSW50NjQoQmlnSW50KFohPT1udWxsJiZaIT09dm9pZCAwP1o6MCkpLCQub2Zmc2V0KCl9fWNsYXNzIFFRe2NvbnN0cnVjdG9yKCl7dGhpcy5iYj1udWxsLHRoaXMuYmJfcG9zPTB9X19pbml0KCQsWil7cmV0dXJuIHRoaXMuYmJfcG9zPSQsdGhpcy5iYj1aLHRoaXN9c3RhdGljIGdldFJvb3RBc0Zvb3RlcigkLFope3JldHVybihafHxuZXcgUVEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzRm9vdGVyKCQsWil7cmV0dXJuICQuc2V0UG9zaXRpb24oJC5wb3NpdGlvbigpK3QpLChafHxuZXcgUVEpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX12ZXJzaW9uKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw0KTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQxNih0aGlzLmJiX3BvcyskKTppMC5WMX1zY2hlbWEoJCl7bGV0IFo9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw2KTtyZXR1cm4gWj8oJHx8bmV3IF8kKS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmJfcG9zK1opLHRoaXMuYmIpOm51bGx9ZGljdGlvbmFyaWVzKCQsWil7bGV0IFE9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gUT8oWnx8bmV3IHpXKS5fX2luaXQodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjI0LHRoaXMuYmIpOm51bGx9ZGljdGlvbmFyaWVzTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gJD90aGlzLmJiLl9fdmVjdG9yX2xlbih0aGlzLmJiX3BvcyskKTowfXJlY29yZEJhdGNoZXMoJCxaKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEwKTtyZXR1cm4gUT8oWnx8bmV3IHpXKS5fX2luaXQodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjI0LHRoaXMuYmIpOm51bGx9cmVjb3JkQmF0Y2hlc0xlbmd0aCgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTApO3JldHVybiAkP3RoaXMuYmIuX192ZWN0b3JfbGVuKHRoaXMuYmJfcG9zKyQpOjB9Y3VzdG9tTWV0YWRhdGEoJCxaKXtsZXQgUT10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEyKTtyZXR1cm4gUT8oWnx8bmV3IEskKS5fX2luaXQodGhpcy5iYi5fX2luZGlyZWN0KHRoaXMuYmIuX192ZWN0b3IodGhpcy5iYl9wb3MrUSkrJCo0KSx0aGlzLmJiKTpudWxsfWN1c3RvbU1ldGFkYXRhTGVuZ3RoKCl7bGV0ICQ9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3BvcywxMik7cmV0dXJuICQ/dGhpcy5iYi5fX3ZlY3Rvcl9sZW4odGhpcy5iYl9wb3MrJCk6MH1zdGF0aWMgc3RhcnRGb290ZXIoJCl7JC5zdGFydE9iamVjdCg1KX1zdGF0aWMgYWRkVmVyc2lvbigkLFopeyQuYWRkRmllbGRJbnQxNigwLFosaTAuVjEpfXN0YXRpYyBhZGRTY2hlbWEoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDEsWiwwKX1zdGF0aWMgYWRkRGljdGlvbmFyaWVzKCQsWil7JC5hZGRGaWVsZE9mZnNldCgyLFosMCl9c3RhdGljIHN0YXJ0RGljdGlvbmFyaWVzVmVjdG9yKCQsWil7JC5zdGFydFZlY3RvcigyNCxaLDgpfXN0YXRpYyBhZGRSZWNvcmRCYXRjaGVzKCQsWil7JC5hZGRGaWVsZE9mZnNldCgzLFosMCl9c3RhdGljIHN0YXJ0UmVjb3JkQmF0Y2hlc1ZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoMjQsWiw4KX1zdGF0aWMgYWRkQ3VzdG9tTWV0YWRhdGEoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDQsWiwwKX1zdGF0aWMgY3JlYXRlQ3VzdG9tTWV0YWRhdGFWZWN0b3IoJCxaKXskLnN0YXJ0VmVjdG9yKDQsWi5sZW5ndGgsNCk7Zm9yKGxldCBRPVoubGVuZ3RoLTE7UT49MDtRLS0pJC5hZGRPZmZzZXQoWltRXSk7cmV0dXJuICQuZW5kVmVjdG9yKCl9c3RhdGljIHN0YXJ0Q3VzdG9tTWV0YWRhdGFWZWN0b3IoJCxaKXskLnN0YXJ0VmVjdG9yKDQsWiw0KX1zdGF0aWMgZW5kRm9vdGVyKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBmaW5pc2hGb290ZXJCdWZmZXIoJCxaKXskLmZpbmlzaChaKX1zdGF0aWMgZmluaXNoU2l6ZVByZWZpeGVkRm9vdGVyQnVmZmVyKCQsWil7JC5maW5pc2goWix2b2lkIDAsITApfX12YXIgRlA9TygoKT0+e3kwKCk7czYoKTtZNCgpO2JLKCl9KTtmdW5jdGlvbiBwNCgkLFope3JldHVybiBuZXcgTWFwKFsuLi4kfHxuZXcgTWFwLC4uLlp8fG5ldyBNYXBdKX1mdW5jdGlvbiBHMigkLFo9bmV3IE1hcCl7Zm9yKGxldCBRPS0xLFg9JC5sZW5ndGg7KytRPFg7KXtsZXQgVz0kW1FdLnR5cGU7aWYoay5pc0RpY3Rpb25hcnkoVykpe2lmKCFaLmhhcyhXLmlkKSlaLnNldChXLmlkLFcuZGljdGlvbmFyeSk7ZWxzZSBpZihaLmdldChXLmlkKSE9PVcuZGljdGlvbmFyeSl0aHJvdyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBTY2hlbWEgY29udGFpbmluZyB0d28gZGlmZmVyZW50IGRpY3Rpb25hcmllcyB3aXRoIHRoZSBzYW1lIElkIil9aWYoVy5jaGlsZHJlbiYmVy5jaGlsZHJlbi5sZW5ndGg+MClHMihXLmNoaWxkcmVuLFopfXJldHVybiBafXZhciBOUCxVUCxRMCxhO3ZhciB2Wj1PKCgpPT57dSQoKTtIJCgpO05QPVN5bWJvbC5mb3IoImFwYWNoZS1hcnJvdy9TY2hlbWEiKSxVUD1TeW1ib2wuZm9yKCJhcGFjaGUtYXJyb3cvRmllbGQiKTtRMD1jbGFzcyBRMHtzdGF0aWMgaXNTY2hlbWEoJCl7cmV0dXJuKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokW05QXSk9PT0hMH1jb25zdHJ1Y3RvcigkPVtdLFosUSxYPWkwLlY1KXtpZih0aGlzLmZpZWxkcz0kfHxbXSx0aGlzLm1ldGFkYXRhPVp8fG5ldyBNYXAsIVEpUT1HMih0aGlzLmZpZWxkcyk7dGhpcy5kaWN0aW9uYXJpZXM9USx0aGlzLm1ldGFkYXRhVmVyc2lvbj1YfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlNjaGVtYSJ9Z2V0IG5hbWVzKCl7cmV0dXJuIHRoaXMuZmllbGRzLm1hcCgoJCk9PiQubmFtZSl9dG9TdHJpbmcoKXtyZXR1cm5gU2NoZW1hPHsgJHt0aGlzLmZpZWxkcy5tYXAoKCQsWik9PmAke1p9OiAkeyR9YCkuam9pbigiLCAiKX0gfT5gfXNlbGVjdCgkKXtsZXQgWj1uZXcgU2V0KCQpLFE9dGhpcy5maWVsZHMuZmlsdGVyKChYKT0+Wi5oYXMoWC5uYW1lKSk7cmV0dXJuIG5ldyBRMChRLHRoaXMubWV0YWRhdGEpfXNlbGVjdEF0KCQpe2xldCBaPSQubWFwKChRKT0+dGhpcy5maWVsZHNbUV0pLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbmV3IFEwKFosdGhpcy5tZXRhZGF0YSl9YXNzaWduKC4uLiQpe2xldCBaPSRbMF1pbnN0YW5jZW9mIFEwPyRbMF06QXJyYXkuaXNBcnJheSgkWzBdKT9uZXcgUTAoJFswXSk6bmV3IFEwKCQpLFE9Wy4uLnRoaXMuZmllbGRzXSxYPXA0KHA0KG5ldyBNYXAsdGhpcy5tZXRhZGF0YSksWi5tZXRhZGF0YSksSj1aLmZpZWxkcy5maWx0ZXIoKFkpPT57bGV0IEc9US5maW5kSW5kZXgoKEgpPT5ILm5hbWU9PT1ZLm5hbWUpO3JldHVybn5HPyhRW0ddPVkuY2xvbmUoe21ldGFkYXRhOnA0KHA0KG5ldyBNYXAsUVtHXS5tZXRhZGF0YSksWS5tZXRhZGF0YSl9KSkmJiExOiEwfSksVz1HMihKLG5ldyBNYXApO3JldHVybiBuZXcgUTAoWy4uLlEsLi4uSl0sWCxuZXcgTWFwKFsuLi50aGlzLmRpY3Rpb25hcmllcywuLi5XXSkpfX07UTAucHJvdG90eXBlLmZpZWxkcz1udWxsO1EwLnByb3RvdHlwZS5tZXRhZGF0YT1udWxsO1EwLnByb3RvdHlwZS5kaWN0aW9uYXJpZXM9bnVsbDtRMC5wcm90b3R5cGVbTlBdPSEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRMCxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFope3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWil8fHRoaXM9PT1RMCYmUTAuaXNTY2hlbWEoWil9fSk7YT1jbGFzcyBhe3N0YXRpYyBpc0ZpZWxkKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JFtVUF0pPT09ITB9c3RhdGljIG5ldyguLi4kKXtsZXRbWixRLFgsSl09JDtpZigkWzBdJiZ0eXBlb2YgJFswXT09PSJvYmplY3QiKSh7bmFtZTpafT0kWzBdKSxRPT09dm9pZCAwJiYoUT0kWzBdLnR5cGUpLFg9PT12b2lkIDAmJihYPSRbMF0ubnVsbGFibGUpLEo9PT12b2lkIDAmJihKPSRbMF0ubWV0YWRhdGEpO3JldHVybiBuZXcgYShgJHtafWAsUSxYLEopfWNvbnN0cnVjdG9yKCQsWixRPSExLFgpe3RoaXMubmFtZT0kLHRoaXMudHlwZT1aLHRoaXMubnVsbGFibGU9USx0aGlzLm1ldGFkYXRhPVh8fG5ldyBNYXB9Z2V0IHR5cGVJZCgpe3JldHVybiB0aGlzLnR5cGUudHlwZUlkfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkZpZWxkIn10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX06ICR7dGhpcy50eXBlfWB9Y2xvbmUoLi4uJCl7bGV0W1osUSxYLEpdPSQ7cmV0dXJuISRbMF18fHR5cGVvZiAkWzBdIT09Im9iamVjdCI/W1o9dGhpcy5uYW1lLFE9dGhpcy50eXBlLFg9dGhpcy5udWxsYWJsZSxKPXRoaXMubWV0YWRhdGFdPSQ6e25hbWU6Wj10aGlzLm5hbWUsdHlwZTpRPXRoaXMudHlwZSxudWxsYWJsZTpYPXRoaXMubnVsbGFibGUsbWV0YWRhdGE6Sj10aGlzLm1ldGFkYXRhfT0kWzBdLGEubmV3KFosUSxYLEopfX07YS5wcm90b3R5cGUudHlwZT1udWxsO2EucHJvdG90eXBlLm5hbWU9bnVsbDthLnByb3RvdHlwZS5udWxsYWJsZT1udWxsO2EucHJvdG90eXBlLm1ldGFkYXRhPW51bGw7YS5wcm90b3R5cGVbVVBdPSEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oWil7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwodGhpcyxaKXx8dGhpcz09PWEmJmEuaXNGaWVsZChaKX19KX0pO2NsYXNzIE5Ke3N0YXRpYyBkZWNvZGUoJCl7JD1uZXcgdE8oJDAoJCkpO2xldCBaPVFRLmdldFJvb3RBc0Zvb3RlcigkKSxRPVEwLmRlY29kZShaLnNjaGVtYSgpLG5ldyBNYXAsWi52ZXJzaW9uKCkpO3JldHVybiBuZXcgTVAoUSxaKX1zdGF0aWMgZW5jb2RlKCQpe2xldCBaPW5ldyBhTyxRPVEwLmVuY29kZShaLCQuc2NoZW1hKTtRUS5zdGFydFJlY29yZEJhdGNoZXNWZWN0b3IoWiwkLm51bVJlY29yZEJhdGNoZXMpO2ZvcihsZXQgVyBvZlsuLi4kLnJlY29yZEJhdGNoZXMoKV0uc2xpY2UoKS5yZXZlcnNlKCkpRVguZW5jb2RlKFosVyk7bGV0IFg9Wi5lbmRWZWN0b3IoKTtRUS5zdGFydERpY3Rpb25hcmllc1ZlY3RvcihaLCQubnVtRGljdGlvbmFyaWVzKTtmb3IobGV0IFcgb2ZbLi4uJC5kaWN0aW9uYXJ5QmF0Y2hlcygpXS5zbGljZSgpLnJldmVyc2UoKSlFWC5lbmNvZGUoWixXKTtsZXQgSj1aLmVuZFZlY3RvcigpO3JldHVybiBRUS5zdGFydEZvb3RlcihaKSxRUS5hZGRTY2hlbWEoWixRKSxRUS5hZGRWZXJzaW9uKFosaTAuVjUpLFFRLmFkZFJlY29yZEJhdGNoZXMoWixYKSxRUS5hZGREaWN0aW9uYXJpZXMoWixKKSxRUS5maW5pc2hGb290ZXJCdWZmZXIoWixRUS5lbmRGb290ZXIoWikpLFouYXNVaW50OEFycmF5KCl9Z2V0IG51bVJlY29yZEJhdGNoZXMoKXtyZXR1cm4gdGhpcy5fcmVjb3JkQmF0Y2hlcy5sZW5ndGh9Z2V0IG51bURpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9kaWN0aW9uYXJ5QmF0Y2hlcy5sZW5ndGh9Y29uc3RydWN0b3IoJCxaPWkwLlY1LFEsWCl7dGhpcy5zY2hlbWE9JCx0aGlzLnZlcnNpb249WixRJiYodGhpcy5fcmVjb3JkQmF0Y2hlcz1RKSxYJiYodGhpcy5fZGljdGlvbmFyeUJhdGNoZXM9WCl9KnJlY29yZEJhdGNoZXMoKXtmb3IobGV0ICQsWj0tMSxRPXRoaXMubnVtUmVjb3JkQmF0Y2hlczsrK1o8UTspaWYoJD10aGlzLmdldFJlY29yZEJhdGNoKFopKXlpZWxkICR9KmRpY3Rpb25hcnlCYXRjaGVzKCl7Zm9yKGxldCAkLFo9LTEsUT10aGlzLm51bURpY3Rpb25hcmllczsrK1o8UTspaWYoJD10aGlzLmdldERpY3Rpb25hcnlCYXRjaChaKSl5aWVsZCAkfWdldFJlY29yZEJhdGNoKCQpe3JldHVybiAkPj0wJiYkPHRoaXMubnVtUmVjb3JkQmF0Y2hlcyYmdGhpcy5fcmVjb3JkQmF0Y2hlc1skXXx8bnVsbH1nZXREaWN0aW9uYXJ5QmF0Y2goJCl7cmV0dXJuICQ+PTAmJiQ8dGhpcy5udW1EaWN0aW9uYXJpZXMmJnRoaXMuX2RpY3Rpb25hcnlCYXRjaGVzWyRdfHxudWxsfX1jbGFzcyBFWHtzdGF0aWMgZGVjb2RlKCQpe3JldHVybiBuZXcgRVgoJC5tZXRhRGF0YUxlbmd0aCgpLCQuYm9keUxlbmd0aCgpLCQub2Zmc2V0KCkpfXN0YXRpYyBlbmNvZGUoJCxaKXtsZXR7bWV0YURhdGFMZW5ndGg6UX09WixYPUJpZ0ludChaLm9mZnNldCksSj1CaWdJbnQoWi5ib2R5TGVuZ3RoKTtyZXR1cm4gelcuY3JlYXRlQmxvY2soJCxYLFEsSil9Y29uc3RydWN0b3IoJCxaLFEpe3RoaXMubWV0YURhdGFMZW5ndGg9JCx0aGlzLm9mZnNldD1jMChRKSx0aGlzLmJvZHlMZW5ndGg9YzAoWil9fXZhciBhTyx0TyxNUDt2YXIgSzI9TygoKT0+e0ZQKCk7eTAoKTt2WigpO3UkKCk7cyQoKTthTz1zSix0Tz1VWjtNUD1jbGFzcyBNUCBleHRlbmRzIE5Ke2dldCBudW1SZWNvcmRCYXRjaGVzKCl7cmV0dXJuIHRoaXMuX2Zvb3Rlci5yZWNvcmRCYXRjaGVzTGVuZ3RoKCl9Z2V0IG51bURpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9mb290ZXIuZGljdGlvbmFyaWVzTGVuZ3RoKCl9Y29uc3RydWN0b3IoJCxaKXtzdXBlcigkLFoudmVyc2lvbigpKTt0aGlzLl9mb290ZXI9Wn1nZXRSZWNvcmRCYXRjaCgkKXtpZigkPj0wJiYkPHRoaXMubnVtUmVjb3JkQmF0Y2hlcyl7bGV0IFo9dGhpcy5fZm9vdGVyLnJlY29yZEJhdGNoZXMoJCk7aWYoWilyZXR1cm4gRVguZGVjb2RlKFopfXJldHVybiBudWxsfWdldERpY3Rpb25hcnlCYXRjaCgkKXtpZigkPj0wJiYkPHRoaXMubnVtRGljdGlvbmFyaWVzKXtsZXQgWj10aGlzLl9mb290ZXIuZGljdGlvbmFyaWVzKCQpO2lmKFopcmV0dXJuIEVYLmRlY29kZShaKX1yZXR1cm4gbnVsbH19fSk7Y2xhc3MgZyR7Y29uc3RydWN0b3IoKXt0aGlzLmJiPW51bGwsdGhpcy5iYl9wb3M9MH1fX2luaXQoJCxaKXtyZXR1cm4gdGhpcy5iYl9wb3M9JCx0aGlzLmJiPVosdGhpc31zdGF0aWMgZ2V0Um9vdEFzTWVzc2FnZSgkLFope3JldHVybihafHxuZXcgZyQpLl9faW5pdCgkLnJlYWRJbnQzMigkLnBvc2l0aW9uKCkpKyQucG9zaXRpb24oKSwkKX1zdGF0aWMgZ2V0U2l6ZVByZWZpeGVkUm9vdEFzTWVzc2FnZSgkLFope3JldHVybiAkLnNldFBvc2l0aW9uKCQucG9zaXRpb24oKSt0KSwoWnx8bmV3IGckKS5fX2luaXQoJC5yZWFkSW50MzIoJC5wb3NpdGlvbigpKSskLnBvc2l0aW9uKCksJCl9dmVyc2lvbigpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNCk7cmV0dXJuICQ/dGhpcy5iYi5yZWFkSW50MTYodGhpcy5iYl9wb3MrJCk6aTAuVjF9aGVhZGVyVHlwZSgpe2xldCAkPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsNik7cmV0dXJuICQ/dGhpcy5iYi5yZWFkVWludDgodGhpcy5iYl9wb3MrJCk6VDAuTk9ORX1oZWFkZXIoJCl7bGV0IFo9dGhpcy5iYi5fX29mZnNldCh0aGlzLmJiX3Bvcyw4KTtyZXR1cm4gWj90aGlzLmJiLl9fdW5pb24oJCx0aGlzLmJiX3BvcytaKTpudWxsfWJvZHlMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEwKTtyZXR1cm4gJD90aGlzLmJiLnJlYWRJbnQ2NCh0aGlzLmJiX3BvcyskKTpCaWdJbnQoIjAiKX1jdXN0b21NZXRhZGF0YSgkLFope2xldCBRPXRoaXMuYmIuX19vZmZzZXQodGhpcy5iYl9wb3MsMTIpO3JldHVybiBRPyhafHxuZXcgSyQpLl9faW5pdCh0aGlzLmJiLl9faW5kaXJlY3QodGhpcy5iYi5fX3ZlY3Rvcih0aGlzLmJiX3BvcytRKSskKjQpLHRoaXMuYmIpOm51bGx9Y3VzdG9tTWV0YWRhdGFMZW5ndGgoKXtsZXQgJD10aGlzLmJiLl9fb2Zmc2V0KHRoaXMuYmJfcG9zLDEyKTtyZXR1cm4gJD90aGlzLmJiLl9fdmVjdG9yX2xlbih0aGlzLmJiX3BvcyskKTowfXN0YXRpYyBzdGFydE1lc3NhZ2UoJCl7JC5zdGFydE9iamVjdCg1KX1zdGF0aWMgYWRkVmVyc2lvbigkLFopeyQuYWRkRmllbGRJbnQxNigwLFosaTAuVjEpfXN0YXRpYyBhZGRIZWFkZXJUeXBlKCQsWil7JC5hZGRGaWVsZEludDgoMSxaLFQwLk5PTkUpfXN0YXRpYyBhZGRIZWFkZXIoJCxaKXskLmFkZEZpZWxkT2Zmc2V0KDIsWiwwKX1zdGF0aWMgYWRkQm9keUxlbmd0aCgkLFopeyQuYWRkRmllbGRJbnQ2NCgzLFosQmlnSW50KCIwIikpfXN0YXRpYyBhZGRDdXN0b21NZXRhZGF0YSgkLFopeyQuYWRkRmllbGRPZmZzZXQoNCxaLDApfXN0YXRpYyBjcmVhdGVDdXN0b21NZXRhZGF0YVZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLmxlbmd0aCw0KTtmb3IobGV0IFE9Wi5sZW5ndGgtMTtRPj0wO1EtLSkkLmFkZE9mZnNldChaW1FdKTtyZXR1cm4gJC5lbmRWZWN0b3IoKX1zdGF0aWMgc3RhcnRDdXN0b21NZXRhZGF0YVZlY3RvcigkLFopeyQuc3RhcnRWZWN0b3IoNCxaLDQpfXN0YXRpYyBlbmRNZXNzYWdlKCQpe3JldHVybiAkLmVuZE9iamVjdCgpfXN0YXRpYyBmaW5pc2hNZXNzYWdlQnVmZmVyKCQsWil7JC5maW5pc2goWil9c3RhdGljIGZpbmlzaFNpemVQcmVmaXhlZE1lc3NhZ2VCdWZmZXIoJCxaKXskLmZpbmlzaChaLHZvaWQgMCwhMCl9c3RhdGljIGNyZWF0ZU1lc3NhZ2UoJCxaLFEsWCxKLFcpe3JldHVybiBnJC5zdGFydE1lc3NhZ2UoJCksZyQuYWRkVmVyc2lvbigkLFopLGckLmFkZEhlYWRlclR5cGUoJCxRKSxnJC5hZGRIZWFkZXIoJCxYKSxnJC5hZGRCb2R5TGVuZ3RoKCQsSiksZyQuYWRkQ3VzdG9tTWV0YWRhdGEoJCxXKSxnJC5lbmRNZXNzYWdlKCQpfX12YXIgTFA9TygoKT0+e3kwKCk7czYoKTttSygpO1k0KCl9KTt2YXIgQVAsYzQ7dmFyIERQPU8oKCk9PntSOCgpO3k5KCk7SDQoKTtJSygpO0k5KCk7XzkoKTtnOSgpO1Q5KCk7YjkoKTttOSgpO3g5KCk7d0soKTtFSygpO2dLKCk7eEsoKTtfSygpO1NLKCk7djkoKTtoOSgpO3ZLKCk7UksoKTtCSygpO2tLKCk7VEsoKTtBUD1jbGFzcyBBUCBleHRlbmRzIEgwe3Zpc2l0KCQsWil7cmV0dXJuICQ9PW51bGx8fFo9PW51bGw/dm9pZCAwOnN1cGVyLnZpc2l0KCQsWil9dmlzaXROdWxsKCQsWil7cmV0dXJuIFdKLnN0YXJ0TnVsbChaKSxXSi5lbmROdWxsKFopfXZpc2l0SW50KCQsWil7cmV0dXJuIFJaLnN0YXJ0SW50KFopLFJaLmFkZEJpdFdpZHRoKFosJC5iaXRXaWR0aCksUlouYWRkSXNTaWduZWQoWiwkLmlzU2lnbmVkKSxSWi5lbmRJbnQoWil9dmlzaXRGbG9hdCgkLFope3JldHVybiBuUS5zdGFydEZsb2F0aW5nUG9pbnQoWiksblEuYWRkUHJlY2lzaW9uKFosJC5wcmVjaXNpb24pLG5RLmVuZEZsb2F0aW5nUG9pbnQoWil9dmlzaXRCaW5hcnkoJCxaKXtyZXR1cm4gZVguc3RhcnRCaW5hcnkoWiksZVguZW5kQmluYXJ5KFopfXZpc2l0QmluYXJ5VmlldygkLFope3JldHVybiAkSi5zdGFydEJpbmFyeVZpZXcoWiksJEouZW5kQmluYXJ5VmlldyhaKX12aXNpdExhcmdlQmluYXJ5KCQsWil7cmV0dXJuIFFKLnN0YXJ0TGFyZ2VCaW5hcnkoWiksUUouZW5kTGFyZ2VCaW5hcnkoWil9dmlzaXRCb29sKCQsWil7cmV0dXJuIFpKLnN0YXJ0Qm9vbChaKSxaSi5lbmRCb29sKFopfXZpc2l0VXRmOCgkLFope3JldHVybiBHSi5zdGFydFV0ZjgoWiksR0ouZW5kVXRmOChaKX12aXNpdFV0ZjhWaWV3KCQsWil7cmV0dXJuIEtKLnN0YXJ0VXRmOFZpZXcoWiksS0ouZW5kVXRmOFZpZXcoWil9dmlzaXRMYXJnZVV0ZjgoJCxaKXtyZXR1cm4gWEouc3RhcnRMYXJnZVV0ZjgoWiksWEouZW5kTGFyZ2VVdGY4KFopfXZpc2l0RGVjaW1hbCgkLFope3JldHVybiBFWi5zdGFydERlY2ltYWwoWiksRVouYWRkU2NhbGUoWiwkLnNjYWxlKSxFWi5hZGRQcmVjaXNpb24oWiwkLnByZWNpc2lvbiksRVouYWRkQml0V2lkdGgoWiwkLmJpdFdpZHRoKSxFWi5lbmREZWNpbWFsKFopfXZpc2l0RGF0ZSgkLFope3JldHVybiBwUS5zdGFydERhdGUoWikscFEuYWRkVW5pdChaLCQudW5pdCkscFEuZW5kRGF0ZShaKX12aXNpdFRpbWUoJCxaKXtyZXR1cm4gaVouc3RhcnRUaW1lKFopLGlaLmFkZFVuaXQoWiwkLnVuaXQpLGlaLmFkZEJpdFdpZHRoKFosJC5iaXRXaWR0aCksaVouZW5kVGltZShaKX12aXNpdFRpbWVzdGFtcCgkLFope2xldCBRPSQudGltZXpvbmUmJlouY3JlYXRlU3RyaW5nKCQudGltZXpvbmUpfHx2b2lkIDA7aWYoclouc3RhcnRUaW1lc3RhbXAoWiksclouYWRkVW5pdChaLCQudW5pdCksUSE9PXZvaWQgMClyWi5hZGRUaW1lem9uZShaLFEpO3JldHVybiByWi5lbmRUaW1lc3RhbXAoWil9dmlzaXRJbnRlcnZhbCgkLFope3JldHVybiBvUS5zdGFydEludGVydmFsKFopLG9RLmFkZFVuaXQoWiwkLnVuaXQpLG9RLmVuZEludGVydmFsKFopfXZpc2l0RHVyYXRpb24oJCxaKXtyZXR1cm4gY1Euc3RhcnREdXJhdGlvbihaKSxjUS5hZGRVbml0KFosJC51bml0KSxjUS5lbmREdXJhdGlvbihaKX12aXNpdExpc3QoJCxaKXtyZXR1cm4gSkouc3RhcnRMaXN0KFopLEpKLmVuZExpc3QoWil9dmlzaXRTdHJ1Y3QoJCxaKXtyZXR1cm4gWUouc3RhcnRTdHJ1Y3RfKFopLFlKLmVuZFN0cnVjdF8oWil9dmlzaXRVbmlvbigkLFope3daLnN0YXJ0VHlwZUlkc1ZlY3RvcihaLCQudHlwZUlkcy5sZW5ndGgpO2xldCBRPXdaLmNyZWF0ZVR5cGVJZHNWZWN0b3IoWiwkLnR5cGVJZHMpO3JldHVybiB3Wi5zdGFydFVuaW9uKFopLHdaLmFkZE1vZGUoWiwkLm1vZGUpLHdaLmFkZFR5cGVJZHMoWixRKSx3Wi5lbmRVbmlvbihaKX12aXNpdERpY3Rpb25hcnkoJCxaKXtsZXQgUT10aGlzLnZpc2l0KCQuaW5kaWNlcyxaKTtpZihMOC5zdGFydERpY3Rpb25hcnlFbmNvZGluZyhaKSxMOC5hZGRJZChaLEJpZ0ludCgkLmlkKSksTDguYWRkSXNPcmRlcmVkKFosJC5pc09yZGVyZWQpLFEhPT12b2lkIDApTDguYWRkSW5kZXhUeXBlKFosUSk7cmV0dXJuIEw4LmVuZERpY3Rpb25hcnlFbmNvZGluZyhaKX12aXNpdEZpeGVkU2l6ZUJpbmFyeSgkLFope3JldHVybiBsUS5zdGFydEZpeGVkU2l6ZUJpbmFyeShaKSxsUS5hZGRCeXRlV2lkdGgoWiwkLmJ5dGVXaWR0aCksbFEuZW5kRml4ZWRTaXplQmluYXJ5KFopfXZpc2l0Rml4ZWRTaXplTGlzdCgkLFope3JldHVybiBkUS5zdGFydEZpeGVkU2l6ZUxpc3QoWiksZFEuYWRkTGlzdFNpemUoWiwkLmxpc3RTaXplKSxkUS5lbmRGaXhlZFNpemVMaXN0KFopfXZpc2l0TWFwKCQsWil7cmV0dXJuIHNRLnN0YXJ0TWFwKFopLHNRLmFkZEtleXNTb3J0ZWQoWiwkLmtleXNTb3J0ZWQpLHNRLmVuZE1hcChaKX19O2M0PW5ldyBBUH0pO2Z1bmN0aW9uIFZQKCQsWj1uZXcgTWFwKXtyZXR1cm4gbmV3IFEwKGVPKCQsWiksbDQoJC5tZXRhZGF0YSksWil9ZnVuY3Rpb24gSDIoJCl7cmV0dXJuIG5ldyBhJCgkLmNvdW50LEVQKCQuY29sdW1ucyksd1AoJC5jb2x1bW5zKSxudWxsLFNQKCQuY29sdW1ucykpfWZ1bmN0aW9uIFJQKCQpe3JldHVybiBuZXcgeVooSDIoJC5kYXRhKSwkLmlkLCQuaXNEZWx0YSl9ZnVuY3Rpb24gZU8oJCxaKXtyZXR1cm4oJC5maWVsZHN8fFtdKS5maWx0ZXIoQm9vbGVhbikubWFwKChRKT0+YS5mcm9tSlNPTihRLFopKX1mdW5jdGlvbiBPUCgkLFope3JldHVybigkLmNoaWxkcmVufHxbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgoUSk9PmEuZnJvbUpTT04oUSxaKSl9ZnVuY3Rpb24gRVAoJCl7cmV0dXJuKCR8fFtdKS5yZWR1Y2UoKFosUSk9PlsuLi5aLG5ldyB3OChRLmNvdW50LCRDKFEuVkFMSURJVFkpKSwuLi5FUChRLmNoaWxkcmVuKV0sW10pfWZ1bmN0aW9uIHdQKCQsWj1bXSl7Zm9yKGxldCBRPS0xLFg9KCR8fFtdKS5sZW5ndGg7KytRPFg7KXtsZXQgSj0kW1FdO2lmKEouVkFMSURJVFkmJloucHVzaChuZXcgeCQoWi5sZW5ndGgsSi5WQUxJRElUWS5sZW5ndGgpKSxKLlRZUEVfSUQmJloucHVzaChuZXcgeCQoWi5sZW5ndGgsSi5UWVBFX0lELmxlbmd0aCkpLEouT0ZGU0VUJiZaLnB1c2gobmV3IHgkKFoubGVuZ3RoLEouT0ZGU0VULmxlbmd0aCkpLEouREFUQSYmWi5wdXNoKG5ldyB4JChaLmxlbmd0aCxKLkRBVEEubGVuZ3RoKSksSi5WSUVXUyYmWi5wdXNoKG5ldyB4JChaLmxlbmd0aCxKLlZJRVdTLmxlbmd0aCkpLEouVkFSSUFESUNfREFUQV9CVUZGRVJTKWZvcihsZXQgVyBvZiBKLlZBUklBRElDX0RBVEFfQlVGRkVSUylaLnB1c2gobmV3IHgkKFoubGVuZ3RoLFcubGVuZ3RoKSk7Wj13UChKLmNoaWxkcmVuLFopfXJldHVybiBafWZ1bmN0aW9uICRDKCQpe3JldHVybigkfHxbXSkucmVkdWNlKChaLFEpPT5aKyArKFE9PT0wKSwwKX1mdW5jdGlvbiBTUCgkKXtyZXR1cm4oJHx8W10pLnJlZHVjZSgoWixRKT0+Wy4uLlosLi4uUS5WQVJJQURJQ19EQVRBX0JVRkZFUlM/W1EuVkFSSUFESUNfREFUQV9CVUZGRVJTLmxlbmd0aF06W10sLi4uU1AoUS5jaGlsZHJlbildLFtdKX1mdW5jdGlvbiBCUCgkLFope2xldCBRLFgsSixXLFksRztpZighWnx8IShXPSQuZGljdGlvbmFyeSkpWT1qUCgkLE9QKCQsWikpLEo9bmV3IGEoJC5uYW1lLFksJC5udWxsYWJsZSxsNCgkLm1ldGFkYXRhKSk7ZWxzZSBpZighWi5oYXMoUT1XLmlkKSlYPShYPVcuaW5kZXhUeXBlKT9DUChYKTpuZXcgR1osWi5zZXQoUSxZPWpQKCQsT1AoJCxaKSkpLEc9bmV3IFlaKFksWCxRLFcuaXNPcmRlcmVkKSxKPW5ldyBhKCQubmFtZSxHLCQubnVsbGFibGUsbDQoJC5tZXRhZGF0YSkpO2Vsc2UgWD0oWD1XLmluZGV4VHlwZSk/Q1AoWCk6bmV3IEdaLEc9bmV3IFlaKFouZ2V0KFEpLFgsUSxXLmlzT3JkZXJlZCksSj1uZXcgYSgkLm5hbWUsRywkLm51bGxhYmxlLGw0KCQubWV0YWRhdGEpKTtyZXR1cm4gSnx8bnVsbH1mdW5jdGlvbiBsNCgkPVtdKXtyZXR1cm4gbmV3IE1hcCgkLm1hcCgoe2tleTpaLHZhbHVlOlF9KT0+W1osUV0pKX1mdW5jdGlvbiBDUCgkKXtyZXR1cm4gbmV3IGkkKCQuaXNTaWduZWQsJC5iaXRXaWR0aCl9ZnVuY3Rpb24galAoJCxaKXtsZXQgUT0kLnR5cGUubmFtZTtzd2l0Y2goUSl7Y2FzZSJOT05FIjpyZXR1cm4gbmV3IGokO2Nhc2UibnVsbCI6cmV0dXJuIG5ldyBqJDtjYXNlImJpbmFyeSI6cmV0dXJuIG5ldyB4WjtjYXNlImxhcmdlYmluYXJ5IjpyZXR1cm4gbmV3IHJRO2Nhc2UiYmluYXJ5dmlldyI6cmV0dXJuIG5ldyBSMDtjYXNlInV0ZjgiOnJldHVybiBuZXcgVCQ7Y2FzZSJsYXJnZXV0ZjgiOnJldHVybiBuZXcgYVE7Y2FzZSJ1dGY4dmlldyI6cmV0dXJuIG5ldyBPUTtjYXNlImJvb2wiOnJldHVybiBuZXcgViQ7Y2FzZSJsaXN0IjpyZXR1cm4gbmV3IExaKChafHxbXSlbMF0pO2Nhc2Uic3RydWN0IjpyZXR1cm4gbmV3IGowKFp8fFtdKTtjYXNlInN0cnVjdF8iOnJldHVybiBuZXcgajAoWnx8W10pfXN3aXRjaChRKXtjYXNlImludCI6e2xldCBYPSQudHlwZTtyZXR1cm4gbmV3IGkkKFguaXNTaWduZWQsWC5iaXRXaWR0aCl9Y2FzZSJmbG9hdGluZ3BvaW50Ijp7bGV0IFg9JC50eXBlO3JldHVybiBuZXcgaVEoSiRbWC5wcmVjaXNpb25dKX1jYXNlImRlY2ltYWwiOntsZXQgWD0kLnR5cGU7cmV0dXJuIG5ldyB0UShYLnNjYWxlLFgucHJlY2lzaW9uLFguYml0V2lkdGgpfWNhc2UiZGF0ZSI6e2xldCBYPSQudHlwZTtyZXR1cm4gbmV3IE84KHIwW1gudW5pdF0pfWNhc2UidGltZSI6e2xldCBYPSQudHlwZTtyZXR1cm4gbmV3IEM4KGxbWC51bml0XSxYLmJpdFdpZHRoKX1jYXNlInRpbWVzdGFtcCI6e2xldCBYPSQudHlwZTtyZXR1cm4gbmV3IHRaKGxbWC51bml0XSxYLnRpbWV6b25lKX1jYXNlImludGVydmFsIjp7bGV0IFg9JC50eXBlO3JldHVybiBuZXcgajgoczBbWC51bml0XSl9Y2FzZSJkdXJhdGlvbiI6e2xldCBYPSQudHlwZTtyZXR1cm4gbmV3IFY4KGxbWC51bml0XSl9Y2FzZSJ1bmlvbiI6e2xldCBYPSQudHlwZSxbSiwuLi5XXT0oWC5tb2RlKyIiKS50b0xvd2VyQ2FzZSgpLFk9Si50b1VwcGVyQ2FzZSgpK1cuam9pbigiIik7cmV0dXJuIG5ldyBDUShtMFtZXSxYLnR5cGVJZHN8fFtdLFp8fFtdKX1jYXNlImZpeGVkc2l6ZWJpbmFyeSI6e2xldCBYPSQudHlwZTtyZXR1cm4gbmV3IGVRKFguYnl0ZVdpZHRoKX1jYXNlImZpeGVkc2l6ZWxpc3QiOntsZXQgWD0kLnR5cGU7cmV0dXJuIG5ldyBqUShYLmxpc3RTaXplLChafHxbXSlbMF0pfWNhc2UibWFwIjp7bGV0IFg9JC50eXBlO3JldHVybiBuZXcgZVooKFp8fFtdKVswXSxYLmtleXNTb3J0ZWQpfX10aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkIHR5cGU6ICIke1F9ImApfXZhciBrUD1PKCgpPT57dlooKTtIJCgpO1g2KCk7dSQoKX0pO2NsYXNzIEtae3N0YXRpYyBmcm9tSlNPTigkLFope2xldCBRPW5ldyBLWigwLGkwLlY1LFopO3JldHVybiBRLl9jcmVhdGVIZWFkZXI9WEMoJCxaKSxRfXN0YXRpYyBkZWNvZGUoJCl7JD1uZXcgUUMoJDAoJCkpO2xldCBaPWckLmdldFJvb3RBc01lc3NhZ2UoJCksUT1aLmJvZHlMZW5ndGgoKSxYPVoudmVyc2lvbigpLEo9Wi5oZWFkZXJUeXBlKCksVz1VQyhaKSxZPW5ldyBLWihRLFgsSix2b2lkIDAsVyk7cmV0dXJuIFkuX2NyZWF0ZUhlYWRlcj1KQyhaLEopLFl9c3RhdGljIGVuY29kZSgkKXtsZXQgWj1uZXcgWkMsUT0tMTtpZigkLmlzU2NoZW1hKCkpUT1RMC5lbmNvZGUoWiwkLmhlYWRlcigpKTtlbHNlIGlmKCQuaXNSZWNvcmRCYXRjaCgpKVE9YSQuZW5jb2RlKFosJC5oZWFkZXIoKSk7ZWxzZSBpZigkLmlzRGljdGlvbmFyeUJhdGNoKCkpUT15Wi5lbmNvZGUoWiwkLmhlYWRlcigpKTtsZXQgWD0hKCQubWV0YWRhdGEmJiQubWV0YWRhdGEuc2l6ZT4wKT8tMTpnJC5jcmVhdGVDdXN0b21NZXRhZGF0YVZlY3RvcihaLFsuLi4kLm1ldGFkYXRhXS5tYXAoKFtKLFddKT0+e2xldCBZPVouY3JlYXRlU3RyaW5nKGAke0p9YCksRz1aLmNyZWF0ZVN0cmluZyhgJHtXfWApO3JldHVybiBLJC5zdGFydEtleVZhbHVlKFopLEskLmFkZEtleShaLFkpLEskLmFkZFZhbHVlKFosRyksSyQuZW5kS2V5VmFsdWUoWil9KSk7aWYoZyQuc3RhcnRNZXNzYWdlKFopLGckLmFkZFZlcnNpb24oWixpMC5WNSksZyQuYWRkSGVhZGVyKFosUSksZyQuYWRkSGVhZGVyVHlwZShaLCQuaGVhZGVyVHlwZSksZyQuYWRkQm9keUxlbmd0aChaLEJpZ0ludCgkLmJvZHlMZW5ndGgpKSxYIT09LTEpZyQuYWRkQ3VzdG9tTWV0YWRhdGEoWixYKTtyZXR1cm4gZyQuZmluaXNoTWVzc2FnZUJ1ZmZlcihaLGckLmVuZE1lc3NhZ2UoWikpLFouYXNVaW50OEFycmF5KCl9c3RhdGljIGZyb20oJCxaPTApe2lmKCQgaW5zdGFuY2VvZiBRMClyZXR1cm4gbmV3IEtaKDAsaTAuVjUsVDAuU2NoZW1hLCQpO2lmKCQgaW5zdGFuY2VvZiBhJClyZXR1cm4gbmV3IEtaKFosaTAuVjUsVDAuUmVjb3JkQmF0Y2gsJCwkLm1ldGFkYXRhKTtpZigkIGluc3RhbmNlb2YgeVopcmV0dXJuIG5ldyBLWihaLGkwLlY1LFQwLkRpY3Rpb25hcnlCYXRjaCwkKTt0aHJvdyBFcnJvcihgVW5yZWNvZ25pemVkIE1lc3NhZ2UgaGVhZGVyOiAkeyR9YCl9Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy5oZWFkZXJUeXBlfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0IGhlYWRlclR5cGUoKXtyZXR1cm4gdGhpcy5faGVhZGVyVHlwZX1nZXQgY29tcHJlc3Npb24oKXtyZXR1cm4gdGhpcy5fY29tcHJlc3Npb259Z2V0IGJvZHlMZW5ndGgoKXtyZXR1cm4gdGhpcy5fYm9keUxlbmd0aH1nZXQgbWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5fbWV0YWRhdGF9aGVhZGVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUhlYWRlcigpfWlzU2NoZW1hKCl7cmV0dXJuIHRoaXMuaGVhZGVyVHlwZT09PVQwLlNjaGVtYX1pc1JlY29yZEJhdGNoKCl7cmV0dXJuIHRoaXMuaGVhZGVyVHlwZT09PVQwLlJlY29yZEJhdGNofWlzRGljdGlvbmFyeUJhdGNoKCl7cmV0dXJuIHRoaXMuaGVhZGVyVHlwZT09PVQwLkRpY3Rpb25hcnlCYXRjaH1jb25zdHJ1Y3RvcigkLFosUSxYLEope3RoaXMuX3ZlcnNpb249Wix0aGlzLl9oZWFkZXJUeXBlPVEsdGhpcy5ib2R5PW5ldyBVaW50OEFycmF5KDApLHRoaXMuX2NvbXByZXNzaW9uPVg9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLmNvbXByZXNzaW9uLFgmJih0aGlzLl9jcmVhdGVIZWFkZXI9KCk9PlgpLHRoaXMuX2JvZHlMZW5ndGg9YzAoJCksdGhpcy5fbWV0YWRhdGE9Snx8bmV3IE1hcH19Y2xhc3MgYSR7Z2V0IG5vZGVzKCl7cmV0dXJuIHRoaXMuX25vZGVzfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofWdldCBidWZmZXJzKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnN9Z2V0IGNvbXByZXNzaW9uKCl7cmV0dXJuIHRoaXMuX2NvbXByZXNzaW9ufWdldCB2YXJpYWRpY0J1ZmZlckNvdW50cygpe3JldHVybiB0aGlzLl92YXJpYWRpY0J1ZmZlckNvdW50c31nZXQgbWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5fbWV0YWRhdGF9Y29uc3RydWN0b3IoJCxaLFEsWCxKPVtdLFcpe3RoaXMuX25vZGVzPVosdGhpcy5fYnVmZmVycz1RLHRoaXMuX2xlbmd0aD1jMCgkKSx0aGlzLl9jb21wcmVzc2lvbj1YLHRoaXMuX3ZhcmlhZGljQnVmZmVyQ291bnRzPUosdGhpcy5fbWV0YWRhdGE9V3x8bmV3IE1hcH19Y2xhc3MgeVp7Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF9Z2V0IGlzRGVsdGEoKXtyZXR1cm4gdGhpcy5faXNEZWx0YX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGh9Z2V0IG5vZGVzKCl7cmV0dXJuIHRoaXMuZGF0YS5ub2Rlc31nZXQgYnVmZmVycygpe3JldHVybiB0aGlzLmRhdGEuYnVmZmVyc31jb25zdHJ1Y3RvcigkLFosUT0hMSl7dGhpcy5fZGF0YT0kLHRoaXMuX2lzRGVsdGE9USx0aGlzLl9pZD1jMChaKX19Y2xhc3MgeCR7Y29uc3RydWN0b3IoJCxaKXt0aGlzLm9mZnNldD1jMCgkKSx0aGlzLmxlbmd0aD1jMChaKX19Y2xhc3Mgdzh7Y29uc3RydWN0b3IoJCxaKXt0aGlzLmxlbmd0aD1jMCgkKSx0aGlzLm51bGxDb3VudD1jMChaKX19Y2xhc3MgcVd7Y29uc3RydWN0b3IoJCxaPWlKLkJVRkZFUil7dGhpcy50eXBlPSQsdGhpcy5tZXRob2Q9Wn19ZnVuY3Rpb24gWEMoJCxaKXtyZXR1cm4oKT0+e3N3aXRjaChaKXtjYXNlIFQwLlNjaGVtYTpyZXR1cm4gUTAuZnJvbUpTT04oJCk7Y2FzZSBUMC5SZWNvcmRCYXRjaDpyZXR1cm4gYSQuZnJvbUpTT04oJCk7Y2FzZSBUMC5EaWN0aW9uYXJ5QmF0Y2g6cmV0dXJuIHlaLmZyb21KU09OKCQpfXRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgTWVzc2FnZSB0eXBlOiB7IG5hbWU6ICR7VDBbWl19LCB0eXBlOiAke1p9IH1gKX19ZnVuY3Rpb24gSkMoJCxaKXtyZXR1cm4oKT0+e3N3aXRjaChaKXtjYXNlIFQwLlNjaGVtYTpyZXR1cm4gUTAuZGVjb2RlKCQuaGVhZGVyKG5ldyBfJCksbmV3IE1hcCwkLnZlcnNpb24oKSk7Y2FzZSBUMC5SZWNvcmRCYXRjaDpyZXR1cm4gYSQuZGVjb2RlKCQuaGVhZGVyKG5ldyBNWiksJC52ZXJzaW9uKCkpO2Nhc2UgVDAuRGljdGlvbmFyeUJhdGNoOnJldHVybiB5Wi5kZWNvZGUoJC5oZWFkZXIobmV3IG84KSwkLnZlcnNpb24oKSl9dGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCBNZXNzYWdlIHR5cGU6IHsgbmFtZTogJHtUMFtaXX0sIHR5cGU6ICR7Wn0gfWApfX1mdW5jdGlvbiBXQygkLFo9bmV3IE1hcCxRPWkwLlY1KXtsZXQgWD1GQygkLFopO3JldHVybiBuZXcgUTAoWCxkNCgkKSxaLFEpfWZ1bmN0aW9uIFlDKCQsWj1pMC5WNSl7cmV0dXJuIG5ldyBhJCgkLmxlbmd0aCgpLHpDKCQpLHFDKCQsWiksZ1AoJC5jb21wcmVzc2lvbigpKSxQQygkKSl9ZnVuY3Rpb24gR0MoJCxaPWkwLlY1KXtyZXR1cm4gbmV3IHlaKGEkLmRlY29kZSgkLmRhdGEoKSxaKSwkLmlkKCksJC5pc0RlbHRhKCkpfWZ1bmN0aW9uIEtDKCQpe3JldHVybiBuZXcgeCQoJC5vZmZzZXQoKSwkLmxlbmd0aCgpKX1mdW5jdGlvbiBIQygkKXtyZXR1cm4gbmV3IHc4KCQubGVuZ3RoKCksJC5udWxsQ291bnQoKSl9ZnVuY3Rpb24gekMoJCl7bGV0IFo9W107Zm9yKGxldCBRLFg9LTEsSj0tMSxXPSQubm9kZXNMZW5ndGgoKTsrK1g8VzspaWYoUT0kLm5vZGVzKFgpKVpbKytKXT13OC5kZWNvZGUoUSk7cmV0dXJuIFp9ZnVuY3Rpb24gcUMoJCxaKXtsZXQgUT1bXTtmb3IobGV0IFgsSj0tMSxXPS0xLFk9JC5idWZmZXJzTGVuZ3RoKCk7KytKPFk7KWlmKFg9JC5idWZmZXJzKEopKXtpZihaPGkwLlY0KVguYmJfcG9zKz04KihKKzEpO1FbKytXXT14JC5kZWNvZGUoWCl9cmV0dXJuIFF9ZnVuY3Rpb24gUEMoJCl7bGV0IFo9W10sUT1NYXRoLnRydW5jKCQudmFyaWFkaWNCdWZmZXJDb3VudHNMZW5ndGgoKSk7Zm9yKGxldCBYPTA7WDxROysrWClaLnB1c2goYzAoJC52YXJpYWRpY0J1ZmZlckNvdW50cyhYKSkpO3JldHVybiBafWZ1bmN0aW9uIEZDKCQsWil7bGV0IFE9W107Zm9yKGxldCBYLEo9LTEsVz0tMSxZPSQuZmllbGRzTGVuZ3RoKCk7KytKPFk7KWlmKFg9JC5maWVsZHMoSikpUVsrK1ddPWEuZGVjb2RlKFgsWik7cmV0dXJuIFF9ZnVuY3Rpb24gSVAoJCxaKXtsZXQgUT1bXTtmb3IobGV0IFgsSj0tMSxXPS0xLFk9JC5jaGlsZHJlbkxlbmd0aCgpOysrSjxZOylpZihYPSQuY2hpbGRyZW4oSikpUVsrK1ddPWEuZGVjb2RlKFgsWik7cmV0dXJuIFF9ZnVuY3Rpb24gTkMoJCxaKXtsZXQgUSxYLEosVyxZLEc7aWYoIVp8fCEoRz0kLmRpY3Rpb25hcnkoKSkpSj1UUCgkLElQKCQsWikpLFg9bmV3IGEoJC5uYW1lKCksSiwkLm51bGxhYmxlKCksZDQoJCkpO2Vsc2UgaWYoIVouaGFzKFE9YzAoRy5pZCgpKSkpVz0oVz1HLmluZGV4VHlwZSgpKT9fUChXKTpuZXcgR1osWi5zZXQoUSxKPVRQKCQsSVAoJCxaKSkpLFk9bmV3IFlaKEosVyxRLEcuaXNPcmRlcmVkKCkpLFg9bmV3IGEoJC5uYW1lKCksWSwkLm51bGxhYmxlKCksZDQoJCkpO2Vsc2UgVz0oVz1HLmluZGV4VHlwZSgpKT9fUChXKTpuZXcgR1osWT1uZXcgWVooWi5nZXQoUSksVyxRLEcuaXNPcmRlcmVkKCkpLFg9bmV3IGEoJC5uYW1lKCksWSwkLm51bGxhYmxlKCksZDQoJCkpO3JldHVybiBYfHxudWxsfWZ1bmN0aW9uIGQ0KCQpe2xldCBaPW5ldyBNYXA7aWYoJCl7Zm9yKGxldCBRLFgsSj0tMSxXPU1hdGgudHJ1bmMoJC5jdXN0b21NZXRhZGF0YUxlbmd0aCgpKTsrK0o8VzspaWYoKFE9JC5jdXN0b21NZXRhZGF0YShKKSkmJihYPVEua2V5KCkpIT1udWxsKVouc2V0KFgsUS52YWx1ZSgpKX1yZXR1cm4gWn1mdW5jdGlvbiBVQygkKXtsZXQgWj1uZXcgTWFwO2ZvcihsZXQgUSxYLEo9LTEsVz1NYXRoLnRydW5jKCQuY3VzdG9tTWV0YWRhdGFMZW5ndGgoKSk7KytKPFc7KWlmKChRPSQuY3VzdG9tTWV0YWRhdGEoSikpJiYoWD1RLmtleSgpKSE9bnVsbClaLnNldChYLFEudmFsdWUoKSk7cmV0dXJuIFp9ZnVuY3Rpb24gX1AoJCl7cmV0dXJuIG5ldyBpJCgkLmlzU2lnbmVkKCksJC5iaXRXaWR0aCgpKX1mdW5jdGlvbiBUUCgkLFope2xldCBRPSQudHlwZVR5cGUoKTtzd2l0Y2goUSl7Y2FzZSBlMC5OT05FOnJldHVybiBuZXcgaiQ7Y2FzZSBlMC5OdWxsOnJldHVybiBuZXcgaiQ7Y2FzZSBlMC5CaW5hcnk6cmV0dXJuIG5ldyB4WjtjYXNlIGUwLkxhcmdlQmluYXJ5OnJldHVybiBuZXcgclE7Y2FzZSBlMC5CaW5hcnlWaWV3OnJldHVybiBuZXcgUjA7Y2FzZSBlMC5VdGY4OnJldHVybiBuZXcgVCQ7Y2FzZSBlMC5MYXJnZVV0Zjg6cmV0dXJuIG5ldyBhUTtjYXNlIGUwLlV0ZjhWaWV3OnJldHVybiBuZXcgT1E7Y2FzZSBlMC5Cb29sOnJldHVybiBuZXcgViQ7Y2FzZSBlMC5MaXN0OnJldHVybiBuZXcgTFooKFp8fFtdKVswXSk7Y2FzZSBlMC5TdHJ1Y3RfOnJldHVybiBuZXcgajAoWnx8W10pfXN3aXRjaChRKXtjYXNlIGUwLkludDp7bGV0IFg9JC50eXBlKG5ldyBSWik7cmV0dXJuIG5ldyBpJChYLmlzU2lnbmVkKCksWC5iaXRXaWR0aCgpKX1jYXNlIGUwLkZsb2F0aW5nUG9pbnQ6e2xldCBYPSQudHlwZShuZXcgblEpO3JldHVybiBuZXcgaVEoWC5wcmVjaXNpb24oKSl9Y2FzZSBlMC5EZWNpbWFsOntsZXQgWD0kLnR5cGUobmV3IEVaKTtyZXR1cm4gbmV3IHRRKFguc2NhbGUoKSxYLnByZWNpc2lvbigpLFguYml0V2lkdGgoKSl9Y2FzZSBlMC5EYXRlOntsZXQgWD0kLnR5cGUobmV3IHBRKTtyZXR1cm4gbmV3IE84KFgudW5pdCgpKX1jYXNlIGUwLlRpbWU6e2xldCBYPSQudHlwZShuZXcgaVopO3JldHVybiBuZXcgQzgoWC51bml0KCksWC5iaXRXaWR0aCgpKX1jYXNlIGUwLlRpbWVzdGFtcDp7bGV0IFg9JC50eXBlKG5ldyByWik7cmV0dXJuIG5ldyB0WihYLnVuaXQoKSxYLnRpbWV6b25lKCkpfWNhc2UgZTAuSW50ZXJ2YWw6e2xldCBYPSQudHlwZShuZXcgb1EpO3JldHVybiBuZXcgajgoWC51bml0KCkpfWNhc2UgZTAuRHVyYXRpb246e2xldCBYPSQudHlwZShuZXcgY1EpO3JldHVybiBuZXcgVjgoWC51bml0KCkpfWNhc2UgZTAuVW5pb246e2xldCBYPSQudHlwZShuZXcgd1opO3JldHVybiBuZXcgQ1EoWC5tb2RlKCksWC50eXBlSWRzQXJyYXkoKXx8W10sWnx8W10pfWNhc2UgZTAuRml4ZWRTaXplQmluYXJ5OntsZXQgWD0kLnR5cGUobmV3IGxRKTtyZXR1cm4gbmV3IGVRKFguYnl0ZVdpZHRoKCkpfWNhc2UgZTAuRml4ZWRTaXplTGlzdDp7bGV0IFg9JC50eXBlKG5ldyBkUSk7cmV0dXJuIG5ldyBqUShYLmxpc3RTaXplKCksKFp8fFtdKVswXSl9Y2FzZSBlMC5NYXA6e2xldCBYPSQudHlwZShuZXcgc1EpO3JldHVybiBuZXcgZVooKFp8fFtdKVswXSxYLmtleXNTb3J0ZWQoKSl9fXRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgdHlwZTogIiR7ZTBbUV19IiAoJHtRfSlgKX1mdW5jdGlvbiBnUCgkKXtyZXR1cm4gJD9uZXcgcVcoJC5jb2RlYygpLCQubWV0aG9kKCkpOm51bGx9ZnVuY3Rpb24gTUMoJCxaKXtsZXQgUT1aLmZpZWxkcy5tYXAoKFcpPT5hLmVuY29kZSgkLFcpKTtfJC5zdGFydEZpZWxkc1ZlY3RvcigkLFEubGVuZ3RoKTtsZXQgWD1fJC5jcmVhdGVGaWVsZHNWZWN0b3IoJCxRKSxKPSEoWi5tZXRhZGF0YSYmWi5tZXRhZGF0YS5zaXplPjApPy0xOl8kLmNyZWF0ZUN1c3RvbU1ldGFkYXRhVmVjdG9yKCQsWy4uLloubWV0YWRhdGFdLm1hcCgoW1csWV0pPT57bGV0IEc9JC5jcmVhdGVTdHJpbmcoYCR7V31gKSxIPSQuY3JlYXRlU3RyaW5nKGAke1l9YCk7cmV0dXJuIEskLnN0YXJ0S2V5VmFsdWUoJCksSyQuYWRkS2V5KCQsRyksSyQuYWRkVmFsdWUoJCxIKSxLJC5lbmRLZXlWYWx1ZSgkKX0pKTtpZihfJC5zdGFydFNjaGVtYSgkKSxfJC5hZGRGaWVsZHMoJCxYKSxfJC5hZGRFbmRpYW5uZXNzKCQsakM/dFguTGl0dGxlOnRYLkJpZyksSiE9PS0xKV8kLmFkZEN1c3RvbU1ldGFkYXRhKCQsSik7cmV0dXJuIF8kLmVuZFNjaGVtYSgkKX1mdW5jdGlvbiBMQygkLFope2xldCBRPS0xLFg9LTEsSj0tMSxXPVoudHlwZSxZPVoudHlwZUlkO2lmKCFrLmlzRGljdGlvbmFyeShXKSlYPWM0LnZpc2l0KFcsJCk7ZWxzZSBZPVcuZGljdGlvbmFyeS50eXBlSWQsSj1jNC52aXNpdChXLCQpLFg9YzQudmlzaXQoVy5kaWN0aW9uYXJ5LCQpO2xldCBHPShXLmNoaWxkcmVufHxbXSkubWFwKChxKT0+YS5lbmNvZGUoJCxxKSksSD1XWi5jcmVhdGVDaGlsZHJlblZlY3RvcigkLEcpLHo9IShaLm1ldGFkYXRhJiZaLm1ldGFkYXRhLnNpemU+MCk/LTE6V1ouY3JlYXRlQ3VzdG9tTWV0YWRhdGFWZWN0b3IoJCxbLi4uWi5tZXRhZGF0YV0ubWFwKChbcSxQXSk9PntsZXQgVT0kLmNyZWF0ZVN0cmluZyhgJHtxfWApLE09JC5jcmVhdGVTdHJpbmcoYCR7UH1gKTtyZXR1cm4gSyQuc3RhcnRLZXlWYWx1ZSgkKSxLJC5hZGRLZXkoJCxVKSxLJC5hZGRWYWx1ZSgkLE0pLEskLmVuZEtleVZhbHVlKCQpfSkpO2lmKFoubmFtZSlRPSQuY3JlYXRlU3RyaW5nKFoubmFtZSk7aWYoV1ouc3RhcnRGaWVsZCgkKSxXWi5hZGRUeXBlKCQsWCksV1ouYWRkVHlwZVR5cGUoJCxZKSxXWi5hZGRDaGlsZHJlbigkLEgpLFdaLmFkZE51bGxhYmxlKCQsISFaLm51bGxhYmxlKSxRIT09LTEpV1ouYWRkTmFtZSgkLFEpO2lmKEohPT0tMSlXWi5hZGREaWN0aW9uYXJ5KCQsSik7aWYoeiE9PS0xKVdaLmFkZEN1c3RvbU1ldGFkYXRhKCQseik7cmV0dXJuIFdaLmVuZEZpZWxkKCQpfWZ1bmN0aW9uIEFDKCQsWil7bGV0IFE9Wi5ub2Rlc3x8W10sWD1aLmJ1ZmZlcnN8fFtdLEo9Wi52YXJpYWRpY0J1ZmZlckNvdW50c3x8W107TVouc3RhcnROb2Rlc1ZlY3RvcigkLFEubGVuZ3RoKTtmb3IobGV0IHogb2YgUS5zbGljZSgpLnJldmVyc2UoKSl3OC5lbmNvZGUoJCx6KTtsZXQgVz0kLmVuZFZlY3RvcigpO01aLnN0YXJ0QnVmZmVyc1ZlY3RvcigkLFgubGVuZ3RoKTtmb3IobGV0IHogb2YgWC5zbGljZSgpLnJldmVyc2UoKSl4JC5lbmNvZGUoJCx6KTtsZXQgWT0kLmVuZFZlY3RvcigpLEc9bnVsbDtpZihaLmNvbXByZXNzaW9uIT09bnVsbClHPXhQKCQsWi5jb21wcmVzc2lvbik7bGV0IEg9LTE7aWYoSi5sZW5ndGg+MClIPU1aLmNyZWF0ZVZhcmlhZGljQnVmZmVyQ291bnRzVmVjdG9yKCQsSi5tYXAoQmlnSW50KSk7aWYoTVouc3RhcnRSZWNvcmRCYXRjaCgkKSxNWi5hZGRMZW5ndGgoJCxCaWdJbnQoWi5sZW5ndGgpKSxNWi5hZGROb2RlcygkLFcpLE1aLmFkZEJ1ZmZlcnMoJCxZKSxaLmNvbXByZXNzaW9uIT09bnVsbCYmRylNWi5hZGRDb21wcmVzc2lvbigkLEcpO2lmKEghPT0tMSlNWi5hZGRWYXJpYWRpY0J1ZmZlckNvdW50cygkLEgpO3JldHVybiBNWi5lbmRSZWNvcmRCYXRjaCgkKX1mdW5jdGlvbiB4UCgkLFope3JldHVybiBzWi5zdGFydEJvZHlDb21wcmVzc2lvbigkKSxzWi5hZGRDb2RlYygkLFoudHlwZSksc1ouYWRkTWV0aG9kKCQsWi5tZXRob2QpLHNaLmVuZEJvZHlDb21wcmVzc2lvbigkKX1mdW5jdGlvbiBEQygkLFope2xldCBRPWEkLmVuY29kZSgkLFouZGF0YSk7cmV0dXJuIG84LnN0YXJ0RGljdGlvbmFyeUJhdGNoKCQpLG84LmFkZElkKCQsQmlnSW50KFouaWQpKSxvOC5hZGRJc0RlbHRhKCQsWi5pc0RlbHRhKSxvOC5hZGREYXRhKCQsUSksbzguZW5kRGljdGlvbmFyeUJhdGNoKCQpfWZ1bmN0aW9uIE9DKCQsWil7cmV0dXJuIE9ZLmNyZWF0ZUZpZWxkTm9kZSgkLEJpZ0ludChaLmxlbmd0aCksQmlnSW50KFoubnVsbENvdW50KSl9ZnVuY3Rpb24gQ0MoJCxaKXtyZXR1cm4gRFkuY3JlYXRlQnVmZmVyKCQsQmlnSW50KFoub2Zmc2V0KSxCaWdJbnQoWi5sZW5ndGgpKX12YXIgWkMsUUMsakM7dmFyIFg2PU8oKCk9Pnt5MCgpO2JLKCk7SDQoKTtqSygpO0I5KCk7aEsoKTt5SygpO3M2KCk7VksoKTtJSygpO3dLKCk7RUsoKTtnSygpO3hLKCk7X0soKTtTSygpO3ZLKCk7QksoKTtrSygpO1RLKCk7TFAoKTtDSygpO09LKCk7dlooKTtzJCgpO3UkKCk7RFAoKTtrUCgpO0gkKCk7WkM9c0osUUM9VVo7YS5lbmNvZGU9TEM7YS5kZWNvZGU9TkM7YS5mcm9tSlNPTj1CUDtRMC5lbmNvZGU9TUM7UTAuZGVjb2RlPVdDO1EwLmZyb21KU09OPVZQO2EkLmVuY29kZT1BQzthJC5kZWNvZGU9WUM7YSQuZnJvbUpTT049SDI7eVouZW5jb2RlPURDO3laLmRlY29kZT1HQzt5Wi5mcm9tSlNPTj1SUDt3OC5lbmNvZGU9T0M7dzguZGVjb2RlPUhDO3gkLmVuY29kZT1DQzt4JC5kZWNvZGU9S0M7cVcuZW5jb2RlPXhQO3FXLmRlY29kZT1nUDtqQz0oKCk9PntsZXQgJD1uZXcgQXJyYXlCdWZmZXIoMik7cmV0dXJuIG5ldyBEYXRhVmlldygkKS5zZXRJbnQxNigwLDI1NiwhMCksbmV3IEludDE2QXJyYXkoJClbMF09PT0yNTZ9KSgpfSk7Y2xhc3MgbjR7Y29uc3RydWN0b3IoJCl7dGhpcy5fanNvbj0kfWdldCBzY2hlbWEoKXtyZXR1cm4gdGhpcy5fanNvbi5zY2hlbWF9Z2V0IGJhdGNoZXMoKXtyZXR1cm4gdGhpcy5fanNvbi5iYXRjaGVzfHxbXX1nZXQgZGljdGlvbmFyaWVzKCl7cmV0dXJuIHRoaXMuX2pzb24uZGljdGlvbmFyaWVzfHxbXX19Y2xhc3MgUFd7dGVlKCl7cmV0dXJuIHRoaXMuX2dldERPTVN0cmVhbSgpLnRlZSgpfXBpcGUoJCxaKXtyZXR1cm4gdGhpcy5fZ2V0Tm9kZVN0cmVhbSgpLnBpcGUoJCxaKX1waXBlVG8oJCxaKXtyZXR1cm4gdGhpcy5fZ2V0RE9NU3RyZWFtKCkucGlwZVRvKCQsWil9cGlwZVRocm91Z2goJCxaKXtyZXR1cm4gdGhpcy5fZ2V0RE9NU3RyZWFtKCkucGlwZVRocm91Z2goJCxaKX1fZ2V0RE9NU3RyZWFtKCl7cmV0dXJuIHRoaXMuX0RPTVN0cmVhbXx8KHRoaXMuX0RPTVN0cmVhbT10aGlzLnRvRE9NU3RyZWFtKCkpfV9nZXROb2RlU3RyZWFtKCl7cmV0dXJuIHRoaXMuX25vZGVTdHJlYW18fCh0aGlzLl9ub2RlU3RyZWFtPXRoaXMudG9Ob2RlU3RyZWFtKCkpfX12YXIgTCQsejI7dmFyIHhZPU8oKCk9PntNUSgpO05ZKCk7TCQ9T2JqZWN0LmZyZWV6ZSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTt6Mj1jbGFzcyB6MiBleHRlbmRzIFBXe2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLl92YWx1ZXM9W10sdGhpcy5yZXNvbHZlcnM9W10sdGhpcy5fY2xvc2VkUHJvbWlzZT1uZXcgUHJvbWlzZSgoJCk9PnRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlPSQpfWdldCBjbG9zZWQoKXtyZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZX1jYW5jZWwoJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmV0dXJuKCQpfSl9d3JpdGUoJCl7aWYodGhpcy5fZW5zdXJlT3BlbigpKXRoaXMucmVzb2x2ZXJzLmxlbmd0aDw9MD90aGlzLl92YWx1ZXMucHVzaCgkKTp0aGlzLnJlc29sdmVycy5zaGlmdCgpLnJlc29sdmUoe2RvbmU6ITEsdmFsdWU6JH0pfWFib3J0KCQpe2lmKHRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlKXRoaXMucmVzb2x2ZXJzLmxlbmd0aDw9MD90aGlzLl9lcnJvcj17ZXJyb3I6JH06dGhpcy5yZXNvbHZlcnMuc2hpZnQoKS5yZWplY3Qoe2RvbmU6ITAsdmFsdWU6JH0pfWNsb3NlKCl7aWYodGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmUpe2xldHtyZXNvbHZlcnM6JH09dGhpczt3aGlsZSgkLmxlbmd0aD4wKSQuc2hpZnQoKS5yZXNvbHZlKEwkKTt0aGlzLl9jbG9zZWRQcm9taXNlUmVzb2x2ZSgpLHRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlPXZvaWQgMH19W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfXRvRE9NU3RyZWFtKCQpe3JldHVybiBOWi50b0RPTVN0cmVhbSh0aGlzLl9jbG9zZWRQcm9taXNlUmVzb2x2ZXx8dGhpcy5fZXJyb3I/dGhpczp0aGlzLl92YWx1ZXMsJCl9dG9Ob2RlU3RyZWFtKCQpe3JldHVybiBOWi50b05vZGVTdHJlYW0odGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmV8fHRoaXMuX2Vycm9yP3RoaXM6dGhpcy5fdmFsdWVzLCQpfXRocm93KCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5hYm9ydCgkKSxMJH0pfXJldHVybigkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xvc2UoKSxMJH0pfXJlYWQoJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLm5leHQoJCwicmVhZCIpKS52YWx1ZX0pfXBlZWsoJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLm5leHQoJCwicGVlayIpKS52YWx1ZX0pfW5leHQoLi4uJCl7aWYodGhpcy5fdmFsdWVzLmxlbmd0aD4wKXJldHVybiBQcm9taXNlLnJlc29sdmUoe2RvbmU6ITEsdmFsdWU6dGhpcy5fdmFsdWVzLnNoaWZ0KCl9KTtlbHNlIGlmKHRoaXMuX2Vycm9yKXJldHVybiBQcm9taXNlLnJlamVjdCh7ZG9uZTohMCx2YWx1ZTp0aGlzLl9lcnJvci5lcnJvcn0pO2Vsc2UgaWYoIXRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlKXJldHVybiBQcm9taXNlLnJlc29sdmUoTCQpO2Vsc2UgcmV0dXJuIG5ldyBQcm9taXNlKChaLFEpPT57dGhpcy5yZXNvbHZlcnMucHVzaCh7cmVzb2x2ZTpaLHJlamVjdDpRfSl9KX1fZW5zdXJlT3Blbigpe2lmKHRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlKXJldHVybiEwO3Rocm93IEVycm9yKCJBc3luY1F1ZXVlIGlzIGNsb3NlZCIpfX19KTtjbGFzcyB5UHtjb25zdHJ1Y3RvcigkKXt0aGlzLnNvdXJjZT0kfWNhbmNlbCgkKXt0aGlzLnJldHVybigkKX1wZWVrKCQpe3JldHVybiB0aGlzLm5leHQoJCwicGVlayIpLnZhbHVlfXJlYWQoJCl7cmV0dXJuIHRoaXMubmV4dCgkLCJyZWFkIikudmFsdWV9bmV4dCgkLFo9InJlYWQiKXtyZXR1cm4gdGhpcy5zb3VyY2UubmV4dCh7Y21kOlosc2l6ZTokfSl9dGhyb3coJCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcy5zb3VyY2UudGhyb3cmJnRoaXMuc291cmNlLnRocm93KCQpfHxMJCl9cmV0dXJuKCQpe3JldHVybiBPYmplY3QuY3JlYXRlKHRoaXMuc291cmNlLnJldHVybiYmdGhpcy5zb3VyY2UucmV0dXJuKCQpfHxMJCl9fWNsYXNzIFVKe2NvbnN0cnVjdG9yKCQpe3RoaXMuc291cmNlPSQsdGhpcy5fY2xvc2VkUHJvbWlzZT1uZXcgUHJvbWlzZSgoWik9PnRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlPVopfWNhbmNlbCgkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZXR1cm4oJCl9KX1nZXQgY2xvc2VkKCl7cmV0dXJuIHRoaXMuX2Nsb3NlZFByb21pc2V9cmVhZCgkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMubmV4dCgkLCJyZWFkIikpLnZhbHVlfSl9cGVlaygkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMubmV4dCgkLCJwZWVrIikpLnZhbHVlfSl9bmV4dCgkKXtyZXR1cm4gbih0aGlzLGFyZ3VtZW50cyx2b2lkIDAsZnVuY3Rpb24qKFosUT0icmVhZCIpe3JldHVybiB5aWVsZCB0aGlzLnNvdXJjZS5uZXh0KHtjbWQ6USxzaXplOlp9KX0pfXRocm93KCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgWj10aGlzLnNvdXJjZS50aHJvdyYmKHlpZWxkIHRoaXMuc291cmNlLnRocm93KCQpKXx8TCQ7cmV0dXJuIHRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlJiZ0aGlzLl9jbG9zZWRQcm9taXNlUmVzb2x2ZSgpLHRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlPXZvaWQgMCxPYmplY3QuY3JlYXRlKFopfSl9cmV0dXJuKCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgWj10aGlzLnNvdXJjZS5yZXR1cm4mJih5aWVsZCB0aGlzLnNvdXJjZS5yZXR1cm4oJCkpfHxMJDtyZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmUmJnRoaXMuX2Nsb3NlZFByb21pc2VSZXNvbHZlKCksdGhpcy5fY2xvc2VkUHJvbWlzZVJlc29sdmU9dm9pZCAwLE9iamVjdC5jcmVhdGUoWil9KX19dmFyIHdYLFNYLFo4O3ZhciBKNj1PKCgpPT57TVEoKTtOWSgpO2pYKCk7eFkoKTtzJCgpO3dYPWNsYXNzIHdYIGV4dGVuZHMgejJ7d3JpdGUoJCl7aWYoKCQ9JDAoJCkpLmJ5dGVMZW5ndGg+MClyZXR1cm4gc3VwZXIud3JpdGUoJCl9dG9TdHJpbmcoJD0hMSl7cmV0dXJuICQ/bjYodGhpcy50b1VpbnQ4QXJyYXkoITApKTp0aGlzLnRvVWludDhBcnJheSghMSkudGhlbihuNil9dG9VaW50OEFycmF5KCQ9ITEpe3JldHVybiAkP0FRKHRoaXMuX3ZhbHVlcylbMF06KCgpPT5uKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgWixRLFgsSjtsZXQgVz1bXSxZPTA7dHJ5e2Zvcih2YXIgRz0hMCxIPUY4KHRoaXMpLHo7ej15aWVsZCBILm5leHQoKSxaPXouZG9uZSwhWjtHPSEwKXtKPXoudmFsdWUsRz0hMTtsZXQgcT1KO1cucHVzaChxKSxZKz1xLmJ5dGVMZW5ndGh9fWNhdGNoKHEpe1E9e2Vycm9yOnF9fWZpbmFsbHl7dHJ5e2lmKCFHJiYhWiYmKFg9SC5yZXR1cm4pKXlpZWxkIFguY2FsbChIKX1maW5hbGx5e2lmKFEpdGhyb3cgUS5lcnJvcn19cmV0dXJuIEFRKFcsWSlbMF19KSkoKX19O1NYPWNsYXNzIFNYe2NvbnN0cnVjdG9yKCQpe2lmKCQpdGhpcy5zb3VyY2U9bmV3IHlQKE5aLmZyb21JdGVyYWJsZSgkKSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc31uZXh0KCQpe3JldHVybiB0aGlzLnNvdXJjZS5uZXh0KCQpfXRocm93KCQpe3JldHVybiB0aGlzLnNvdXJjZS50aHJvdygkKX1yZXR1cm4oJCl7cmV0dXJuIHRoaXMuc291cmNlLnJldHVybigkKX1wZWVrKCQpe3JldHVybiB0aGlzLnNvdXJjZS5wZWVrKCQpfXJlYWQoJCl7cmV0dXJuIHRoaXMuc291cmNlLnJlYWQoJCl9fTtaOD1jbGFzcyBaOHtjb25zdHJ1Y3RvcigkKXtpZigkIGluc3RhbmNlb2YgWjgpdGhpcy5zb3VyY2U9JC5zb3VyY2U7ZWxzZSBpZigkIGluc3RhbmNlb2Ygd1gpdGhpcy5zb3VyY2U9bmV3IFVKKE5aLmZyb21Bc3luY0l0ZXJhYmxlKCQpKTtlbHNlIGlmKFE0KCQpKXRoaXMuc291cmNlPW5ldyBVSihOWi5mcm9tTm9kZVN0cmVhbSgkKSk7ZWxzZSBpZihQWSgkKSl0aGlzLnNvdXJjZT1uZXcgVUooTlouZnJvbURPTVN0cmVhbSgkKSk7ZWxzZSBpZigkNCgkKSl0aGlzLnNvdXJjZT1uZXcgVUooTlouZnJvbURPTVN0cmVhbSgkLmJvZHkpKTtlbHNlIGlmKFU4KCQpKXRoaXMuc291cmNlPW5ldyBVSihOWi5mcm9tSXRlcmFibGUoJCkpO2Vsc2UgaWYoTjgoJCkpdGhpcy5zb3VyY2U9bmV3IFVKKE5aLmZyb21Bc3luY0l0ZXJhYmxlKCQpKTtlbHNlIGlmKGZRKCQpKXRoaXMuc291cmNlPW5ldyBVSihOWi5mcm9tQXN5bmNJdGVyYWJsZSgkKSl9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfW5leHQoJCl7cmV0dXJuIHRoaXMuc291cmNlLm5leHQoJCl9dGhyb3coJCl7cmV0dXJuIHRoaXMuc291cmNlLnRocm93KCQpfXJldHVybigkKXtyZXR1cm4gdGhpcy5zb3VyY2UucmV0dXJuKCQpfWdldCBjbG9zZWQoKXtyZXR1cm4gdGhpcy5zb3VyY2UuY2xvc2VkfWNhbmNlbCgkKXtyZXR1cm4gdGhpcy5zb3VyY2UuY2FuY2VsKCQpfXBlZWsoJCl7cmV0dXJuIHRoaXMuc291cmNlLnBlZWsoJCl9cmVhZCgkKXtyZXR1cm4gdGhpcy5zb3VyY2UucmVhZCgkKX19fSk7dmFyIG80LFc2O3ZhciBxMj1PKCgpPT57TVEoKTtKNigpO3MkKCk7bzQ9Y2xhc3MgbzQgZXh0ZW5kcyBTWHtjb25zdHJ1Y3RvcigkLFope3N1cGVyKCk7dGhpcy5wb3NpdGlvbj0wLHRoaXMuYnVmZmVyPSQwKCQpLHRoaXMuc2l6ZT1aPT09dm9pZCAwP3RoaXMuYnVmZmVyLmJ5dGVMZW5ndGg6Wn1yZWFkSW50MzIoJCl7bGV0e2J1ZmZlcjpaLGJ5dGVPZmZzZXQ6UX09dGhpcy5yZWFkQXQoJCw0KTtyZXR1cm4gbmV3IERhdGFWaWV3KFosUSkuZ2V0SW50MzIoMCwhMCl9c2VlaygkKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj1NYXRoLm1pbigkLHRoaXMuc2l6ZSksJDx0aGlzLnNpemV9cmVhZCgkKXtsZXR7YnVmZmVyOlosc2l6ZTpRLHBvc2l0aW9uOlh9PXRoaXM7aWYoWiYmWDxRKXtpZih0eXBlb2YgJCE9PSJudW1iZXIiKSQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiB0aGlzLnBvc2l0aW9uPU1hdGgubWluKFEsWCtNYXRoLm1pbihRLVgsJCkpLFouc3ViYXJyYXkoWCx0aGlzLnBvc2l0aW9uKX1yZXR1cm4gbnVsbH1yZWFkQXQoJCxaKXtsZXQgUT10aGlzLmJ1ZmZlcixYPU1hdGgubWluKHRoaXMuc2l6ZSwkK1opO3JldHVybiBRP1Euc3ViYXJyYXkoJCxYKTpuZXcgVWludDhBcnJheShaKX1jbG9zZSgpe3RoaXMuYnVmZmVyJiYodGhpcy5idWZmZXI9bnVsbCl9dGhyb3coJCl7cmV0dXJuIHRoaXMuY2xvc2UoKSx7ZG9uZTohMCx2YWx1ZTokfX1yZXR1cm4oJCl7cmV0dXJuIHRoaXMuY2xvc2UoKSx7ZG9uZTohMCx2YWx1ZTokfX19O1c2PWNsYXNzIFc2IGV4dGVuZHMgWjh7Y29uc3RydWN0b3IoJCxaKXtzdXBlcigpO2lmKHRoaXMucG9zaXRpb249MCx0aGlzLl9oYW5kbGU9JCx0eXBlb2YgWj09PSJudW1iZXIiKXRoaXMuc2l6ZT1aO2Vsc2UgdGhpcy5fcGVuZGluZz0oKCk9Pm4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuc2l6ZT0oeWllbGQgJC5zdGF0KCkpLnNpemUsZGVsZXRlIHRoaXMuX3BlbmRpbmd9KSkoKX1yZWFkSW50MzIoJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldHtidWZmZXI6WixieXRlT2Zmc2V0OlF9PXlpZWxkIHRoaXMucmVhZEF0KCQsNCk7cmV0dXJuIG5ldyBEYXRhVmlldyhaLFEpLmdldEludDMyKDAsITApfSl9c2VlaygkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmcmJih5aWVsZCB0aGlzLl9wZW5kaW5nKSx0aGlzLnBvc2l0aW9uPU1hdGgubWluKCQsdGhpcy5zaXplKSwkPHRoaXMuc2l6ZX0pfXJlYWQoJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuX3BlbmRpbmcmJih5aWVsZCB0aGlzLl9wZW5kaW5nKTtsZXR7X2hhbmRsZTpaLHNpemU6USxwb3NpdGlvbjpYfT10aGlzO2lmKFomJlg8USl7aWYodHlwZW9mICQhPT0ibnVtYmVyIikkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgSj1YLFc9MCxZPTAsRz1NYXRoLm1pbihRLEorTWF0aC5taW4oUS1KLCQpKSxIPW5ldyBVaW50OEFycmF5KE1hdGgubWF4KDAsKHRoaXMucG9zaXRpb249RyktSikpO3doaWxlKChKKz1ZKTxHJiYoVys9WSk8SC5ieXRlTGVuZ3RoKSh7Ynl0ZXNSZWFkOll9PXlpZWxkIFoucmVhZChILFcsSC5ieXRlTGVuZ3RoLVcsSikpO3JldHVybiBIfXJldHVybiBudWxsfSl9cmVhZEF0KCQsWil7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuX3BlbmRpbmcmJih5aWVsZCB0aGlzLl9wZW5kaW5nKTtsZXR7X2hhbmRsZTpRLHNpemU6WH09dGhpcztpZihRJiYkK1o8WCl7bGV0IEo9TWF0aC5taW4oWCwkK1opLFc9bmV3IFVpbnQ4QXJyYXkoSi0kKTtyZXR1cm4oeWllbGQgUS5yZWFkKFcsMCxaLCQpKS5idWZmZXJ9cmV0dXJuIG5ldyBVaW50OEFycmF5KFopfSl9Y2xvc2UoKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0ICQ9dGhpcy5faGFuZGxlO3RoaXMuX2hhbmRsZT1udWxsLCQmJih5aWVsZCAkLmNsb3NlKCkpfSl9dGhyb3coJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsb3NlKCkse2RvbmU6ITAsdmFsdWU6JH19KX1yZXR1cm4oJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsb3NlKCkse2RvbmU6ITAsdmFsdWU6JH19KX19fSk7dmFyIEYyPXt9O1A4KEYyLHtVaW50NjQ6KCk9PiQkLEludDY0OigpPT5TWixJbnQxMjg6KCk9PlE4LEJhc2VJbnQ2NDooKT0+czR9KTtmdW5jdGlvbiBGVygkKXtpZigkPDApJD00Mjk0OTY3Mjk1KyQrMTtyZXR1cm5gMHgkeyQudG9TdHJpbmcoMTYpfWB9Y2xhc3MgczR7Y29uc3RydWN0b3IoJCl7dGhpcy5idWZmZXI9JH1oaWdoKCl7cmV0dXJuIHRoaXMuYnVmZmVyWzFdfWxvdygpe3JldHVybiB0aGlzLmJ1ZmZlclswXX1fdGltZXMoJCl7bGV0IFo9bmV3IFVpbnQzMkFycmF5KFt0aGlzLmJ1ZmZlclsxXT4+PjE2LHRoaXMuYnVmZmVyWzFdJjY1NTM1LHRoaXMuYnVmZmVyWzBdPj4+MTYsdGhpcy5idWZmZXJbMF0mNjU1MzVdKSxRPW5ldyBVaW50MzJBcnJheShbJC5idWZmZXJbMV0+Pj4xNiwkLmJ1ZmZlclsxXSY2NTUzNSwkLmJ1ZmZlclswXT4+PjE2LCQuYnVmZmVyWzBdJjY1NTM1XSksWD1aWzNdKlFbM107dGhpcy5idWZmZXJbMF09WCY2NTUzNTtsZXQgSj1YPj4+MTY7cmV0dXJuIFg9WlsyXSpRWzNdLEorPVgsWD1aWzNdKlFbMl0+Pj4wLEorPVgsdGhpcy5idWZmZXJbMF0rPUo8PDE2LHRoaXMuYnVmZmVyWzFdPUo+Pj4wPFg/NjU1MzY6MCx0aGlzLmJ1ZmZlclsxXSs9Sj4+PjE2LHRoaXMuYnVmZmVyWzFdKz1aWzFdKlFbM10rWlsyXSpRWzJdK1pbM10qUVsxXSx0aGlzLmJ1ZmZlclsxXSs9WlswXSpRWzNdK1pbMV0qUVsyXStaWzJdKlFbMV0rWlszXSpRWzBdPDwxNix0aGlzfV9wbHVzKCQpe2xldCBaPXRoaXMuYnVmZmVyWzBdKyQuYnVmZmVyWzBdPj4+MDtpZih0aGlzLmJ1ZmZlclsxXSs9JC5idWZmZXJbMV0sWjx0aGlzLmJ1ZmZlclswXT4+PjApKyt0aGlzLmJ1ZmZlclsxXTt0aGlzLmJ1ZmZlclswXT1afWxlc3NUaGFuKCQpe3JldHVybiB0aGlzLmJ1ZmZlclsxXTwkLmJ1ZmZlclsxXXx8dGhpcy5idWZmZXJbMV09PT0kLmJ1ZmZlclsxXSYmdGhpcy5idWZmZXJbMF08JC5idWZmZXJbMF19ZXF1YWxzKCQpe3JldHVybiB0aGlzLmJ1ZmZlclsxXT09PSQuYnVmZmVyWzFdJiZ0aGlzLmJ1ZmZlclswXT09JC5idWZmZXJbMF19Z3JlYXRlclRoYW4oJCl7cmV0dXJuICQubGVzc1RoYW4odGhpcyl9aGV4KCl7cmV0dXJuYCR7RlcodGhpcy5idWZmZXJbMV0pfSAke0ZXKHRoaXMuYnVmZmVyWzBdKX1gfX1jbGFzcyBROHtjb25zdHJ1Y3RvcigkKXt0aGlzLmJ1ZmZlcj0kfWhpZ2goKXtyZXR1cm4gbmV3IFNaKG5ldyBVaW50MzJBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCs4LDIpKX1sb3coKXtyZXR1cm4gbmV3IFNaKG5ldyBVaW50MzJBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCwyKSl9bmVnYXRlKCl7aWYodGhpcy5idWZmZXJbMF09fnRoaXMuYnVmZmVyWzBdKzEsdGhpcy5idWZmZXJbMV09fnRoaXMuYnVmZmVyWzFdLHRoaXMuYnVmZmVyWzJdPX50aGlzLmJ1ZmZlclsyXSx0aGlzLmJ1ZmZlclszXT1+dGhpcy5idWZmZXJbM10sdGhpcy5idWZmZXJbMF09PTApKyt0aGlzLmJ1ZmZlclsxXTtpZih0aGlzLmJ1ZmZlclsxXT09MCkrK3RoaXMuYnVmZmVyWzJdO2lmKHRoaXMuYnVmZmVyWzJdPT0wKSsrdGhpcy5idWZmZXJbM107cmV0dXJuIHRoaXN9dGltZXMoJCl7bGV0IFo9bmV3ICQkKG5ldyBVaW50MzJBcnJheShbdGhpcy5idWZmZXJbM10sMF0pKSxRPW5ldyAkJChuZXcgVWludDMyQXJyYXkoW3RoaXMuYnVmZmVyWzJdLDBdKSksWD1uZXcgJCQobmV3IFVpbnQzMkFycmF5KFt0aGlzLmJ1ZmZlclsxXSwwXSkpLEo9bmV3ICQkKG5ldyBVaW50MzJBcnJheShbdGhpcy5idWZmZXJbMF0sMF0pKSxXPW5ldyAkJChuZXcgVWludDMyQXJyYXkoWyQuYnVmZmVyWzNdLDBdKSksWT1uZXcgJCQobmV3IFVpbnQzMkFycmF5KFskLmJ1ZmZlclsyXSwwXSkpLEc9bmV3ICQkKG5ldyBVaW50MzJBcnJheShbJC5idWZmZXJbMV0sMF0pKSxIPW5ldyAkJChuZXcgVWludDMyQXJyYXkoWyQuYnVmZmVyWzBdLDBdKSksej0kJC5tdWx0aXBseShKLEgpO3RoaXMuYnVmZmVyWzBdPXoubG93KCk7bGV0IHE9bmV3ICQkKG5ldyBVaW50MzJBcnJheShbei5oaWdoKCksMF0pKTtyZXR1cm4gej0kJC5tdWx0aXBseShYLEgpLHEucGx1cyh6KSx6PSQkLm11bHRpcGx5KEosRykscS5wbHVzKHopLHRoaXMuYnVmZmVyWzFdPXEubG93KCksdGhpcy5idWZmZXJbM109cS5sZXNzVGhhbih6KT8xOjAsdGhpcy5idWZmZXJbMl09cS5oaWdoKCksbmV3ICQkKG5ldyBVaW50MzJBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCs4LDIpKS5wbHVzKCQkLm11bHRpcGx5KFEsSCkpLnBsdXMoJCQubXVsdGlwbHkoWCxHKSkucGx1cygkJC5tdWx0aXBseShKLFkpKSx0aGlzLmJ1ZmZlclszXSs9JCQubXVsdGlwbHkoWixIKS5wbHVzKCQkLm11bHRpcGx5KFEsRykpLnBsdXMoJCQubXVsdGlwbHkoWCxZKSkucGx1cygkJC5tdWx0aXBseShKLFcpKS5sb3coKSx0aGlzfXBsdXMoJCl7bGV0IFo9bmV3IFVpbnQzMkFycmF5KDQpO2lmKFpbM109dGhpcy5idWZmZXJbM10rJC5idWZmZXJbM10+Pj4wLFpbMl09dGhpcy5idWZmZXJbMl0rJC5idWZmZXJbMl0+Pj4wLFpbMV09dGhpcy5idWZmZXJbMV0rJC5idWZmZXJbMV0+Pj4wLFpbMF09dGhpcy5idWZmZXJbMF0rJC5idWZmZXJbMF0+Pj4wLFpbMF08dGhpcy5idWZmZXJbMF0+Pj4wKSsrWlsxXTtpZihaWzFdPHRoaXMuYnVmZmVyWzFdPj4+MCkrK1pbMl07aWYoWlsyXTx0aGlzLmJ1ZmZlclsyXT4+PjApKytaWzNdO3JldHVybiB0aGlzLmJ1ZmZlclszXT1aWzNdLHRoaXMuYnVmZmVyWzJdPVpbMl0sdGhpcy5idWZmZXJbMV09WlsxXSx0aGlzLmJ1ZmZlclswXT1aWzBdLHRoaXN9aGV4KCl7cmV0dXJuYCR7RlcodGhpcy5idWZmZXJbM10pfSAke0ZXKHRoaXMuYnVmZmVyWzJdKX0gJHtGVyh0aGlzLmJ1ZmZlclsxXSl9ICR7RlcodGhpcy5idWZmZXJbMF0pfWB9c3RhdGljIG11bHRpcGx5KCQsWil7cmV0dXJuIG5ldyBROChuZXcgVWludDMyQXJyYXkoJC5idWZmZXIpKS50aW1lcyhaKX1zdGF0aWMgYWRkKCQsWil7cmV0dXJuIG5ldyBROChuZXcgVWludDMyQXJyYXkoJC5idWZmZXIpKS5wbHVzKFopfXN0YXRpYyBmcm9tKCQsWj1uZXcgVWludDMyQXJyYXkoNCkpe3JldHVybiBROC5mcm9tU3RyaW5nKHR5cGVvZiAkPT09InN0cmluZyI/JDokLnRvU3RyaW5nKCksWil9c3RhdGljIGZyb21OdW1iZXIoJCxaPW5ldyBVaW50MzJBcnJheSg0KSl7cmV0dXJuIFE4LmZyb21TdHJpbmcoJC50b1N0cmluZygpLFopfXN0YXRpYyBmcm9tU3RyaW5nKCQsWj1uZXcgVWludDMyQXJyYXkoNCkpe2xldCBRPSQuc3RhcnRzV2l0aCgiLSIpLFg9JC5sZW5ndGgsSj1uZXcgUTgoWik7Zm9yKGxldCBXPVE/MTowO1c8WDspe2xldCBZPU5XPFgtVz9OVzpYLVcsRz1uZXcgUTgobmV3IFVpbnQzMkFycmF5KFtOdW1iZXIucGFyc2VJbnQoJC5zbGljZShXLFcrWSksMTApLDAsMCwwXSkpLEg9bmV3IFE4KG5ldyBVaW50MzJBcnJheShbUDJbWV0sMCwwLDBdKSk7Si50aW1lcyhIKSxKLnBsdXMoRyksVys9WX1yZXR1cm4gUT9KLm5lZ2F0ZSgpOkp9c3RhdGljIGNvbnZlcnRBcnJheSgkKXtsZXQgWj1uZXcgVWludDMyQXJyYXkoJC5sZW5ndGgqNCk7Zm9yKGxldCBRPS0xLFg9JC5sZW5ndGg7KytRPFg7KVE4LmZyb20oJFtRXSxuZXcgVWludDMyQXJyYXkoWi5idWZmZXIsWi5ieXRlT2Zmc2V0KzE2KlEsNCkpO3JldHVybiBafX12YXIgTlc9OCxQMiwkJCxTWjt2YXIgTjI9TygoKT0+e1AyPVsxLDEwLDEwMCwxMDAwLDFlNCwxZTUsMWU2LDFlNywxZThdOyQkPWNsYXNzICQkIGV4dGVuZHMgczR7dGltZXMoJCl7cmV0dXJuIHRoaXMuX3RpbWVzKCQpLHRoaXN9cGx1cygkKXtyZXR1cm4gdGhpcy5fcGx1cygkKSx0aGlzfXN0YXRpYyBmcm9tKCQsWj1uZXcgVWludDMyQXJyYXkoMikpe3JldHVybiAkJC5mcm9tU3RyaW5nKHR5cGVvZiAkPT09InN0cmluZyI/JDokLnRvU3RyaW5nKCksWil9c3RhdGljIGZyb21OdW1iZXIoJCxaPW5ldyBVaW50MzJBcnJheSgyKSl7cmV0dXJuICQkLmZyb21TdHJpbmcoJC50b1N0cmluZygpLFopfXN0YXRpYyBmcm9tU3RyaW5nKCQsWj1uZXcgVWludDMyQXJyYXkoMikpe2xldCBRPSQubGVuZ3RoLFg9bmV3ICQkKFopO2ZvcihsZXQgSj0wO0o8UTspe2xldCBXPU5XPFEtSj9OVzpRLUosWT1uZXcgJCQobmV3IFVpbnQzMkFycmF5KFtOdW1iZXIucGFyc2VJbnQoJC5zbGljZShKLEorVyksMTApLDBdKSksRz1uZXcgJCQobmV3IFVpbnQzMkFycmF5KFtQMltXXSwwXSkpO1gudGltZXMoRyksWC5wbHVzKFkpLEorPVd9cmV0dXJuIFh9c3RhdGljIGNvbnZlcnRBcnJheSgkKXtsZXQgWj1uZXcgVWludDMyQXJyYXkoJC5sZW5ndGgqMik7Zm9yKGxldCBRPS0xLFg9JC5sZW5ndGg7KytRPFg7KSQkLmZyb20oJFtRXSxuZXcgVWludDMyQXJyYXkoWi5idWZmZXIsWi5ieXRlT2Zmc2V0KzIqUSo0LDIpKTtyZXR1cm4gWn1zdGF0aWMgbXVsdGlwbHkoJCxaKXtyZXR1cm4gbmV3ICQkKG5ldyBVaW50MzJBcnJheSgkLmJ1ZmZlcikpLnRpbWVzKFopfXN0YXRpYyBhZGQoJCxaKXtyZXR1cm4gbmV3ICQkKG5ldyBVaW50MzJBcnJheSgkLmJ1ZmZlcikpLnBsdXMoWil9fTtTWj1jbGFzcyBTWiBleHRlbmRzIHM0e25lZ2F0ZSgpe2lmKHRoaXMuYnVmZmVyWzBdPX50aGlzLmJ1ZmZlclswXSsxLHRoaXMuYnVmZmVyWzFdPX50aGlzLmJ1ZmZlclsxXSx0aGlzLmJ1ZmZlclswXT09MCkrK3RoaXMuYnVmZmVyWzFdO3JldHVybiB0aGlzfXRpbWVzKCQpe3JldHVybiB0aGlzLl90aW1lcygkKSx0aGlzfXBsdXMoJCl7cmV0dXJuIHRoaXMuX3BsdXMoJCksdGhpc31sZXNzVGhhbigkKXtsZXQgWj10aGlzLmJ1ZmZlclsxXTw8MCxRPSQuYnVmZmVyWzFdPDwwO3JldHVybiBaPFF8fFo9PT1RJiZ0aGlzLmJ1ZmZlclswXTwkLmJ1ZmZlclswXX1zdGF0aWMgZnJvbSgkLFo9bmV3IFVpbnQzMkFycmF5KDIpKXtyZXR1cm4gU1ouZnJvbVN0cmluZyh0eXBlb2YgJD09PSJzdHJpbmciPyQ6JC50b1N0cmluZygpLFopfXN0YXRpYyBmcm9tTnVtYmVyKCQsWj1uZXcgVWludDMyQXJyYXkoMikpe3JldHVybiBTWi5mcm9tU3RyaW5nKCQudG9TdHJpbmcoKSxaKX1zdGF0aWMgZnJvbVN0cmluZygkLFo9bmV3IFVpbnQzMkFycmF5KDIpKXtsZXQgUT0kLnN0YXJ0c1dpdGgoIi0iKSxYPSQubGVuZ3RoLEo9bmV3IFNaKFopO2ZvcihsZXQgVz1RPzE6MDtXPFg7KXtsZXQgWT1OVzxYLVc/Tlc6WC1XLEc9bmV3IFNaKG5ldyBVaW50MzJBcnJheShbTnVtYmVyLnBhcnNlSW50KCQuc2xpY2UoVyxXK1kpLDEwKSwwXSkpLEg9bmV3IFNaKG5ldyBVaW50MzJBcnJheShbUDJbWV0sMF0pKTtKLnRpbWVzKEgpLEoucGx1cyhHKSxXKz1ZfXJldHVybiBRP0oubmVnYXRlKCk6Sn1zdGF0aWMgY29udmVydEFycmF5KCQpe2xldCBaPW5ldyBVaW50MzJBcnJheSgkLmxlbmd0aCoyKTtmb3IobGV0IFE9LTEsWD0kLmxlbmd0aDsrK1E8WDspU1ouZnJvbSgkW1FdLG5ldyBVaW50MzJBcnJheShaLmJ1ZmZlcixaLmJ5dGVPZmZzZXQrMipRKjQsMikpO3JldHVybiBafXN0YXRpYyBtdWx0aXBseSgkLFope3JldHVybiBuZXcgU1oobmV3IFVpbnQzMkFycmF5KCQuYnVmZmVyKSkudGltZXMoWil9c3RhdGljIGFkZCgkLFope3JldHVybiBuZXcgU1oobmV3IFVpbnQzMkFycmF5KCQuYnVmZmVyKSkucGx1cyhaKX19fSk7dmFyIEwyPXt9O1A4KEwyLHt0b0ludGVydmFsTW9udGhEYXlOYW5vT2JqZWN0czooKT0+UkMsdG9JbnRlcnZhbE1vbnRoRGF5TmFub0ludDMyQXJyYXk6KCk9Pk0yLHRvSW50ZXJ2YWxEYXlUaW1lT2JqZWN0czooKT0+VkMsdG9JbnRlcnZhbERheVRpbWVJbnQzMkFycmF5OigpPT5VMn0pO2Z1bmN0aW9uIFUyKCQpe3ZhciBaLFE7bGV0IFg9JC5sZW5ndGgsSj1uZXcgSW50MzJBcnJheShYKjIpO2ZvcihsZXQgVz0wLFk9MDtXPFg7VysrKXtsZXQgRz0kW1ddO0pbWSsrXT0oWj1HLmRheXMpIT09bnVsbCYmWiE9PXZvaWQgMD9aOjAsSltZKytdPShRPUcubWlsbGlzZWNvbmRzKSE9PW51bGwmJlEhPT12b2lkIDA/UTowfXJldHVybiBKfWZ1bmN0aW9uIE0yKCQpe3ZhciBaLFE7bGV0IFg9JC5sZW5ndGgsSj1uZXcgSW50MzJBcnJheShYKjQpO2ZvcihsZXQgVz0wLFk9MDtXPFg7VysrKXtsZXQgRz0kW1ddO0pbWSsrXT0oWj1HLm1vbnRocykhPT1udWxsJiZaIT09dm9pZCAwP1o6MCxKW1krK109KFE9Ry5kYXlzKSE9PW51bGwmJlEhPT12b2lkIDA/UTowO2xldCBIPUcubmFub3NlY29uZHM7aWYoSCl7bGV0IHo9QmlnSW50KEgpO0pbWSsrXT1OdW1iZXIoeiZCaWdJbnQoNDI5NDk2NzI5NSkpPj4+MCxKW1krK109TnVtYmVyKHo+PkJpZ0ludCgzMikpPj4+MH1lbHNlIFkrPTJ9cmV0dXJuIEp9ZnVuY3Rpb24gVkMoJCl7bGV0IFo9JC5sZW5ndGgsUT1BcnJheShaLzIpO2ZvcihsZXQgWD0wLEo9MDtYPFo7WCs9MilRW0orK109e2RheXM6JFtYXSxtaWxsaXNlY29uZHM6JFtYKzFdfTtyZXR1cm4gUX1mdW5jdGlvbiBSQygkLFope2xldCBRPSQubGVuZ3RoLFg9QXJyYXkoUS80KTtmb3IobGV0IEo9MCxXPTA7SjxRO0orPTQpe2xldCBZPUJpZ0ludCgkW0orM10pPDxCaWdJbnQoMzIpfEJpZ0ludCgkW0orMl0+Pj4wKTtYW1crK109e21vbnRoczokW0pdLGRheXM6JFtKKzFdLG5hbm9zZWNvbmRzOlo/YCR7WX1gOll9fXJldHVybiBYfWZ1bmN0aW9uIGhQKCQpe2xldCBaPW5ldyBVaW50OEFycmF5KCQubGVuZ3RoLzIpO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7USs9MilaW1E+PjFdPU51bWJlci5wYXJzZUludCgkLnNsaWNlKFEsUSsyKSwxNik7cmV0dXJuIFp9ZnVuY3Rpb24gRUMoJCl7cmV0dXJuIGhQKCQuam9pbigiIikpfWZ1bmN0aW9uIGJQKCQsWil7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoJC5sZW5ndGgqMTYpLFg9bmV3IERhdGFWaWV3KFEuYnVmZmVyKTtmb3IobGV0W0osV11vZiAkLmVudHJpZXMoKSl7bGV0IFk9SioxNixHPVcuU0laRTtpZihYLnNldEludDMyKFksRywhMCksVy5JTkxJTkVEIT09dm9pZCAwKXtsZXQgSD1aKFcuSU5MSU5FRCk7Zm9yKGxldCB6PTA7ejxILmxlbmd0aCYmejwxMjt6KyspUVtZKzQrel09SFt6XX1lbHNle2xldCBIPVcuUFJFRklYX0hFWDtmb3IobGV0IHo9MDt6PDgmJno8SC5sZW5ndGg7eis9MilRW1krNCsoej4+MSldPU51bWJlci5wYXJzZUludChILnNsaWNlKHoseisyKSwxNik7WC5zZXRJbnQzMihZKzgsVy5CVUZGRVJfSU5ERVgsITApLFguc2V0SW50MzIoWSsxMixXLk9GRlNFVCwhMCl9fXJldHVybiBRfWZ1bmN0aW9uIHdDKCQpe3JldHVybiBiUCgkLChaKT0+e2xldCBRPW5ldyBVaW50OEFycmF5KFoubGVuZ3RoLzIpO2ZvcihsZXQgWD0wO1g8Wi5sZW5ndGg7WCs9MilRW1g+PjFdPU51bWJlci5wYXJzZUludChaLnNsaWNlKFgsWCsyKSwxNik7cmV0dXJuIFF9KX1mdW5jdGlvbiBTQygkKXtyZXR1cm4gYlAoJCwoWik9PntyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFopfSl9dmFyIHZZLEEyLEQyO3ZhciBtUD1PKCgpPT57JDgoKTt2WigpO0gkKCk7UjgoKTtHVygpO2pYKCk7TjIoKTt1JCgpO3MkKCk7dlk9Y2xhc3MgdlkgZXh0ZW5kcyBIMHtjb25zdHJ1Y3RvcigkLFosUSxYLEo9aTAuVjUsVz1bXSl7c3VwZXIoKTt0aGlzLm5vZGVzSW5kZXg9LTEsdGhpcy5idWZmZXJzSW5kZXg9LTEsdGhpcy52YXJpYWRpY0J1ZmZlckluZGV4PS0xLHRoaXMuYnl0ZXM9JCx0aGlzLm5vZGVzPVosdGhpcy5idWZmZXJzPVEsdGhpcy5kaWN0aW9uYXJpZXM9WCx0aGlzLm1ldGFkYXRhVmVyc2lvbj1KLHRoaXMudmFyaWFkaWNCdWZmZXJDb3VudHM9V312aXNpdCgkKXtyZXR1cm4gc3VwZXIudmlzaXQoJCBpbnN0YW5jZW9mIGE/JC50eXBlOiQpfXZpc2l0TnVsbCgkLHtsZW5ndGg6Wn09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlp9KX12aXNpdEJvb2woJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0SW50KCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdEZsb2F0KCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdFV0ZjgoJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLHZhbHVlT2Zmc2V0czp0aGlzLnJlYWRPZmZzZXRzKCQpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0TGFyZ2VVdGY4KCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSx2YWx1ZU9mZnNldHM6dGhpcy5yZWFkT2Zmc2V0cygkKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdFV0ZjhWaWV3KCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7bGV0IFg9dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLEo9dGhpcy5yZWFkRGF0YSgkKSxXPXRoaXMucmVhZFZhcmlhZGljQnVmZmVycyh0aGlzLm5leHRWYXJpYWRpY0J1ZmZlckNvdW50KCkpO3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsbnVsbEJpdG1hcDpYLFsidmlld3MiXTpKLFsidmFyaWFkaWNCdWZmZXJzIl06V30pfXZpc2l0QmluYXJ5KCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSx2YWx1ZU9mZnNldHM6dGhpcy5yZWFkT2Zmc2V0cygkKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdExhcmdlQmluYXJ5KCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSx2YWx1ZU9mZnNldHM6dGhpcy5yZWFkT2Zmc2V0cygkKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdEJpbmFyeVZpZXcoJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtsZXQgWD10aGlzLnJlYWROdWxsQml0bWFwKCQsUSksSj10aGlzLnJlYWREYXRhKCQpLFc9dGhpcy5yZWFkVmFyaWFkaWNCdWZmZXJzKHRoaXMubmV4dFZhcmlhZGljQnVmZmVyQ291bnQoKSk7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOlgsWyJ2aWV3cyJdOkosWyJ2YXJpYWRpY0J1ZmZlcnMiXTpXfSl9dmlzaXRGaXhlZFNpemVCaW5hcnkoJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0RGF0ZSgkLHtsZW5ndGg6WixudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXRUaW1lc3RhbXAoJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLGRhdGE6dGhpcy5yZWFkRGF0YSgkKX0pfXZpc2l0VGltZSgkLHtsZW5ndGg6WixudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXREZWNpbWFsKCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxkYXRhOnRoaXMucmVhZERhdGEoJCl9KX12aXNpdExpc3QoJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLHZhbHVlT2Zmc2V0czp0aGlzLnJlYWRPZmZzZXRzKCQpLGNoaWxkOnRoaXMudmlzaXQoJC5jaGlsZHJlblswXSl9KX12aXNpdFN0cnVjdCgkLHtsZW5ndGg6WixudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksY2hpbGRyZW46dGhpcy52aXNpdE1hbnkoJC5jaGlsZHJlbil9KX12aXNpdFVuaW9uKCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7aWYodGhpcy5tZXRhZGF0YVZlcnNpb248aTAuVjUpdGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpO3JldHVybiAkLm1vZGU9PT1tMC5TcGFyc2U/dGhpcy52aXNpdFNwYXJzZVVuaW9uKCQse2xlbmd0aDpaLG51bGxDb3VudDpRfSk6dGhpcy52aXNpdERlbnNlVW5pb24oJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9KX12aXNpdERlbnNlVW5pb24oJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLHR5cGVJZHM6dGhpcy5yZWFkVHlwZUlkcygkKSx2YWx1ZU9mZnNldHM6dGhpcy5yZWFkT2Zmc2V0cygkKSxjaGlsZHJlbjp0aGlzLnZpc2l0TWFueSgkLmNoaWxkcmVuKX0pfXZpc2l0U3BhcnNlVW5pb24oJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLHR5cGVJZHM6dGhpcy5yZWFkVHlwZUlkcygkKSxjaGlsZHJlbjp0aGlzLnZpc2l0TWFueSgkLmNoaWxkcmVuKX0pfXZpc2l0RGljdGlvbmFyeSgkLHtsZW5ndGg6WixudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQuaW5kaWNlcyksZGljdGlvbmFyeTp0aGlzLnJlYWREaWN0aW9uYXJ5KCQpfSl9dmlzaXRJbnRlcnZhbCgkLHtsZW5ndGg6WixudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXREdXJhdGlvbigkLHtsZW5ndGg6WixudWxsQ291bnQ6UX09dGhpcy5uZXh0RmllbGROb2RlKCkpe3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsbnVsbEJpdG1hcDp0aGlzLnJlYWROdWxsQml0bWFwKCQsUSksZGF0YTp0aGlzLnJlYWREYXRhKCQpfSl9dmlzaXRGaXhlZFNpemVMaXN0KCQse2xlbmd0aDpaLG51bGxDb3VudDpRfT10aGlzLm5leHRGaWVsZE5vZGUoKSl7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6WixudWxsQ291bnQ6USxudWxsQml0bWFwOnRoaXMucmVhZE51bGxCaXRtYXAoJCxRKSxjaGlsZDp0aGlzLnZpc2l0KCQuY2hpbGRyZW5bMF0pfSl9dmlzaXRNYXAoJCx7bGVuZ3RoOlosbnVsbENvdW50OlF9PXRoaXMubmV4dEZpZWxkTm9kZSgpKXtyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLG51bGxCaXRtYXA6dGhpcy5yZWFkTnVsbEJpdG1hcCgkLFEpLHZhbHVlT2Zmc2V0czp0aGlzLnJlYWRPZmZzZXRzKCQpLGNoaWxkOnRoaXMudmlzaXQoJC5jaGlsZHJlblswXSl9KX1uZXh0RmllbGROb2RlKCl7cmV0dXJuIHRoaXMubm9kZXNbKyt0aGlzLm5vZGVzSW5kZXhdfW5leHRCdWZmZXJSYW5nZSgpe3JldHVybiB0aGlzLmJ1ZmZlcnNbKyt0aGlzLmJ1ZmZlcnNJbmRleF19cmVhZE51bGxCaXRtYXAoJCxaLFE9dGhpcy5uZXh0QnVmZmVyUmFuZ2UoKSl7cmV0dXJuIFo+MCYmdGhpcy5yZWFkRGF0YSgkLFEpfHxuZXcgVWludDhBcnJheSgwKX1yZWFkT2Zmc2V0cygkLFope3JldHVybiB0aGlzLnJlYWREYXRhKCQsWil9cmVhZFR5cGVJZHMoJCxaKXtyZXR1cm4gdGhpcy5yZWFkRGF0YSgkLFopfXJlYWREYXRhKCQse2xlbmd0aDpaLG9mZnNldDpRfT10aGlzLm5leHRCdWZmZXJSYW5nZSgpKXtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShRLFErWil9cmVhZFZhcmlhZGljQnVmZmVycygkKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOiR9LCgpPT50aGlzLnJlYWREYXRhKG51bGwpKX1uZXh0VmFyaWFkaWNCdWZmZXJDb3VudCgpe3ZhciAkO3JldHVybigkPXRoaXMudmFyaWFkaWNCdWZmZXJDb3VudHNbKyt0aGlzLnZhcmlhZGljQnVmZmVySW5kZXhdKSE9PW51bGwmJiQhPT12b2lkIDA/JDowfXJlYWREaWN0aW9uYXJ5KCQpe3JldHVybiB0aGlzLmRpY3Rpb25hcmllcy5nZXQoJC5pZCl9fTtBMj1jbGFzcyBBMiBleHRlbmRzIHZZe2NvbnN0cnVjdG9yKCQsWixRLFgsSixXPVtdKXtzdXBlcihuZXcgVWludDhBcnJheSgwKSxaLFEsWCxKLFcpO3RoaXMuc291cmNlcz0kfXJlYWROdWxsQml0bWFwKCQsWix7b2Zmc2V0OlF9PXRoaXMubmV4dEJ1ZmZlclJhbmdlKCkpe3JldHVybiBaPD0wP25ldyBVaW50OEFycmF5KDApOiQ2KHRoaXMuc291cmNlc1tRXSl9cmVhZE9mZnNldHMoJCx7b2Zmc2V0Olp9PXRoaXMubmV4dEJ1ZmZlclJhbmdlKCkpe3JldHVybiBTMChVaW50OEFycmF5LFMwKCQuT2Zmc2V0QXJyYXlUeXBlLHRoaXMuc291cmNlc1taXSkpfXJlYWRUeXBlSWRzKCQse29mZnNldDpafT10aGlzLm5leHRCdWZmZXJSYW5nZSgpKXtyZXR1cm4gUzAoVWludDhBcnJheSxTMCgkLkFycmF5VHlwZSx0aGlzLnNvdXJjZXNbWl0pKX1yZWFkRGF0YSgkLHtvZmZzZXQ6Wn09dGhpcy5uZXh0QnVmZmVyUmFuZ2UoKSl7bGV0e3NvdXJjZXM6UX09dGhpcztpZihrLmlzVGltZXN0YW1wKCQpKXJldHVybiBTMChVaW50OEFycmF5LFNaLmNvbnZlcnRBcnJheShRW1pdKSk7ZWxzZSBpZigoay5pc0ludCgkKXx8ay5pc1RpbWUoJCkpJiYkLmJpdFdpZHRoPT09NjR8fGsuaXNEdXJhdGlvbigkKSlyZXR1cm4gUzAoVWludDhBcnJheSxTWi5jb252ZXJ0QXJyYXkoUVtaXSkpO2Vsc2UgaWYoay5pc0RhdGUoJCkmJiQudW5pdD09PXIwLk1JTExJU0VDT05EKXJldHVybiBTMChVaW50OEFycmF5LFNaLmNvbnZlcnRBcnJheShRW1pdKSk7ZWxzZSBpZihrLmlzRGVjaW1hbCgkKSlyZXR1cm4gUzAoVWludDhBcnJheSxROC5jb252ZXJ0QXJyYXkoUVtaXSkpO2Vsc2UgaWYoay5pc0JpbmFyeSgkKXx8ay5pc0xhcmdlQmluYXJ5KCQpfHxrLmlzRml4ZWRTaXplQmluYXJ5KCQpKXJldHVybiBFQyhRW1pdKTtlbHNlIGlmKGsuaXNCaW5hcnlWaWV3KCQpKXJldHVybiB3QyhRW1pdKTtlbHNlIGlmKGsuaXNVdGY4VmlldygkKSlyZXR1cm4gU0MoUVtaXSk7ZWxzZSBpZihrLmlzQm9vbCgkKSlyZXR1cm4gJDYoUVtaXSk7ZWxzZSBpZihrLmlzVXRmOCgkKXx8ay5pc0xhcmdlVXRmOCgkKSlyZXR1cm4gTFEoUVtaXS5qb2luKCIiKSk7ZWxzZSBpZihrLmlzSW50ZXJ2YWwoJCkpc3dpdGNoKCQudW5pdCl7Y2FzZSBzMC5EQVlfVElNRTpyZXR1cm4gVTIoUVtaXSk7Y2FzZSBzMC5NT05USF9EQVlfTkFOTzpyZXR1cm4gTTIoUVtaXSk7ZGVmYXVsdDpicmVha31yZXR1cm4gUzAoVWludDhBcnJheSxTMCgkLkFycmF5VHlwZSxRW1pdLm1hcCgoWCk9PitYKSkpfXJlYWRWYXJpYWRpY0J1ZmZlcnMoJCl7bGV0IFo9W107Zm9yKGxldCBRPTA7UTwkO1ErKyl7bGV0e29mZnNldDpYfT10aGlzLm5leHRCdWZmZXJSYW5nZSgpLEo9dGhpcy5zb3VyY2VzW1hdO1oucHVzaChoUChKKSl9cmV0dXJuIFp9fTtEMj1jbGFzcyBEMiBleHRlbmRzIHZZe2NvbnN0cnVjdG9yKCQsWixRLFgsSixXPVtdKXtzdXBlcihuZXcgVWludDhBcnJheSgwKSxaLFEsWCxKLFcpO3RoaXMuYm9keUNodW5rcz0kfXJlYWREYXRhKCQsWj10aGlzLm5leHRCdWZmZXJSYW5nZSgpKXtyZXR1cm4gdGhpcy5ib2R5Q2h1bmtzW3RoaXMuYnVmZmVyc0luZGV4XX19fSk7dmFyIHlZO3ZhciBPMj1PKCgpPT57JFgoKTtSJCgpO3MkKCk7eVk9Y2xhc3MgeVkgZXh0ZW5kcyBTUXtjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLl92YWx1ZXM9bmV3IHdRKFVpbnQ4QXJyYXkpfWdldCBieXRlTGVuZ3RoKCl7bGV0ICQ9dGhpcy5fcGVuZGluZ0xlbmd0aCt0aGlzLmxlbmd0aCo0O3JldHVybiB0aGlzLl9vZmZzZXRzJiYoJCs9dGhpcy5fb2Zmc2V0cy5ieXRlTGVuZ3RoKSx0aGlzLl92YWx1ZXMmJigkKz10aGlzLl92YWx1ZXMuYnl0ZUxlbmd0aCksdGhpcy5fbnVsbHMmJigkKz10aGlzLl9udWxscy5ieXRlTGVuZ3RoKSwkfXNldFZhbHVlKCQsWil7cmV0dXJuIHN1cGVyLnNldFZhbHVlKCQsJDAoWikpfV9mbHVzaFBlbmRpbmcoJCxaKXtsZXQgUT10aGlzLl9vZmZzZXRzLFg9dGhpcy5fdmFsdWVzLnJlc2VydmUoWikuYnVmZmVyLEo9MDtmb3IobGV0W1csWV1vZiAkKWlmKFk9PT12b2lkIDApUS5zZXQoVywwKTtlbHNle2xldCBHPVkubGVuZ3RoO1guc2V0KFksSiksUS5zZXQoVyxHKSxKKz1HfX19fSk7dmFyIGhZO3ZhciBDMj1PKCgpPT57cyQoKTskWCgpO1IkKCk7aFk9Y2xhc3MgaFkgZXh0ZW5kcyBTUXtjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLl92YWx1ZXM9bmV3IHdRKFVpbnQ4QXJyYXkpfWdldCBieXRlTGVuZ3RoKCl7bGV0ICQ9dGhpcy5fcGVuZGluZ0xlbmd0aCt0aGlzLmxlbmd0aCo0O3JldHVybiB0aGlzLl9vZmZzZXRzJiYoJCs9dGhpcy5fb2Zmc2V0cy5ieXRlTGVuZ3RoKSx0aGlzLl92YWx1ZXMmJigkKz10aGlzLl92YWx1ZXMuYnl0ZUxlbmd0aCksdGhpcy5fbnVsbHMmJigkKz10aGlzLl9udWxscy5ieXRlTGVuZ3RoKSwkfXNldFZhbHVlKCQsWil7cmV0dXJuIHN1cGVyLnNldFZhbHVlKCQsJDAoWikpfV9mbHVzaFBlbmRpbmcoJCxaKXtsZXQgUT10aGlzLl9vZmZzZXRzLFg9dGhpcy5fdmFsdWVzLnJlc2VydmUoWikuYnVmZmVyLEo9MDtmb3IobGV0W1csWV1vZiAkKWlmKFk9PT12b2lkIDApUS5zZXQoVyxCaWdJbnQoMCkpO2Vsc2V7bGV0IEc9WS5sZW5ndGg7WC5zZXQoWSxKKSxRLnNldChXLEJpZ0ludChHKSksSis9R319fX0pO3ZhciBqMjt2YXIgZlA9TygoKT0+eyRYKCk7UiQoKTtqMj1jbGFzcyBqMiBleHRlbmRzIE0ke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3ZhbHVlcz1uZXcgVFl9c2V0VmFsdWUoJCxaKXt0aGlzLl92YWx1ZXMuc2V0KCQsK1opfX19KTt2YXIgVVcsaTQscjQ7dmFyIHVQPU8oKCk9PntSJCgpO0VRKCk7VVc9Y2xhc3MgVVcgZXh0ZW5kcyByJHt9O1VXLnByb3RvdHlwZS5fc2V0VmFsdWU9aUs7aTQ9Y2xhc3MgaTQgZXh0ZW5kcyBVV3t9O2k0LnByb3RvdHlwZS5fc2V0VmFsdWU9cTQ7cjQ9Y2xhc3MgcjQgZXh0ZW5kcyBVV3t9O3I0LnByb3RvdHlwZS5fc2V0VmFsdWU9UDR9KTt2YXIgYTQ7dmFyIHBQPU8oKCk9PntSJCgpO0VRKCk7YTQ9Y2xhc3MgYTQgZXh0ZW5kcyByJHt9O2E0LnByb3RvdHlwZS5fc2V0VmFsdWU9dEt9KTt2YXIgVjI7dmFyIGNQPU8oKCk9PntIJCgpO1IkKCk7dDQoKTtWMj1jbGFzcyBWMiBleHRlbmRzIE0ke2NvbnN0cnVjdG9yKHt0eXBlOiQsbnVsbFZhbHVlczpaLGRpY3Rpb25hcnlIYXNoRnVuY3Rpb246UX0pe3N1cGVyKHt0eXBlOm5ldyBZWigkLmRpY3Rpb25hcnksJC5pbmRpY2VzLCQuaWQsJC5pc09yZGVyZWQpfSk7aWYodGhpcy5fbnVsbHM9bnVsbCx0aGlzLl9kaWN0aW9uYXJ5T2Zmc2V0PTAsdGhpcy5fa2V5c1RvSW5kaWNlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuaW5kaWNlcz1CWCh7dHlwZTp0aGlzLnR5cGUuaW5kaWNlcyxudWxsVmFsdWVzOlp9KSx0aGlzLmRpY3Rpb25hcnk9Qlgoe3R5cGU6dGhpcy50eXBlLmRpY3Rpb25hcnksbnVsbFZhbHVlczpudWxsfSksdHlwZW9mIFE9PT0iZnVuY3Rpb24iKXRoaXMudmFsdWVUb0tleT1RfWdldCB2YWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRpY2VzLnZhbHVlc31nZXQgbnVsbENvdW50KCl7cmV0dXJuIHRoaXMuaW5kaWNlcy5udWxsQ291bnR9Z2V0IG51bGxCaXRtYXAoKXtyZXR1cm4gdGhpcy5pbmRpY2VzLm51bGxCaXRtYXB9Z2V0IGJ5dGVMZW5ndGgoKXtyZXR1cm4gdGhpcy5pbmRpY2VzLmJ5dGVMZW5ndGgrdGhpcy5kaWN0aW9uYXJ5LmJ5dGVMZW5ndGh9Z2V0IHJlc2VydmVkTGVuZ3RoKCl7cmV0dXJuIHRoaXMuaW5kaWNlcy5yZXNlcnZlZExlbmd0aCt0aGlzLmRpY3Rpb25hcnkucmVzZXJ2ZWRMZW5ndGh9Z2V0IHJlc2VydmVkQnl0ZUxlbmd0aCgpe3JldHVybiB0aGlzLmluZGljZXMucmVzZXJ2ZWRCeXRlTGVuZ3RoK3RoaXMuZGljdGlvbmFyeS5yZXNlcnZlZEJ5dGVMZW5ndGh9aXNWYWxpZCgkKXtyZXR1cm4gdGhpcy5pbmRpY2VzLmlzVmFsaWQoJCl9c2V0VmFsaWQoJCxaKXtsZXQgUT10aGlzLmluZGljZXM7cmV0dXJuIFo9US5zZXRWYWxpZCgkLFopLHRoaXMubGVuZ3RoPVEubGVuZ3RoLFp9c2V0VmFsdWUoJCxaKXtsZXQgUT10aGlzLl9rZXlzVG9JbmRpY2VzLFg9dGhpcy52YWx1ZVRvS2V5KFopLEo9UVtYXTtpZihKPT09dm9pZCAwKVFbWF09Sj10aGlzLl9kaWN0aW9uYXJ5T2Zmc2V0K3RoaXMuZGljdGlvbmFyeS5hcHBlbmQoWikubGVuZ3RoLTE7cmV0dXJuIHRoaXMuaW5kaWNlcy5zZXRWYWx1ZSgkLEopfWZsdXNoKCl7bGV0ICQ9dGhpcy50eXBlLFo9dGhpcy5fZGljdGlvbmFyeSxRPXRoaXMuZGljdGlvbmFyeS50b1ZlY3RvcigpLFg9dGhpcy5pbmRpY2VzLmZsdXNoKCkuY2xvbmUoJCk7cmV0dXJuIFguZGljdGlvbmFyeT1aP1ouY29uY2F0KFEpOlEsdGhpcy5maW5pc2hlZHx8KHRoaXMuX2RpY3Rpb25hcnlPZmZzZXQrPVEubGVuZ3RoKSx0aGlzLl9kaWN0aW9uYXJ5PVguZGljdGlvbmFyeSx0aGlzLmNsZWFyKCksWH1maW5pc2goKXtyZXR1cm4gdGhpcy5pbmRpY2VzLmZpbmlzaCgpLHRoaXMuZGljdGlvbmFyeS5maW5pc2goKSx0aGlzLl9kaWN0aW9uYXJ5T2Zmc2V0PTAsdGhpcy5fa2V5c1RvSW5kaWNlcz1PYmplY3QuY3JlYXRlKG51bGwpLHN1cGVyLmZpbmlzaCgpfWNsZWFyKCl7cmV0dXJuIHRoaXMuaW5kaWNlcy5jbGVhcigpLHRoaXMuZGljdGlvbmFyeS5jbGVhcigpLHN1cGVyLmNsZWFyKCl9dmFsdWVUb0tleSgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ic3RyaW5nIj8kOmAkeyR9YH19fSk7dmFyIGU0O3ZhciBsUD1PKCgpPT57UiQoKTtFUSgpO2U0PWNsYXNzIGU0IGV4dGVuZHMgciR7fTtlNC5wcm90b3R5cGUuX3NldFZhbHVlPXNLfSk7dmFyIFIyO3ZhciBkUD1PKCgpPT57dlooKTtSJCgpO0gkKCk7UjI9Y2xhc3MgUjIgZXh0ZW5kcyBNJHtzZXRWYWx1ZSgkLFope2xldFtRXT10aGlzLmNoaWxkcmVuLFg9JCp0aGlzLnN0cmlkZTtmb3IobGV0IEo9LTEsVz10aGlzLnN0cmlkZTsrK0o8VzspUS5zZXQoWCtKLFpbSl0pfXNldFZhbGlkKCQsWil7aWYoIXN1cGVyLnNldFZhbGlkKCQsWikpdGhpcy5jaGlsZHJlblswXS5zZXRWYWxpZCgoJCsxKSp0aGlzLnN0cmlkZS0xLCExKTtyZXR1cm4gWn1hZGRDaGlsZCgkLFo9IjAiKXtpZih0aGlzLm51bUNoaWxkcmVuPjApdGhyb3cgRXJyb3IoIkZpeGVkU2l6ZUxpc3RCdWlsZGVyIGNhbiBvbmx5IGhhdmUgb25lIGNoaWxkLiIpO2xldCBRPXRoaXMuY2hpbGRyZW4ucHVzaCgkKTtyZXR1cm4gdGhpcy50eXBlPW5ldyBqUSh0aGlzLnR5cGUubGlzdFNpemUsbmV3IGEoWiwkLnR5cGUsITApKSxRfX19KTt2YXIgTVcsRTIsdzIsUzI7dmFyIG5QPU8oKCk9PntTWSgpO1IkKCk7TVc9Y2xhc3MgTVcgZXh0ZW5kcyByJHtzZXRWYWx1ZSgkLFope3RoaXMuX3ZhbHVlcy5zZXQoJCxaKX19O0UyPWNsYXNzIEUyIGV4dGVuZHMgTVd7c2V0VmFsdWUoJCxaKXtzdXBlci5zZXRWYWx1ZSgkLHdZKFopKX19O3cyPWNsYXNzIHcyIGV4dGVuZHMgTVd7fTtTMj1jbGFzcyBTMiBleHRlbmRzIE1Xe319KTt2YXIgWTYsJEcsWkcsUUc7dmFyIG9QPU8oKCk9PntSJCgpO0VRKCk7WTY9Y2xhc3MgWTYgZXh0ZW5kcyByJHt9O1k2LnByb3RvdHlwZS5fc2V0VmFsdWU9ZUs7JEc9Y2xhc3MgJEcgZXh0ZW5kcyBZNnt9OyRHLnByb3RvdHlwZS5fc2V0VmFsdWU9QzQ7Wkc9Y2xhc3MgWkcgZXh0ZW5kcyBZNnt9O1pHLnByb3RvdHlwZS5fc2V0VmFsdWU9ajQ7UUc9Y2xhc3MgUUcgZXh0ZW5kcyBZNnt9O1FHLnByb3RvdHlwZS5fc2V0VmFsdWU9VjR9KTt2YXIgTUosWEcsSkcsV0csWUc7dmFyIHNQPU8oKCk9PntSJCgpO0VRKCk7TUo9Y2xhc3MgTUogZXh0ZW5kcyByJHt9O01KLnByb3RvdHlwZS5fc2V0VmFsdWU9JDI7WEc9Y2xhc3MgWEcgZXh0ZW5kcyBNSnt9O1hHLnByb3RvdHlwZS5fc2V0VmFsdWU9UjQ7Skc9Y2xhc3MgSkcgZXh0ZW5kcyBNSnt9O0pHLnByb3RvdHlwZS5fc2V0VmFsdWU9RTQ7V0c9Y2xhc3MgV0cgZXh0ZW5kcyBNSnt9O1dHLnByb3RvdHlwZS5fc2V0VmFsdWU9dzQ7WUc9Y2xhc3MgWUcgZXh0ZW5kcyBNSnt9O1lHLnByb3RvdHlwZS5fc2V0VmFsdWU9UzR9KTt2YXIgUzgsQjIsazIsSTIsXzIsVDIsZzIseDIsdjI7dmFyIGlQPU8oKCk9PntSJCgpO1M4PWNsYXNzIFM4IGV4dGVuZHMgciR7c2V0VmFsdWUoJCxaKXt0aGlzLl92YWx1ZXMuc2V0KCQsWil9fTtCMj1jbGFzcyBCMiBleHRlbmRzIFM4e307azI9Y2xhc3MgazIgZXh0ZW5kcyBTOHt9O0kyPWNsYXNzIEkyIGV4dGVuZHMgUzh7fTtfMj1jbGFzcyBfMiBleHRlbmRzIFM4e307VDI9Y2xhc3MgVDIgZXh0ZW5kcyBTOHt9O2cyPWNsYXNzIGcyIGV4dGVuZHMgUzh7fTt4Mj1jbGFzcyB4MiBleHRlbmRzIFM4e307djI9Y2xhc3MgdjIgZXh0ZW5kcyBTOHt9fSk7dmFyIHkyO3ZhciByUD1PKCgpPT57dlooKTtIJCgpOyRYKCk7UiQoKTt5Mj1jbGFzcyB5MiBleHRlbmRzIFNRe2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX29mZnNldHM9bmV3IGdZKCQudHlwZSl9YWRkQ2hpbGQoJCxaPSIwIil7aWYodGhpcy5udW1DaGlsZHJlbj4wKXRocm93IEVycm9yKCJMaXN0QnVpbGRlciBjYW4gb25seSBoYXZlIG9uZSBjaGlsZC4iKTtyZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLm51bUNoaWxkcmVuXT0kLHRoaXMudHlwZT1uZXcgTFoobmV3IGEoWiwkLnR5cGUsITApKSx0aGlzLm51bUNoaWxkcmVuLTF9X2ZsdXNoUGVuZGluZygkKXtsZXQgWj10aGlzLl9vZmZzZXRzLFtRXT10aGlzLmNoaWxkcmVuO2ZvcihsZXRbWCxKXW9mICQpaWYodHlwZW9mIEo+InUiKVouc2V0KFgsMCk7ZWxzZXtsZXQgVz1KLFk9Vy5sZW5ndGgsRz1aLnNldChYLFkpLmJ1ZmZlcltYXTtmb3IobGV0IEg9LTE7KytIPFk7KVEuc2V0KEcrSCxXW0hdKX19fX0pO3ZhciBoMjt2YXIgYVA9TygoKT0+e3ZaKCk7SCQoKTtSJCgpO2gyPWNsYXNzIGgyIGV4dGVuZHMgU1F7c2V0KCQsWil7cmV0dXJuIHN1cGVyLnNldCgkLFopfXNldFZhbHVlKCQsWil7bGV0IFE9WiBpbnN0YW5jZW9mIE1hcD9aOm5ldyBNYXAoT2JqZWN0LmVudHJpZXMoWikpLFg9dGhpcy5fcGVuZGluZ3x8KHRoaXMuX3BlbmRpbmc9bmV3IE1hcCksSj1YLmdldCgkKTtKJiYodGhpcy5fcGVuZGluZ0xlbmd0aC09Si5zaXplKSx0aGlzLl9wZW5kaW5nTGVuZ3RoKz1RLnNpemUsWC5zZXQoJCxRKX1hZGRDaGlsZCgkLFo9YCR7dGhpcy5udW1DaGlsZHJlbn1gKXtpZih0aGlzLm51bUNoaWxkcmVuPjApdGhyb3cgRXJyb3IoIkxpc3RCdWlsZGVyIGNhbiBvbmx5IGhhdmUgb25lIGNoaWxkLiIpO3JldHVybiB0aGlzLmNoaWxkcmVuW3RoaXMubnVtQ2hpbGRyZW5dPSQsdGhpcy50eXBlPW5ldyBlWihuZXcgYShaLCQudHlwZSwhMCksdGhpcy50eXBlLmtleXNTb3J0ZWQpLHRoaXMubnVtQ2hpbGRyZW4tMX1fZmx1c2hQZW5kaW5nKCQpe2xldCBaPXRoaXMuX29mZnNldHMsW1FdPXRoaXMuY2hpbGRyZW47Zm9yKGxldFtYLEpdb2YgJClpZihKPT09dm9pZCAwKVouc2V0KFgsMCk7ZWxzZXtsZXR7W1hdOlcsW1grMV06WX09Wi5zZXQoWCxKLnNpemUpLmJ1ZmZlcjtmb3IobGV0IEcgb2YgSi5lbnRyaWVzKCkpaWYoUS5zZXQoVyxHKSwrK1c+PVkpYnJlYWt9fX19KTt2YXIgYjI7dmFyIHRQPU8oKCk9PntSJCgpO2IyPWNsYXNzIGIyIGV4dGVuZHMgTSR7c2V0VmFsdWUoJCxaKXt9c2V0VmFsaWQoJCxaKXtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgoJCsxLHRoaXMubGVuZ3RoKSxafX19KTt2YXIgbTI7dmFyIGVQPU8oKCk9Pnt2WigpO1IkKCk7SCQoKTttMj1jbGFzcyBtMiBleHRlbmRzIE0ke3NldFZhbHVlKCQsWil7bGV0e2NoaWxkcmVuOlEsdHlwZTpYfT10aGlzO3N3aXRjaChBcnJheS5pc0FycmF5KFopfHxaLmNvbnN0cnVjdG9yKXtjYXNlITA6cmV0dXJuIFguY2hpbGRyZW4uZm9yRWFjaCgoSixXKT0+UVtXXS5zZXQoJCxaW1ddKSk7Y2FzZSBNYXA6cmV0dXJuIFguY2hpbGRyZW4uZm9yRWFjaCgoSixXKT0+UVtXXS5zZXQoJCxaLmdldChKLm5hbWUpKSk7ZGVmYXVsdDpyZXR1cm4gWC5jaGlsZHJlbi5mb3JFYWNoKChKLFcpPT5RW1ddLnNldCgkLFpbSi5uYW1lXSkpfX1zZXRWYWxpZCgkLFope2lmKCFzdXBlci5zZXRWYWxpZCgkLFopKXRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoUSk9PlEuc2V0VmFsaWQoJCxaKSk7cmV0dXJuIFp9YWRkQ2hpbGQoJCxaPWAke3RoaXMubnVtQ2hpbGRyZW59YCl7bGV0IFE9dGhpcy5jaGlsZHJlbi5wdXNoKCQpO3JldHVybiB0aGlzLnR5cGU9bmV3IGowKFsuLi50aGlzLnR5cGUuY2hpbGRyZW4sbmV3IGEoWiwkLnR5cGUsITApXSksUX19fSk7dmFyIExKLEdHLEtHLEhHLHpHO3ZhciAkRj1PKCgpPT57UiQoKTtFUSgpO0xKPWNsYXNzIExKIGV4dGVuZHMgciR7fTtMSi5wcm90b3R5cGUuX3NldFZhbHVlPXJLO0dHPWNsYXNzIEdHIGV4dGVuZHMgTEp7fTtHRy5wcm90b3R5cGUuX3NldFZhbHVlPUY0O0tHPWNsYXNzIEtHIGV4dGVuZHMgTEp7fTtLRy5wcm90b3R5cGUuX3NldFZhbHVlPU40O0hHPWNsYXNzIEhHIGV4dGVuZHMgTEp7fTtIRy5wcm90b3R5cGUuX3NldFZhbHVlPVU0O3pHPWNsYXNzIHpHIGV4dGVuZHMgTEp7fTt6Ry5wcm90b3R5cGUuX3NldFZhbHVlPU00fSk7dmFyIEFKLHFHLFBHLEZHLE5HO3ZhciBaRj1PKCgpPT57UiQoKTtFUSgpO0FKPWNsYXNzIEFKIGV4dGVuZHMgciR7fTtBSi5wcm90b3R5cGUuX3NldFZhbHVlPWFLO3FHPWNsYXNzIHFHIGV4dGVuZHMgQUp7fTtxRy5wcm90b3R5cGUuX3NldFZhbHVlPUw0O1BHPWNsYXNzIFBHIGV4dGVuZHMgQUp7fTtQRy5wcm90b3R5cGUuX3NldFZhbHVlPUE0O0ZHPWNsYXNzIEZHIGV4dGVuZHMgQUp7fTtGRy5wcm90b3R5cGUuX3NldFZhbHVlPUQ0O05HPWNsYXNzIE5HIGV4dGVuZHMgQUp7fTtORy5wcm90b3R5cGUuX3NldFZhbHVlPU80fSk7dmFyIGJZLGYyLHUyO3ZhciBRRj1PKCgpPT57dlooKTskWCgpO1IkKCk7SCQoKTtiWT1jbGFzcyBiWSBleHRlbmRzIE0ke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO2lmKHRoaXMuX3R5cGVJZHM9bmV3IEZKKEludDhBcnJheSwwLDEpLHR5cGVvZiAkLnZhbHVlVG9DaGlsZFR5cGVJZD09PSJmdW5jdGlvbiIpdGhpcy5fdmFsdWVUb0NoaWxkVHlwZUlkPSQudmFsdWVUb0NoaWxkVHlwZUlkfWdldCB0eXBlSWRUb0NoaWxkSW5kZXgoKXtyZXR1cm4gdGhpcy50eXBlLnR5cGVJZFRvQ2hpbGRJbmRleH1hcHBlbmQoJCxaKXtyZXR1cm4gdGhpcy5zZXQodGhpcy5sZW5ndGgsJCxaKX1zZXQoJCxaLFEpe2lmKFE9PT12b2lkIDApUT10aGlzLl92YWx1ZVRvQ2hpbGRUeXBlSWQodGhpcyxaLCQpO3JldHVybiB0aGlzLnNldFZhbHVlKCQsWixRKSx0aGlzfXNldFZhbHVlKCQsWixRKXt0aGlzLl90eXBlSWRzLnNldCgkLFEpO2xldCBYPXRoaXMudHlwZS50eXBlSWRUb0NoaWxkSW5kZXhbUV0sSj10aGlzLmNoaWxkcmVuW1hdO0o9PT1udWxsfHxKPT09dm9pZCAwfHxKLnNldCgkLFopLHRoaXMubGVuZ3RoPU1hdGgubWF4KCQrMSx0aGlzLmxlbmd0aCl9YWRkQ2hpbGQoJCxaPWAke3RoaXMuY2hpbGRyZW4ubGVuZ3RofWApe2xldCBRPXRoaXMuY2hpbGRyZW4ucHVzaCgkKSx7dHlwZTp7Y2hpbGRyZW46WCxtb2RlOkosdHlwZUlkczpXfX09dGhpcyxZPVsuLi5YLG5ldyBhKFosJC50eXBlKV07cmV0dXJuIHRoaXMudHlwZT1uZXcgQ1EoSixbLi4uVyxRXSxZKSxRfV92YWx1ZVRvQ2hpbGRUeXBlSWQoJCxaLFEpe3Rocm93IEVycm9yKCJDYW5ub3QgbWFwIFVuaW9uQnVpbGRlciB2YWx1ZSB0byBjaGlsZCB0eXBlSWQuIFBhc3MgdGhlIGBjaGlsZFR5cGVJZGAgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byB1bmlvbkJ1aWxkZXIuYXBwZW5kKCksIG9yIHN1cHBseSBhIGB2YWx1ZVRvQ2hpbGRUeXBlSWRgIGZ1bmN0aW9uIGFzIHBhcnQgb2YgdGhlIFVuaW9uQnVpbGRlciBjb25zdHJ1Y3RvciBvcHRpb25zLiIpfX07ZjI9Y2xhc3MgZjIgZXh0ZW5kcyBiWXt9O3UyPWNsYXNzIHUyIGV4dGVuZHMgYll7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5fb2Zmc2V0cz1uZXcgRkooSW50MzJBcnJheSl9c2V0VmFsdWUoJCxaLFEpe2xldCBYPXRoaXMuX3R5cGVJZHMuc2V0KCQsUSkuYnVmZmVyWyRdLEo9dGhpcy5nZXRDaGlsZEF0KHRoaXMudHlwZS50eXBlSWRUb0NoaWxkSW5kZXhbWF0pLFc9dGhpcy5fb2Zmc2V0cy5zZXQoJCxKLmxlbmd0aCkuYnVmZmVyWyRdO0o9PT1udWxsfHxKPT09dm9pZCAwfHxKLnNldChXLFopLHRoaXMubGVuZ3RoPU1hdGgubWF4KCQrMSx0aGlzLmxlbmd0aCl9fX0pO3ZhciBVRzt2YXIgWEY9TygoKT0+e2pYKCk7TzIoKTskWCgpO1IkKCk7VUc9Y2xhc3MgVUcgZXh0ZW5kcyBTUXtjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLl92YWx1ZXM9bmV3IHdRKFVpbnQ4QXJyYXkpfWdldCBieXRlTGVuZ3RoKCl7bGV0ICQ9dGhpcy5fcGVuZGluZ0xlbmd0aCt0aGlzLmxlbmd0aCo0O3JldHVybiB0aGlzLl9vZmZzZXRzJiYoJCs9dGhpcy5fb2Zmc2V0cy5ieXRlTGVuZ3RoKSx0aGlzLl92YWx1ZXMmJigkKz10aGlzLl92YWx1ZXMuYnl0ZUxlbmd0aCksdGhpcy5fbnVsbHMmJigkKz10aGlzLl9udWxscy5ieXRlTGVuZ3RoKSwkfXNldFZhbHVlKCQsWil7cmV0dXJuIHN1cGVyLnNldFZhbHVlKCQsTFEoWikpfV9mbHVzaFBlbmRpbmcoJCxaKXt9fTtVRy5wcm90b3R5cGUuX2ZsdXNoUGVuZGluZz15WS5wcm90b3R5cGUuX2ZsdXNoUGVuZGluZ30pO3ZhciBNRzt2YXIgSkY9TygoKT0+e2pYKCk7JFgoKTtSJCgpO0MyKCk7TUc9Y2xhc3MgTUcgZXh0ZW5kcyBTUXtjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLl92YWx1ZXM9bmV3IHdRKFVpbnQ4QXJyYXkpfWdldCBieXRlTGVuZ3RoKCl7bGV0ICQ9dGhpcy5fcGVuZGluZ0xlbmd0aCt0aGlzLmxlbmd0aCo0O3JldHVybiB0aGlzLl9vZmZzZXRzJiYoJCs9dGhpcy5fb2Zmc2V0cy5ieXRlTGVuZ3RoKSx0aGlzLl92YWx1ZXMmJigkKz10aGlzLl92YWx1ZXMuYnl0ZUxlbmd0aCksdGhpcy5fbnVsbHMmJigkKz10aGlzLl9udWxscy5ieXRlTGVuZ3RoKSwkfXNldFZhbHVlKCQsWil7cmV0dXJuIHN1cGVyLnNldFZhbHVlKCQsTFEoWikpfV9mbHVzaFBlbmRpbmcoJCxaKXt9fTtNRy5wcm90b3R5cGUuX2ZsdXNoUGVuZGluZz1oWS5wcm90b3R5cGUuX2ZsdXNoUGVuZGluZ30pO3ZhciBtWTt2YXIgcDI9TygoKT0+e0gkKCk7UiQoKTskWCgpO3MkKCk7JDgoKTttWT1jbGFzcyBtWSBleHRlbmRzIE0ke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX3ZhcmlhZGljQnVmZmVycz1bXSx0aGlzLl9jdXJyZW50QnVmZmVyPW51bGwsdGhpcy5fY3VycmVudEJ1ZmZlckluZGV4PTAsdGhpcy5fY3VycmVudEJ1ZmZlck9mZnNldD0wLHRoaXMuX2J1ZmZlclNpemU9MzM1NTQ0MzIsdGhpcy5fdmlld3M9bmV3IHdRKFVpbnQ4QXJyYXkpfWdldCBieXRlTGVuZ3RoKCl7bGV0ICQ9MDt0aGlzLl92aWV3cyYmKCQrPXRoaXMuX3ZpZXdzLmJ5dGVMZW5ndGgpLHRoaXMuX251bGxzJiYoJCs9dGhpcy5fbnVsbHMuYnl0ZUxlbmd0aCk7Zm9yKGxldCBaIG9mIHRoaXMuX3ZhcmlhZGljQnVmZmVycykkKz1aLmJ5dGVMZW5ndGg7cmV0dXJuIHRoaXMuX2N1cnJlbnRCdWZmZXImJigkKz10aGlzLl9jdXJyZW50QnVmZmVyLmJ5dGVMZW5ndGgpLCR9c2V0VmFsdWUoJCxaKXtyZXR1cm4gdGhpcy53cml0ZUJpbmFyeVZhbHVlKCQsdGhpcy5lbmNvZGVWYWx1ZShaKSl9d3JpdGVCaW5hcnlWYWx1ZSgkLFope2xldCBRPVoubGVuZ3RoLFg9KCQrMSkqUjAuRUxFTUVOVF9XSURUSCxKPXRoaXMuX3ZpZXdzLmxlbmd0aDtpZihYPkopdGhpcy5fdmlld3MucmVzZXJ2ZShYLUopO2xldCBXPXRoaXMuX3ZpZXdzLmJ1ZmZlcixZPSQqUjAuRUxFTUVOVF9XSURUSCxHPW5ldyBEYXRhVmlldyhXLmJ1ZmZlcixXLmJ5dGVPZmZzZXQrWSxSMC5FTEVNRU5UX1dJRFRIKTtpZihHLnNldEludDMyKFIwLkxFTkdUSF9PRkZTRVQsUSwhMCksUTw9UjAuSU5MSU5FX0NBUEFDSVRZKXtXLnNldChaLFkrUjAuSU5MSU5FX09GRlNFVCk7Zm9yKGxldCBIPVE7SDxSMC5JTkxJTkVfQ0FQQUNJVFk7SCsrKVdbWStSMC5JTkxJTkVfT0ZGU0VUK0hdPTB9ZWxzZXtsZXQgSD1uZXcgRGF0YVZpZXcoWi5idWZmZXIsWi5ieXRlT2Zmc2V0LE1hdGgubWluKDQsUSkpO2lmKEcuc2V0VWludDMyKFIwLklOTElORV9PRkZTRVQsSC5nZXRVaW50MzIoMCwhMCksITApLCF0aGlzLl9jdXJyZW50QnVmZmVyfHx0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0K1E+dGhpcy5fYnVmZmVyU2l6ZSl7aWYodGhpcy5fY3VycmVudEJ1ZmZlcil0aGlzLl92YXJpYWRpY0J1ZmZlcnMucHVzaCh0aGlzLl9jdXJyZW50QnVmZmVyLmJ1ZmZlci5zbGljZSgwLHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQpKTt0aGlzLl9jdXJyZW50QnVmZmVyPW5ldyB3UShVaW50OEFycmF5KSx0aGlzLl9jdXJyZW50QnVmZmVySW5kZXg9dGhpcy5fdmFyaWFkaWNCdWZmZXJzLmxlbmd0aCx0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0PTB9dGhpcy5fY3VycmVudEJ1ZmZlci5yZXNlcnZlKFEpLmJ1ZmZlci5zZXQoWix0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0KSxHLnNldEludDMyKFIwLkJVRkZFUl9JTkRFWF9PRkZTRVQsdGhpcy5fY3VycmVudEJ1ZmZlckluZGV4LCEwKSxHLnNldEludDMyKFIwLkJVRkZFUl9PRkZTRVRfT0ZGU0VULHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQsITApLHRoaXMuX2N1cnJlbnRCdWZmZXJPZmZzZXQrPVF9cmV0dXJuIHRoaXN9ZW5jb2RlVmFsdWUoJCl7cmV0dXJuICQwKCQpfXNldFZhbGlkKCQsWil7bGV0IFE9KCQrMSkqUjAuRUxFTUVOVF9XSURUSCxYPXRoaXMuX3ZpZXdzLmxlbmd0aDtpZihRPlgpdGhpcy5fdmlld3MucmVzZXJ2ZShRLVgpO2xldCBKPXN1cGVyLnNldFZhbGlkKCQsWik7aWYoIUope2xldCBXPXRoaXMuX3ZpZXdzLmJ1ZmZlcixZPSQqUjAuRUxFTUVOVF9XSURUSDtmb3IobGV0IEc9MDtHPFIwLkVMRU1FTlRfV0lEVEg7RysrKVdbWStHXT0wfXJldHVybiBKfWNsZWFyKCl7cmV0dXJuIHRoaXMuX3ZhcmlhZGljQnVmZmVycz1bXSx0aGlzLl9jdXJyZW50QnVmZmVyPW51bGwsdGhpcy5fY3VycmVudEJ1ZmZlckluZGV4PTAsdGhpcy5fY3VycmVudEJ1ZmZlck9mZnNldD0wLHRoaXMuX3ZpZXdzLmNsZWFyKCksc3VwZXIuY2xlYXIoKX1mbHVzaCgpe2xldHt0eXBlOiQsbGVuZ3RoOlosbnVsbENvdW50OlEsX3ZpZXdzOlgsX251bGxzOkp9PXRoaXM7aWYodGhpcy5fY3VycmVudEJ1ZmZlciYmdGhpcy5fY3VycmVudEJ1ZmZlck9mZnNldD4wKXRoaXMuX3ZhcmlhZGljQnVmZmVycy5wdXNoKHRoaXMuX2N1cnJlbnRCdWZmZXIuYnVmZmVyLnNsaWNlKDAsdGhpcy5fY3VycmVudEJ1ZmZlck9mZnNldCkpLHRoaXMuX2N1cnJlbnRCdWZmZXI9bnVsbCx0aGlzLl9jdXJyZW50QnVmZmVyT2Zmc2V0PTA7bGV0IFc9WC5mbHVzaChaKlIwLkVMRU1FTlRfV0lEVEgpLFk9UT4wP0ouZmx1c2goWik6dm9pZCAwLEc9dGhpcy5fdmFyaWFkaWNCdWZmZXJzLnNsaWNlKCk7cmV0dXJuIHRoaXMuX3ZhcmlhZGljQnVmZmVycz1bXSx0aGlzLl9jdXJyZW50QnVmZmVySW5kZXg9MCx0aGlzLmNsZWFyKCksSSh7dHlwZTokLGxlbmd0aDpaLG51bGxDb3VudDpRLG51bGxCaXRtYXA6WSxbInZpZXdzIl06VyxbInZhcmlhZGljQnVmZmVycyJdOkd9KX1maW5pc2goKXtyZXR1cm4gdGhpcy5maW5pc2hlZD0hMCx0aGlzfX19KTt2YXIgYzI7dmFyIFdGPU8oKCk9PntwMigpO2pYKCk7YzI9Y2xhc3MgYzIgZXh0ZW5kcyBtWXtjb25zdHJ1Y3RvcigkKXtzdXBlcigkKX1zZXRWYWx1ZSgkLFope3JldHVybiB0aGlzLndyaXRlQmluYXJ5VmFsdWUoJCxMUShaKSl9fX0pO3ZhciBZRixHRjt2YXIgS0Y9TygoKT0+e1I4KCk7TzIoKTtDMigpO2ZQKCk7dVAoKTtwUCgpO2NQKCk7bFAoKTtkUCgpO25QKCk7b1AoKTtzUCgpO2lQKCk7clAoKTthUCgpO3RQKCk7ZVAoKTskRigpO1pGKCk7UUYoKTtYRigpO0pGKCk7cDIoKTtXRigpO1lGPWNsYXNzIFlGIGV4dGVuZHMgSDB7dmlzaXROdWxsKCl7cmV0dXJuIGIyfXZpc2l0Qm9vbCgpe3JldHVybiBqMn12aXNpdEludCgpe3JldHVybiBTOH12aXNpdEludDgoKXtyZXR1cm4gQjJ9dmlzaXRJbnQxNigpe3JldHVybiBrMn12aXNpdEludDMyKCl7cmV0dXJuIEkyfXZpc2l0SW50NjQoKXtyZXR1cm4gXzJ9dmlzaXRVaW50OCgpe3JldHVybiBUMn12aXNpdFVpbnQxNigpe3JldHVybiBnMn12aXNpdFVpbnQzMigpe3JldHVybiB4Mn12aXNpdFVpbnQ2NCgpe3JldHVybiB2Mn12aXNpdEZsb2F0KCl7cmV0dXJuIE1XfXZpc2l0RmxvYXQxNigpe3JldHVybiBFMn12aXNpdEZsb2F0MzIoKXtyZXR1cm4gdzJ9dmlzaXRGbG9hdDY0KCl7cmV0dXJuIFMyfXZpc2l0VXRmOCgpe3JldHVybiBVR312aXNpdExhcmdlVXRmOCgpe3JldHVybiBNR312aXNpdEJpbmFyeSgpe3JldHVybiB5WX12aXNpdExhcmdlQmluYXJ5KCl7cmV0dXJuIGhZfXZpc2l0Rml4ZWRTaXplQmluYXJ5KCl7cmV0dXJuIGU0fXZpc2l0RGF0ZSgpe3JldHVybiBVV312aXNpdERhdGVEYXkoKXtyZXR1cm4gaTR9dmlzaXREYXRlTWlsbGlzZWNvbmQoKXtyZXR1cm4gcjR9dmlzaXRUaW1lc3RhbXAoKXtyZXR1cm4gTEp9dmlzaXRUaW1lc3RhbXBTZWNvbmQoKXtyZXR1cm4gR0d9dmlzaXRUaW1lc3RhbXBNaWxsaXNlY29uZCgpe3JldHVybiBLR312aXNpdFRpbWVzdGFtcE1pY3Jvc2Vjb25kKCl7cmV0dXJuIEhHfXZpc2l0VGltZXN0YW1wTmFub3NlY29uZCgpe3JldHVybiB6R312aXNpdFRpbWUoKXtyZXR1cm4gQUp9dmlzaXRUaW1lU2Vjb25kKCl7cmV0dXJuIHFHfXZpc2l0VGltZU1pbGxpc2Vjb25kKCl7cmV0dXJuIFBHfXZpc2l0VGltZU1pY3Jvc2Vjb25kKCl7cmV0dXJuIEZHfXZpc2l0VGltZU5hbm9zZWNvbmQoKXtyZXR1cm4gTkd9dmlzaXREZWNpbWFsKCl7cmV0dXJuIGE0fXZpc2l0TGlzdCgpe3JldHVybiB5Mn12aXNpdFN0cnVjdCgpe3JldHVybiBtMn12aXNpdFVuaW9uKCl7cmV0dXJuIGJZfXZpc2l0RGVuc2VVbmlvbigpe3JldHVybiB1Mn12aXNpdFNwYXJzZVVuaW9uKCl7cmV0dXJuIGYyfXZpc2l0RGljdGlvbmFyeSgpe3JldHVybiBWMn12aXNpdEludGVydmFsKCl7cmV0dXJuIFk2fXZpc2l0SW50ZXJ2YWxEYXlUaW1lKCl7cmV0dXJuICRHfXZpc2l0SW50ZXJ2YWxZZWFyTW9udGgoKXtyZXR1cm4gWkd9dmlzaXRJbnRlcnZhbE1vbnRoRGF5TmFubygpe3JldHVybiBRR312aXNpdER1cmF0aW9uKCl7cmV0dXJuIE1KfXZpc2l0RHVyYXRpb25TZWNvbmQoKXtyZXR1cm4gWEd9dmlzaXREdXJhdGlvbk1pbGxpc2Vjb25kKCl7cmV0dXJuIEpHfXZpc2l0RHVyYXRpb25NaWNyb3NlY29uZCgpe3JldHVybiBXR312aXNpdER1cmF0aW9uTmFub3NlY29uZCgpe3JldHVybiBZR312aXNpdEZpeGVkU2l6ZUxpc3QoKXtyZXR1cm4gUjJ9dmlzaXRNYXAoKXtyZXR1cm4gaDJ9dmlzaXRCaW5hcnlWaWV3KCl7cmV0dXJuIG1ZfXZpc2l0VXRmOFZpZXcoKXtyZXR1cm4gYzJ9fTtHRj1uZXcgWUZ9KTtmdW5jdGlvbiBoWigkLFope3JldHVybiBaIGluc3RhbmNlb2YgJC5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiBrWCgkLFope3JldHVybiAkPT09Wnx8aFooJCxaKX1mdW5jdGlvbiBJWCgkLFope3JldHVybiAkPT09Wnx8aFooJCxaKSYmJC5iaXRXaWR0aD09PVouYml0V2lkdGgmJiQuaXNTaWduZWQ9PT1aLmlzU2lnbmVkfWZ1bmN0aW9uIExHKCQsWil7cmV0dXJuICQ9PT1afHxoWigkLFopJiYkLnByZWNpc2lvbj09PVoucHJlY2lzaW9ufWZ1bmN0aW9uIEJDKCQsWil7cmV0dXJuICQ9PT1afHxoWigkLFopJiYkLmJ5dGVXaWR0aD09PVouYnl0ZVdpZHRofWZ1bmN0aW9uIGwyKCQsWil7cmV0dXJuICQ9PT1afHxoWigkLFopJiYkLnVuaXQ9PT1aLnVuaXR9ZnVuY3Rpb24gZlkoJCxaKXtyZXR1cm4gJD09PVp8fGhaKCQsWikmJiQudW5pdD09PVoudW5pdCYmJC50aW1lem9uZT09PVoudGltZXpvbmV9ZnVuY3Rpb24gdVkoJCxaKXtyZXR1cm4gJD09PVp8fGhaKCQsWikmJiQudW5pdD09PVoudW5pdCYmJC5iaXRXaWR0aD09PVouYml0V2lkdGh9ZnVuY3Rpb24ga0MoJCxaKXtyZXR1cm4gJD09PVp8fGhaKCQsWikmJiQuY2hpbGRyZW4ubGVuZ3RoPT09Wi5jaGlsZHJlbi5sZW5ndGgmJlpYLmNvbXBhcmVNYW55RmllbGRzKCQuY2hpbGRyZW4sWi5jaGlsZHJlbil9ZnVuY3Rpb24gSUMoJCxaKXtyZXR1cm4gJD09PVp8fGhaKCQsWikmJiQuY2hpbGRyZW4ubGVuZ3RoPT09Wi5jaGlsZHJlbi5sZW5ndGgmJlpYLmNvbXBhcmVNYW55RmllbGRzKCQuY2hpbGRyZW4sWi5jaGlsZHJlbil9ZnVuY3Rpb24gZDIoJCxaKXtyZXR1cm4gJD09PVp8fGhaKCQsWikmJiQubW9kZT09PVoubW9kZSYmJC50eXBlSWRzLmV2ZXJ5KChRLFgpPT5RPT09Wi50eXBlSWRzW1hdKSYmWlguY29tcGFyZU1hbnlGaWVsZHMoJC5jaGlsZHJlbixaLmNoaWxkcmVuKX1mdW5jdGlvbiBfQygkLFope3JldHVybiAkPT09Wnx8aFooJCxaKSYmJC5pZD09PVouaWQmJiQuaXNPcmRlcmVkPT09Wi5pc09yZGVyZWQmJlpYLnZpc2l0KCQuaW5kaWNlcyxaLmluZGljZXMpJiZaWC52aXNpdCgkLmRpY3Rpb25hcnksWi5kaWN0aW9uYXJ5KX1mdW5jdGlvbiBBRygkLFope3JldHVybiAkPT09Wnx8aFooJCxaKSYmJC51bml0PT09Wi51bml0fWZ1bmN0aW9uIHBZKCQsWil7cmV0dXJuICQ9PT1afHxoWigkLFopJiYkLnVuaXQ9PT1aLnVuaXR9ZnVuY3Rpb24gVEMoJCxaKXtyZXR1cm4gJD09PVp8fGhaKCQsWikmJiQubGlzdFNpemU9PT1aLmxpc3RTaXplJiYkLmNoaWxkcmVuLmxlbmd0aD09PVouY2hpbGRyZW4ubGVuZ3RoJiZaWC5jb21wYXJlTWFueUZpZWxkcygkLmNoaWxkcmVuLFouY2hpbGRyZW4pfWZ1bmN0aW9uIGdDKCQsWil7cmV0dXJuICQ9PT1afHxoWigkLFopJiYkLmtleXNTb3J0ZWQ9PT1aLmtleXNTb3J0ZWQmJiQuY2hpbGRyZW4ubGVuZ3RoPT09Wi5jaGlsZHJlbi5sZW5ndGgmJlpYLmNvbXBhcmVNYW55RmllbGRzKCQuY2hpbGRyZW4sWi5jaGlsZHJlbil9ZnVuY3Rpb24gRzYoJCxaKXtyZXR1cm4gWlguY29tcGFyZVNjaGVtYXMoJCxaKX1mdW5jdGlvbiBIRigkLFope3JldHVybiBaWC5jb21wYXJlRmllbGRzKCQsWil9ZnVuY3Rpb24gREcoJCxaKXtyZXR1cm4gWlgudmlzaXQoJCxaKX12YXIgRzAsWlg7dmFyIGNZPU8oKCk9PntSOCgpO0cwPWNsYXNzIEcwIGV4dGVuZHMgSDB7Y29tcGFyZVNjaGVtYXMoJCxaKXtyZXR1cm4gJD09PVp8fFogaW5zdGFuY2VvZiAkLmNvbnN0cnVjdG9yJiZ0aGlzLmNvbXBhcmVNYW55RmllbGRzKCQuZmllbGRzLFouZmllbGRzKX1jb21wYXJlTWFueUZpZWxkcygkLFope3JldHVybiAkPT09Wnx8QXJyYXkuaXNBcnJheSgkKSYmQXJyYXkuaXNBcnJheShaKSYmJC5sZW5ndGg9PT1aLmxlbmd0aCYmJC5ldmVyeSgoUSxYKT0+dGhpcy5jb21wYXJlRmllbGRzKFEsWltYXSkpfWNvbXBhcmVGaWVsZHMoJCxaKXtyZXR1cm4gJD09PVp8fFogaW5zdGFuY2VvZiAkLmNvbnN0cnVjdG9yJiYkLm5hbWU9PT1aLm5hbWUmJiQubnVsbGFibGU9PT1aLm51bGxhYmxlJiZ0aGlzLnZpc2l0KCQudHlwZSxaLnR5cGUpfX07RzAucHJvdG90eXBlLnZpc2l0TnVsbD1rWDtHMC5wcm90b3R5cGUudmlzaXRCb29sPWtYO0cwLnByb3RvdHlwZS52aXNpdEludD1JWDtHMC5wcm90b3R5cGUudmlzaXRJbnQ4PUlYO0cwLnByb3RvdHlwZS52aXNpdEludDE2PUlYO0cwLnByb3RvdHlwZS52aXNpdEludDMyPUlYO0cwLnByb3RvdHlwZS52aXNpdEludDY0PUlYO0cwLnByb3RvdHlwZS52aXNpdFVpbnQ4PUlYO0cwLnByb3RvdHlwZS52aXNpdFVpbnQxNj1JWDtHMC5wcm90b3R5cGUudmlzaXRVaW50MzI9SVg7RzAucHJvdG90eXBlLnZpc2l0VWludDY0PUlYO0cwLnByb3RvdHlwZS52aXNpdEZsb2F0PUxHO0cwLnByb3RvdHlwZS52aXNpdEZsb2F0MTY9TEc7RzAucHJvdG90eXBlLnZpc2l0RmxvYXQzMj1MRztHMC5wcm90b3R5cGUudmlzaXRGbG9hdDY0PUxHO0cwLnByb3RvdHlwZS52aXNpdFV0Zjg9a1g7RzAucHJvdG90eXBlLnZpc2l0TGFyZ2VVdGY4PWtYO0cwLnByb3RvdHlwZS52aXNpdFV0ZjhWaWV3PWtYO0cwLnByb3RvdHlwZS52aXNpdEJpbmFyeT1rWDtHMC5wcm90b3R5cGUudmlzaXRMYXJnZUJpbmFyeT1rWDtHMC5wcm90b3R5cGUudmlzaXRCaW5hcnlWaWV3PWtYO0cwLnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUJpbmFyeT1CQztHMC5wcm90b3R5cGUudmlzaXREYXRlPWwyO0cwLnByb3RvdHlwZS52aXNpdERhdGVEYXk9bDI7RzAucHJvdG90eXBlLnZpc2l0RGF0ZU1pbGxpc2Vjb25kPWwyO0cwLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcD1mWTtHMC5wcm90b3R5cGUudmlzaXRUaW1lc3RhbXBTZWNvbmQ9Zlk7RzAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWlsbGlzZWNvbmQ9Zlk7RzAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTWljcm9zZWNvbmQ9Zlk7RzAucHJvdG90eXBlLnZpc2l0VGltZXN0YW1wTmFub3NlY29uZD1mWTtHMC5wcm90b3R5cGUudmlzaXRUaW1lPXVZO0cwLnByb3RvdHlwZS52aXNpdFRpbWVTZWNvbmQ9dVk7RzAucHJvdG90eXBlLnZpc2l0VGltZU1pbGxpc2Vjb25kPXVZO0cwLnByb3RvdHlwZS52aXNpdFRpbWVNaWNyb3NlY29uZD11WTtHMC5wcm90b3R5cGUudmlzaXRUaW1lTmFub3NlY29uZD11WTtHMC5wcm90b3R5cGUudmlzaXREZWNpbWFsPWtYO0cwLnByb3RvdHlwZS52aXNpdExpc3Q9a0M7RzAucHJvdG90eXBlLnZpc2l0U3RydWN0PUlDO0cwLnByb3RvdHlwZS52aXNpdFVuaW9uPWQyO0cwLnByb3RvdHlwZS52aXNpdERlbnNlVW5pb249ZDI7RzAucHJvdG90eXBlLnZpc2l0U3BhcnNlVW5pb249ZDI7RzAucHJvdG90eXBlLnZpc2l0RGljdGlvbmFyeT1fQztHMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbD1BRztHMC5wcm90b3R5cGUudmlzaXRJbnRlcnZhbERheVRpbWU9QUc7RzAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxZZWFyTW9udGg9QUc7RzAucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWxNb250aERheU5hbm89QUc7RzAucHJvdG90eXBlLnZpc2l0RHVyYXRpb249cFk7RzAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25TZWNvbmQ9cFk7RzAucHJvdG90eXBlLnZpc2l0RHVyYXRpb25NaWxsaXNlY29uZD1wWTtHMC5wcm90b3R5cGUudmlzaXREdXJhdGlvbk1pY3Jvc2Vjb25kPXBZO0cwLnByb3RvdHlwZS52aXNpdER1cmF0aW9uTmFub3NlY29uZD1wWTtHMC5wcm90b3R5cGUudmlzaXRGaXhlZFNpemVMaXN0PVRDO0cwLnByb3RvdHlwZS52aXNpdE1hcD1nQztaWD1uZXcgRzB9KTtmdW5jdGlvbiBCWCgkKXtsZXQgWj0kLnR5cGUsUT1uZXcoR0YuZ2V0VmlzaXRGbihaKSgpKSgkKTtpZihaLmNoaWxkcmVuJiZaLmNoaWxkcmVuLmxlbmd0aD4wKXtsZXQgWD0kLmNoaWxkcmVufHxbXSxKPXtudWxsVmFsdWVzOiQubnVsbFZhbHVlc30sVz1BcnJheS5pc0FycmF5KFgpPyhZLEcpPT5YW0ddfHxKOih7bmFtZTpZfSk9PlhbWV18fEo7Zm9yKGxldFtZLEddb2YgWi5jaGlsZHJlbi5lbnRyaWVzKCkpe2xldHt0eXBlOkh9PUcsej1XKEcsWSk7US5jaGlsZHJlbi5wdXNoKEJYKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx6KSx7dHlwZTpIfSkpKX19cmV0dXJuIFF9ZnVuY3Rpb24gUVgoJCxaKXtpZigkIGluc3RhbmNlb2YgQTB8fCQgaW5zdGFuY2VvZiByfHwkLnR5cGUgaW5zdGFuY2VvZiBrKXJldHVybiBRNigkKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJCkmJiFaKXJldHVybiBRNigkKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJCkmJlope2xldCBXPSQgaW5zdGFuY2VvZiBCaWdJbnQ2NEFycmF5fHwkIGluc3RhbmNlb2YgQmlnVWludDY0QXJyYXksWT1aLkFycmF5VHlwZT09PUJpZ0ludDY0QXJyYXl8fFouQXJyYXlUeXBlPT09QmlnVWludDY0QXJyYXk7aWYoVyYmIVkpdGhyb3cgVHlwZUVycm9yKGBDYW5ub3QgY29udmVydCBCaWdJbnQgaW5wdXQgdG8gJHtafS4gQmlnSW50IGFycmF5cyBjYW4gb25seSB0YXJnZXQgQmlnSW50LWJhc2VkIHR5cGVzIChlLmcuIEludDY0LCBVaW50NjQpLmApO2lmKCFXJiZZKXRocm93IFR5cGVFcnJvcihgQ2Fubm90IGNvbnZlcnQgbm9uLUJpZ0ludCBpbnB1dCB0byAke1p9LiAke1p9IHJlcXVpcmVzIEJpZ0ludCB2YWx1ZXMuYCk7aWYoay5pc0ludChaKXx8ay5pc0Zsb2F0KFopKXtsZXQgRz0kLmNvbnN0cnVjdG9yPT09Wi5BcnJheVR5cGU/JDpuZXcgWi5BcnJheVR5cGUoJCk7cmV0dXJuIFE2KHt0eXBlOlosZGF0YTpHLG9mZnNldDowLGxlbmd0aDpHLmxlbmd0aCxudWxsQ291bnQ6MH0pfX1sZXQgUT17dHlwZTpaIT09bnVsbCYmWiE9PXZvaWQgMD9aOk9HKCQpLG51bGxWYWx1ZXM6W251bGxdfSxYPVsuLi5uMihRKSgkKV0sSj1YLmxlbmd0aD09PTE/WFswXTpYLnJlZHVjZSgoVyxZKT0+Vy5jb25jYXQoWSkpO2lmKGsuaXNEaWN0aW9uYXJ5KEoudHlwZSkpcmV0dXJuIEoubWVtb2l6ZSgpO3JldHVybiBKfWZ1bmN0aW9uIE9HKCQpe2lmKCQubGVuZ3RoPT09MClyZXR1cm4gbmV3IGokO2xldCBaPTAsUT0wLFg9MCxKPTAsVz0wLFk9MCxHPTAsSD0wO2ZvcihsZXQgeiBvZiAkKXtpZih6PT1udWxsKXsrK1o7Y29udGludWV9c3dpdGNoKHR5cGVvZiB6KXtjYXNlImJpZ2ludCI6KytZO2NvbnRpbnVlO2Nhc2UiYm9vbGVhbiI6KytHO2NvbnRpbnVlO2Nhc2UibnVtYmVyIjorK0o7Y29udGludWU7Y2FzZSJzdHJpbmciOisrVztjb250aW51ZTtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheSh6KSkrK1E7ZWxzZSBpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeik9PT0iW29iamVjdCBEYXRlXSIpKytIO2Vsc2UrK1g7Y29udGludWV9dGhyb3cgVHlwZUVycm9yKCJVbmFibGUgdG8gaW5mZXIgVmVjdG9yIHR5cGUgZnJvbSBpbnB1dCB2YWx1ZXMsIGV4cGxpY2l0IHR5cGUgZGVjbGFyYXRpb24gZXhwZWN0ZWQuIil9aWYoSitaPT09JC5sZW5ndGgpcmV0dXJuIG5ldyAkUTtlbHNlIGlmKFcrWj09PSQubGVuZ3RoKXJldHVybiBuZXcgWVoobmV3IFQkLG5ldyBHWik7ZWxzZSBpZihZK1o9PT0kLmxlbmd0aClyZXR1cm4gbmV3IEFaO2Vsc2UgaWYoRytaPT09JC5sZW5ndGgpcmV0dXJuIG5ldyBWJDtlbHNlIGlmKEgrWj09PSQubGVuZ3RoKXJldHVybiBuZXcgUlk7ZWxzZSBpZihRK1o9PT0kLmxlbmd0aCl7bGV0IHo9JCxxPU9HKHpbei5maW5kSW5kZXgoKFApPT5QIT1udWxsKV0pO2lmKHouZXZlcnkoKFApPT5QPT1udWxsfHxERyhxLE9HKFApKSkpcmV0dXJuIG5ldyBMWihuZXcgYSgiIixxLCEwKSl9ZWxzZSBpZihYK1o9PT0kLmxlbmd0aCl7bGV0IHo9bmV3IE1hcDtmb3IobGV0IHEgb2YgJClmb3IobGV0IFAgb2YgT2JqZWN0LmtleXMocSkpaWYoIXouaGFzKFApJiZxW1BdIT1udWxsKXouc2V0KFAsbmV3IGEoUCxPRyhbcVtQXV0pLCEwKSk7cmV0dXJuIG5ldyBqMChbLi4uei52YWx1ZXMoKV0pfXRocm93IFR5cGVFcnJvcigiVW5hYmxlIHRvIGluZmVyIFZlY3RvciB0eXBlIGZyb20gaW5wdXQgdmFsdWVzLCBleHBsaWNpdCB0eXBlIGRlY2xhcmF0aW9uIGV4cGVjdGVkLiIpfWZ1bmN0aW9uIG4yKCQpe2xldHtbInF1ZXVlaW5nU3RyYXRlZ3kiXTpaPSJjb3VudCJ9PSQse1siaGlnaFdhdGVyTWFyayJdOlE9WiE9PSJieXRlcyI/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk1hdGgucG93KDIsMTQpfT0kLFg9WiE9PSJieXRlcyI/Imxlbmd0aCI6ImJ5dGVMZW5ndGgiO3JldHVybiBmdW5jdGlvbiooSil7bGV0IFc9MCxZPUJYKCQpO2ZvcihsZXQgRyBvZiBKKWlmKFkuYXBwZW5kKEcpW1hdPj1RKSsrVyYmKHlpZWxkIFkudG9WZWN0b3IoKSk7aWYoWS5maW5pc2goKS5sZW5ndGg+MHx8Vz09PTApeWllbGQgWS50b1ZlY3RvcigpfX12YXIgdDQ9TygoKT0+e3ZaKCk7SCQoKTskOCgpO1pRKCk7S0YoKTtjWSgpfSk7ZnVuY3Rpb24gQ0coJCxaKXtyZXR1cm4geEMoJCxaLm1hcCgoUSk9PlEuZGF0YS5jb25jYXQoKSkpfWZ1bmN0aW9uIHhDKCQsWil7bGV0IFE9Wy4uLiQuZmllbGRzXSxYPVtdLEo9e251bUJhdGNoZXM6Wi5yZWR1Y2UoKFAsVSk9Pk1hdGgubWF4KFAsVS5sZW5ndGgpLDApfSxXPTAsWT0wLEc9LTEsSD1aLmxlbmd0aCx6LHE9W107d2hpbGUoSi5udW1CYXRjaGVzLS0gPjApe2ZvcihZPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxHPS0xOysrRzxIOylxW0ddPXo9WltHXS5zaGlmdCgpLFk9TWF0aC5taW4oWSx6P3oubGVuZ3RoOlkpO2lmKE51bWJlci5pc0Zpbml0ZShZKSl7aWYocT12QyhRLFkscSxaLEopLFk+MClYW1crK109SSh7dHlwZTpuZXcgajAoUSksbGVuZ3RoOlksbnVsbENvdW50OjAsY2hpbGRyZW46cS5zbGljZSgpfSl9fXJldHVyblskPSQuYXNzaWduKFEpLFgubWFwKChQKT0+bmV3IEQwKCQsUCkpXX1mdW5jdGlvbiB2QygkLFosUSxYLEope3ZhciBXO2xldCBZPShaKzYzJi02NCk+PjM7Zm9yKGxldCBHPS0xLEg9WC5sZW5ndGg7KytHPEg7KXtsZXQgej1RW0ddLHE9ej09PW51bGx8fHo9PT12b2lkIDA/dm9pZCAwOnoubGVuZ3RoO2lmKHE+PVopaWYocT09PVopUVtHXT16O2Vsc2UgUVtHXT16LnNsaWNlKDAsWiksSi5udW1CYXRjaGVzPU1hdGgubWF4KEoubnVtQmF0Y2hlcyxYW0ddLnVuc2hpZnQoei5zbGljZShaLHEtWikpKTtlbHNle2xldCBQPSRbR107JFtHXT1QLmNsb25lKHtudWxsYWJsZTohMH0pLFFbR109KFc9ej09PW51bGx8fHo9PT12b2lkIDA/dm9pZCAwOnouX2NoYW5nZUxlbmd0aEFuZEJhY2tmaWxsTnVsbEJpdG1hcChaKSkhPT1udWxsJiZXIT09dm9pZCAwP1c6SSh7dHlwZTpQLnR5cGUsbGVuZ3RoOlosbnVsbENvdW50OlosbnVsbEJpdG1hcDpuZXcgVWludDhBcnJheShZKX0pfX1yZXR1cm4gUX12YXIgekY9TygoKT0+eyQ4KCk7SCQoKTtESigpfSk7dmFyIHFGLFBGLHYkO3ZhciBqRz1PKCgpPT57dSQoKTskOCgpO1pRKCk7dlooKTtIJCgpO2NZKCk7ekYoKTtiNCgpO2FKKCk7RVEoKTttNCgpO2Y0KCk7V1coKTtESigpO1BGPVN5bWJvbC5mb3IoImFwYWNoZS1hcnJvdy9UYWJsZSIpO3YkPWNsYXNzIHYke3N0YXRpYyBpc1RhYmxlKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JFtQRl0pPT09ITB9Y29uc3RydWN0b3IoLi4uJCl7dmFyIFosUTtpZigkLmxlbmd0aD09PTApcmV0dXJuIHRoaXMuYmF0Y2hlcz1bXSx0aGlzLnNjaGVtYT1uZXcgUTAoW10pLHRoaXMuX29mZnNldHM9WzBdLHRoaXM7bGV0IFgsSjtpZigkWzBdaW5zdGFuY2VvZiBRMClYPSQuc2hpZnQoKTtpZigkLmF0KC0xKWluc3RhbmNlb2YgVWludDMyQXJyYXkpSj0kLnBvcCgpO2xldCBXPShHKT0+e2lmKEcpe2lmKEcgaW5zdGFuY2VvZiBEMClyZXR1cm5bR107ZWxzZSBpZihHIGluc3RhbmNlb2YgdiQpcmV0dXJuIEcuYmF0Y2hlcztlbHNlIGlmKEcgaW5zdGFuY2VvZiBBMCl7aWYoRy50eXBlIGluc3RhbmNlb2YgajApcmV0dXJuW25ldyBEMChuZXcgUTAoRy50eXBlLmNoaWxkcmVuKSxHKV19ZWxzZSBpZihBcnJheS5pc0FycmF5KEcpKXJldHVybiBHLmZsYXRNYXAoKEgpPT5XKEgpKTtlbHNlIGlmKHR5cGVvZiBHW1N5bWJvbC5pdGVyYXRvcl09PT0iZnVuY3Rpb24iKXJldHVyblsuLi5HXS5mbGF0TWFwKChIKT0+VyhIKSk7ZWxzZSBpZih0eXBlb2YgRz09PSJvYmplY3QiKXtsZXQgSD1PYmplY3Qua2V5cyhHKSx6PUgubWFwKChVKT0+bmV3IHIoW0dbVV1dKSkscT1YIT09bnVsbCYmWCE9PXZvaWQgMD9YOm5ldyBRMChILm1hcCgoVSxNKT0+bmV3IGEoU3RyaW5nKFUpLHpbTV0udHlwZSx6W01dLm51bGxhYmxlKSkpLFssUF09Q0cocSx6KTtyZXR1cm4gUC5sZW5ndGg9PT0wP1tuZXcgRDAoRyldOlB9fXJldHVybltdfSxZPSQuZmxhdE1hcCgoRyk9PlcoRykpO2lmKFg9KFE9WCE9PW51bGwmJlghPT12b2lkIDA/WDooWj1ZWzBdKT09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOlouc2NoZW1hKSE9PW51bGwmJlEhPT12b2lkIDA/UTpuZXcgUTAoW10pLCEoWCBpbnN0YW5jZW9mIFEwKSl0aHJvdyBUeXBlRXJyb3IoIlRhYmxlIGNvbnN0cnVjdG9yIGV4cGVjdHMgYSBbU2NoZW1hLCBSZWNvcmRCYXRjaFtdXSBwYWlyLiIpO2ZvcihsZXQgRyBvZiBZKXtpZighKEcgaW5zdGFuY2VvZiBEMCkpdGhyb3cgVHlwZUVycm9yKCJUYWJsZSBjb25zdHJ1Y3RvciBleHBlY3RzIGEgW1NjaGVtYSwgUmVjb3JkQmF0Y2hbXV0gcGFpci4iKTtpZighRzYoWCxHLnNjaGVtYSkpdGhyb3cgVHlwZUVycm9yKCJUYWJsZSBhbmQgaW5uZXIgUmVjb3JkQmF0Y2ggc2NoZW1hcyBtdXN0IGJlIGVxdWl2YWxlbnQuIil9dGhpcy5zY2hlbWE9WCx0aGlzLmJhdGNoZXM9WSx0aGlzLl9vZmZzZXRzPUohPT1udWxsJiZKIT09dm9pZCAwP0o6eDQodGhpcy5kYXRhKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmJhdGNoZXMubWFwKCh7ZGF0YTokfSk9PiQpfWdldCBudW1Db2xzKCl7cmV0dXJuIHRoaXMuc2NoZW1hLmZpZWxkcy5sZW5ndGh9Z2V0IG51bVJvd3MoKXtyZXR1cm4gdGhpcy5kYXRhLnJlZHVjZSgoJCxaKT0+JCtaLmxlbmd0aCwwKX1nZXQgbnVsbENvdW50KCl7aWYodGhpcy5fbnVsbENvdW50PT09LTEpdGhpcy5fbnVsbENvdW50PWc0KHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuX251bGxDb3VudH1pc1ZhbGlkKCQpe3JldHVybiExfWdldCgkKXtyZXR1cm4gbnVsbH1hdCgkKXtyZXR1cm4gdGhpcy5nZXQodEooJCx0aGlzLm51bVJvd3MpKX1zZXQoJCxaKXtyZXR1cm59aW5kZXhPZigkLFope3JldHVybi0xfVtTeW1ib2wuaXRlcmF0b3JdKCl7aWYodGhpcy5iYXRjaGVzLmxlbmd0aD4wKXJldHVybiBIVy52aXNpdChuZXcgcih0aGlzLmRhdGEpKTtyZXR1cm5bXVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9BcnJheSgpe3JldHVyblsuLi50aGlzXX10b1N0cmluZygpe3JldHVybmBbCiAgJHt0aGlzLnRvQXJyYXkoKS5qb2luKGAsCiAgYCl9Cl1gfWNvbmNhdCguLi4kKXtsZXQgWj10aGlzLnNjaGVtYSxRPXRoaXMuZGF0YS5jb25jYXQoJC5mbGF0TWFwKCh7ZGF0YTpYfSk9PlgpKTtyZXR1cm4gbmV3IHYkKFosUS5tYXAoKFgpPT5uZXcgRDAoWixYKSkpfXNsaWNlKCQsWil7bGV0IFE9dGhpcy5zY2hlbWE7WyQsWl09Qlkoe2xlbmd0aDp0aGlzLm51bVJvd3N9LCQsWik7bGV0IFg9djQodGhpcy5kYXRhLHRoaXMuX29mZnNldHMsJCxaKTtyZXR1cm4gbmV3IHYkKFEsWC5tYXAoKEopPT5uZXcgRDAoUSxKKSkpfWdldENoaWxkKCQpe3JldHVybiB0aGlzLmdldENoaWxkQXQodGhpcy5zY2hlbWEuZmllbGRzLmZpbmRJbmRleCgoWik9PloubmFtZT09PSQpKX1nZXRDaGlsZEF0KCQpe2lmKCQ+LTEmJiQ8dGhpcy5zY2hlbWEuZmllbGRzLmxlbmd0aCl7bGV0IFo9dGhpcy5kYXRhLm1hcCgoUSk9PlEuY2hpbGRyZW5bJF0pO2lmKFoubGVuZ3RoPT09MCl7bGV0e3R5cGU6UX09dGhpcy5zY2hlbWEuZmllbGRzWyRdLFg9SSh7dHlwZTpRLGxlbmd0aDowLG51bGxDb3VudDowfSk7Wi5wdXNoKFguX2NoYW5nZUxlbmd0aEFuZEJhY2tmaWxsTnVsbEJpdG1hcCh0aGlzLm51bVJvd3MpKX1yZXR1cm4gbmV3IHIoWil9cmV0dXJuIG51bGx9c2V0Q2hpbGQoJCxaKXt2YXIgUTtyZXR1cm4gdGhpcy5zZXRDaGlsZEF0KChRPXRoaXMuc2NoZW1hLmZpZWxkcyk9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLmZpbmRJbmRleCgoWCk9PlgubmFtZT09PSQpLFopfXNldENoaWxkQXQoJCxaKXtsZXQgUT10aGlzLnNjaGVtYSxYPVsuLi50aGlzLmJhdGNoZXNdO2lmKCQ+LTEmJiQ8dGhpcy5udW1Db2xzKXtpZighWilaPW5ldyByKFtJKHt0eXBlOm5ldyBqJCxsZW5ndGg6dGhpcy5udW1Sb3dzfSldKTtsZXQgSj1RLmZpZWxkcy5zbGljZSgpLFc9SlskXS5jbG9uZSh7dHlwZTpaLnR5cGV9KSxZPXRoaXMuc2NoZW1hLmZpZWxkcy5tYXAoKEcsSCk9PnRoaXMuZ2V0Q2hpbGRBdChIKSk7W0pbJF0sWVskXV09W1csWl0sW1EsWF09Q0coUSxZKX1yZXR1cm4gbmV3IHYkKFEsWCl9c2VsZWN0KCQpe2xldCBaPXRoaXMuc2NoZW1hLmZpZWxkcy5yZWR1Y2UoKFEsWCxKKT0+US5zZXQoWC5uYW1lLEopLG5ldyBNYXApO3JldHVybiB0aGlzLnNlbGVjdEF0KCQubWFwKChRKT0+Wi5nZXQoUSkpLmZpbHRlcigoUSk9PlE+LTEpKX1zZWxlY3RBdCgkKXtsZXQgWj10aGlzLnNjaGVtYS5zZWxlY3RBdCgkKSxRPXRoaXMuYmF0Y2hlcy5tYXAoKFgpPT5YLnNlbGVjdEF0KCQpKTtyZXR1cm4gbmV3IHYkKFosUSl9YXNzaWduKCQpe2xldCBaPXRoaXMuc2NoZW1hLmZpZWxkcyxbUSxYXT0kLnNjaGVtYS5maWVsZHMucmVkdWNlKChZLEcsSCk9PntsZXRbeixxXT1ZLFA9Wi5maW5kSW5kZXgoKFUpPT5VLm5hbWU9PT1HLm5hbWUpO3JldHVybn5QP3FbUF09SDp6LnB1c2goSCksWX0sW1tdLFtdXSksSj10aGlzLnNjaGVtYS5hc3NpZ24oJC5zY2hlbWEpLFc9Wy4uLloubWFwKChZLEcpPT5bRyxYW0ddXSkubWFwKChbWSxHXSk9Pkc9PT12b2lkIDA/dGhpcy5nZXRDaGlsZEF0KFkpOiQuZ2V0Q2hpbGRBdChHKSksLi4uUS5tYXAoKFkpPT4kLmdldENoaWxkQXQoWSkpXS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIG5ldyB2JCguLi5DRyhKLFcpKX19O3FGPVN5bWJvbC50b1N0cmluZ1RhZzt2JFtxRl09KCgkKT0+e3JldHVybiAkLnNjaGVtYT1udWxsLCQuYmF0Y2hlcz1bXSwkLl9vZmZzZXRzPW5ldyBVaW50MzJBcnJheShbMF0pLCQuX251bGxDb3VudD0tMSwkW1N5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVdPSEwLCRbUEZdPSEwLCQuaXNWYWxpZD1LVyhfWSksJC5nZXQ9S1cocCQuZ2V0VmlzaXRGbihBLlN0cnVjdCkpLCQuc2V0PXk0KERaLmdldFZpc2l0Rm4oQS5TdHJ1Y3QpKSwkLmluZGV4T2Y9aDQoWjYuZ2V0VmlzaXRGbihBLlN0cnVjdCkpLCJUYWJsZSJ9KSh2JC5wcm90b3R5cGUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh2JCxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFope3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWil8fHRoaXM9PT12JCYmdiQuaXNUYWJsZShaKX19KX0pO2Z1bmN0aW9uIEZGKCQsWixRPVoucmVkdWNlKChYLEopPT5NYXRoLm1heChYLEoubGVuZ3RoKSwwKSl7dmFyIFg7bGV0IEo9Wy4uLiQuZmllbGRzXSxXPVsuLi5aXSxZPShRKzYzJi02NCk+PjM7Zm9yKGxldFtHLEhdb2YgJC5maWVsZHMuZW50cmllcygpKXtsZXQgej1aW0ddO2lmKCF6fHx6Lmxlbmd0aCE9PVEpSltHXT1ILmNsb25lKHtudWxsYWJsZTohMH0pLFdbR109KFg9ej09PW51bGx8fHo9PT12b2lkIDA/dm9pZCAwOnouX2NoYW5nZUxlbmd0aEFuZEJhY2tmaWxsTnVsbEJpdG1hcChRKSkhPT1udWxsJiZYIT09dm9pZCAwP1g6SSh7dHlwZTpILnR5cGUsbGVuZ3RoOlEsbnVsbENvdW50OlEsbnVsbEJpdG1hcDpuZXcgVWludDhBcnJheShZKX0pfXJldHVyblskLmFzc2lnbihKKSxJKHt0eXBlOm5ldyBqMChKKSxsZW5ndGg6USxjaGlsZHJlbjpXfSldfWZ1bmN0aW9uIE1GKCQsWixRPW5ldyBNYXApe3ZhciBYLEo7aWYoKChYPSQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLmxlbmd0aCkhPT1udWxsJiZYIT09dm9pZCAwP1g6MCk+MCYmKCQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLmxlbmd0aCk9PT0oWj09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOloubGVuZ3RoKSlmb3IobGV0IFc9LTEsWT0kLmxlbmd0aDsrK1c8WTspe2xldHt0eXBlOkd9PSRbV10sSD1aW1ddO2ZvcihsZXQgeiBvZltILC4uLigoSj1IPT09bnVsbHx8SD09PXZvaWQgMD92b2lkIDA6SC5kaWN0aW9uYXJ5KT09PW51bGx8fEo9PT12b2lkIDA/dm9pZCAwOkouZGF0YSl8fFtdXSlNRihHLmNoaWxkcmVuLHo9PT1udWxsfHx6PT09dm9pZCAwP3ZvaWQgMDp6LmNoaWxkcmVuLFEpO2lmKGsuaXNEaWN0aW9uYXJ5KEcpKXtsZXR7aWQ6en09RztpZighUS5oYXMoeikpe2lmKEg9PT1udWxsfHxIPT09dm9pZCAwP3ZvaWQgMDpILmRpY3Rpb25hcnkpUS5zZXQoeixILmRpY3Rpb25hcnkpfWVsc2UgaWYoUS5nZXQoeikhPT1ILmRpY3Rpb25hcnkpdGhyb3cgRXJyb3IoIkNhbm5vdCBjcmVhdGUgU2NoZW1hIGNvbnRhaW5pbmcgdHdvIGRpZmZlcmVudCBkaWN0aW9uYXJpZXMgd2l0aCB0aGUgc2FtZSBJZCIpfX1yZXR1cm4gUX12YXIgTkYsVUYsRDAsTFc7dmFyIERKPU8oKCk9PnskOCgpO2pHKCk7WlEoKTt2WigpO0gkKCk7V1coKTthSigpO0VRKCk7bTQoKTtmNCgpO1VGPVN5bWJvbC5mb3IoImFwYWNoZS1hcnJvdy9SZWNvcmRCYXRjaCIpO0QwPWNsYXNzIEQwe3N0YXRpYyBpc1JlY29yZEJhdGNoKCQpe3JldHVybigkPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JFtVRl0pPT09ITB9Y29uc3RydWN0b3IoLi4uJCl7c3dpdGNoKCQubGVuZ3RoKXtjYXNlIDM6Y2FzZSAyOntpZihbdGhpcy5zY2hlbWFdPSQsISh0aGlzLnNjaGVtYSBpbnN0YW5jZW9mIFEwKSl0aHJvdyBUeXBlRXJyb3IoIlJlY29yZEJhdGNoIGNvbnN0cnVjdG9yIGV4cGVjdHMgYSBbU2NoZW1hLCBEYXRhXSBwYWlyLiIpO2lmKFssdGhpcy5kYXRhPUkoe251bGxDb3VudDowLHR5cGU6bmV3IGowKHRoaXMuc2NoZW1hLmZpZWxkcyksY2hpbGRyZW46dGhpcy5zY2hlbWEuZmllbGRzLm1hcCgoWik9Pkkoe3R5cGU6Wi50eXBlLG51bGxDb3VudDowfSkpfSksdGhpcy5fbWV0YWRhdGE9bmV3IE1hcF09JCwhKHRoaXMuZGF0YSBpbnN0YW5jZW9mIEEwKSl0aHJvdyBUeXBlRXJyb3IoIlJlY29yZEJhdGNoIGNvbnN0cnVjdG9yIGV4cGVjdHMgYSBbU2NoZW1hLCBEYXRhXSBwYWlyLiIpO1t0aGlzLnNjaGVtYSx0aGlzLmRhdGFdPUZGKHRoaXMuc2NoZW1hLHRoaXMuZGF0YS5jaGlsZHJlbix0aGlzLmRhdGEubGVuZ3RoKTticmVha31jYXNlIDE6e2xldFtaXT0kLHtmaWVsZHM6USxjaGlsZHJlbjpYLGxlbmd0aDpKfT1PYmplY3Qua2V5cyhaKS5yZWR1Y2UoKEcsSCx6KT0+e3JldHVybiBHLmNoaWxkcmVuW3pdPVpbSF0sRy5sZW5ndGg9TWF0aC5tYXgoRy5sZW5ndGgsWltIXS5sZW5ndGgpLEcuZmllbGRzW3pdPWEubmV3KHtuYW1lOkgsdHlwZTpaW0hdLnR5cGUsbnVsbGFibGU6ITB9KSxHfSx7bGVuZ3RoOjAsZmllbGRzOltdLGNoaWxkcmVuOltdfSksVz1uZXcgUTAoUSksWT1JKHt0eXBlOm5ldyBqMChRKSxsZW5ndGg6SixjaGlsZHJlbjpYLG51bGxDb3VudDowfSk7W3RoaXMuc2NoZW1hLHRoaXMuZGF0YV09RkYoVyxZLmNoaWxkcmVuLEopLHRoaXMuX21ldGFkYXRhPW5ldyBNYXA7YnJlYWt9ZGVmYXVsdDp0aHJvdyBUeXBlRXJyb3IoIlJlY29yZEJhdGNoIGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gT2JqZWN0IG1hcHBpbmcgbmFtZXMgdG8gY2hpbGQgRGF0YSwgb3IgYSBbU2NoZW1hLCBEYXRhXSBwYWlyLiIpfX1nZXQgbWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5fbWV0YWRhdGF9Z2V0IGRpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9kaWN0aW9uYXJpZXN8fCh0aGlzLl9kaWN0aW9uYXJpZXM9TUYodGhpcy5zY2hlbWEuZmllbGRzLHRoaXMuZGF0YS5jaGlsZHJlbikpfWdldCBudW1Db2xzKCl7cmV0dXJuIHRoaXMuc2NoZW1hLmZpZWxkcy5sZW5ndGh9Z2V0IG51bVJvd3MoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1nZXQgbnVsbENvdW50KCl7cmV0dXJuIHRoaXMuZGF0YS5udWxsQ291bnR9aXNWYWxpZCgkKXtyZXR1cm4gdGhpcy5kYXRhLmdldFZhbGlkKCQpfWdldCgkKXtyZXR1cm4gcCQudmlzaXQodGhpcy5kYXRhLCQpfWF0KCQpe3JldHVybiB0aGlzLmdldCh0SigkLHRoaXMubnVtUm93cykpfXNldCgkLFope3JldHVybiBEWi52aXNpdCh0aGlzLmRhdGEsJCxaKX1pbmRleE9mKCQsWil7cmV0dXJuIFo2LnZpc2l0KHRoaXMuZGF0YSwkLFopfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIEhXLnZpc2l0KG5ldyByKFt0aGlzLmRhdGFdKSl9dG9BcnJheSgpe3JldHVyblsuLi50aGlzXX1jb25jYXQoLi4uJCl7cmV0dXJuIG5ldyB2JCh0aGlzLnNjaGVtYSxbdGhpcywuLi4kXSl9c2xpY2UoJCxaKXtsZXRbUV09bmV3IHIoW3RoaXMuZGF0YV0pLnNsaWNlKCQsWikuZGF0YTtyZXR1cm4gbmV3IEQwKHRoaXMuc2NoZW1hLFEsdGhpcy5fbWV0YWRhdGEpfWdldENoaWxkKCQpe3ZhciBaO3JldHVybiB0aGlzLmdldENoaWxkQXQoKFo9dGhpcy5zY2hlbWEuZmllbGRzKT09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOlouZmluZEluZGV4KChRKT0+US5uYW1lPT09JCkpfWdldENoaWxkQXQoJCl7aWYoJD4tMSYmJDx0aGlzLnNjaGVtYS5maWVsZHMubGVuZ3RoKXJldHVybiBuZXcgcihbdGhpcy5kYXRhLmNoaWxkcmVuWyRdXSk7cmV0dXJuIG51bGx9c2V0Q2hpbGQoJCxaKXt2YXIgUTtyZXR1cm4gdGhpcy5zZXRDaGlsZEF0KChRPXRoaXMuc2NoZW1hLmZpZWxkcyk9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLmZpbmRJbmRleCgoWCk9PlgubmFtZT09PSQpLFopfXNldENoaWxkQXQoJCxaKXtsZXQgUT10aGlzLnNjaGVtYSxYPXRoaXMuZGF0YTtpZigkPi0xJiYkPHRoaXMubnVtQ29scyl7aWYoIVopWj1uZXcgcihbSSh7dHlwZTpuZXcgaiQsbGVuZ3RoOnRoaXMubnVtUm93c30pXSk7bGV0IEo9US5maWVsZHMuc2xpY2UoKSxXPVguY2hpbGRyZW4uc2xpY2UoKSxZPUpbJF0uY2xvbmUoe3R5cGU6Wi50eXBlfSk7W0pbJF0sV1skXV09W1ksWi5kYXRhWzBdXSxRPW5ldyBRMChKLG5ldyBNYXAodGhpcy5zY2hlbWEubWV0YWRhdGEpKSxYPUkoe3R5cGU6bmV3IGowKEopLGxlbmd0aDpYLmxlbmd0aCxjaGlsZHJlbjpXfSl9cmV0dXJuIG5ldyBEMChRLFgsdGhpcy5fbWV0YWRhdGEpfXNlbGVjdCgkKXtsZXQgWj10aGlzLnNjaGVtYS5zZWxlY3QoJCksUT1uZXcgajAoWi5maWVsZHMpLFg9W107Zm9yKGxldCBKIG9mICQpe2xldCBXPXRoaXMuc2NoZW1hLmZpZWxkcy5maW5kSW5kZXgoKFkpPT5ZLm5hbWU9PT1KKTtpZih+VylYW1ddPXRoaXMuZGF0YS5jaGlsZHJlbltXXX1yZXR1cm4gbmV3IEQwKFosSSh7dHlwZTpRLGxlbmd0aDp0aGlzLm51bVJvd3MsY2hpbGRyZW46WH0pLHRoaXMuX21ldGFkYXRhKX1zZWxlY3RBdCgkKXtsZXQgWj10aGlzLnNjaGVtYS5zZWxlY3RBdCgkKSxRPSQubWFwKChKKT0+dGhpcy5kYXRhLmNoaWxkcmVuW0pdKS5maWx0ZXIoQm9vbGVhbiksWD1JKHt0eXBlOm5ldyBqMChaLmZpZWxkcyksbGVuZ3RoOnRoaXMubnVtUm93cyxjaGlsZHJlbjpRfSk7cmV0dXJuIG5ldyBEMChaLFgsdGhpcy5fbWV0YWRhdGEpfX07TkY9U3ltYm9sLnRvU3RyaW5nVGFnO0QwW05GXT0oKCQpPT57cmV0dXJuICQuX251bGxDb3VudD0tMSwkW1N5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVdPSEwLCRbVUZdPSEwLCJSZWNvcmRCYXRjaCJ9KShEMC5wcm90b3R5cGUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEMCxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKFope3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsWil8fHRoaXM9PT1EMCYmRDAuaXNSZWNvcmRCYXRjaChaKX19KTtMVz1jbGFzcyBMVyBleHRlbmRzIEQwe2NvbnN0cnVjdG9yKCQsWil7bGV0IFE9JC5maWVsZHMubWFwKChKKT0+SSh7dHlwZTpKLnR5cGV9KSksWD1JKHt0eXBlOm5ldyBqMCgkLmZpZWxkcyksbGVuZ3RoOjAsbnVsbENvdW50OjAsY2hpbGRyZW46UX0pO3N1cGVyKCQsWCxafHxuZXcgTWFwKX19fSk7ZnVuY3Rpb24gd0coJCxaPTApe2ZvcihsZXQgUT0tMSxYPUFXLmxlbmd0aDsrK1E8WDspaWYoQVdbUV0hPT0kW1orUV0pcmV0dXJuITE7cmV0dXJuITB9dmFyIHMyPSgkKT0+YEV4cGVjdGVkICR7VDBbJF19IE1lc3NhZ2UgaW4gc3RyZWFtLCBidXQgd2FzIG51bGwgb3IgbGVuZ3RoIDAuYCxpMj0oJCk9PmBIZWFkZXIgcG9pbnRlciBvZiBmbGF0YnVmZmVyLWVuY29kZWQgJHtUMFskXX0gTWVzc2FnZSBpcyBudWxsIG9yIGxlbmd0aCAwLmAsTEY9KCQsWik9PmBFeHBlY3RlZCB0byByZWFkICR7JH0gbWV0YWRhdGEgYnl0ZXMsIGJ1dCBvbmx5IHJlYWQgJHtafS5gLEFGPSgkLFopPT5gRXhwZWN0ZWQgdG8gcmVhZCAkeyR9IGJ5dGVzIGZvciBtZXNzYWdlIGJvZHksIGJ1dCBvbmx5IHJlYWQgJHtafS5gLGxZLFZHLFJHLEVHPTQsbzI9IkFSUk9XMSIsQVcsRFcscjIsREY7dmFyIGEyPU8oKCk9PntNUSgpO3UkKCk7eTAoKTtYNigpO3EyKCk7cyQoKTtKNigpO3hZKCk7bFk9Y2xhc3MgbFl7Y29uc3RydWN0b3IoJCl7dGhpcy5zb3VyY2U9JCBpbnN0YW5jZW9mIFNYPyQ6bmV3IFNYKCQpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9bmV4dCgpe2xldCAkO2lmKCgkPXRoaXMucmVhZE1ldGFkYXRhTGVuZ3RoKCkpLmRvbmUpcmV0dXJuIEwkO2lmKCQudmFsdWU9PT0tMSYmKCQ9dGhpcy5yZWFkTWV0YWRhdGFMZW5ndGgoKSkuZG9uZSlyZXR1cm4gTCQ7aWYoKCQ9dGhpcy5yZWFkTWV0YWRhdGEoJC52YWx1ZSkpLmRvbmUpcmV0dXJuIEwkO3JldHVybiAkfXRocm93KCQpe3JldHVybiB0aGlzLnNvdXJjZS50aHJvdygkKX1yZXR1cm4oJCl7cmV0dXJuIHRoaXMuc291cmNlLnJldHVybigkKX1yZWFkTWVzc2FnZSgkKXtsZXQgWjtpZigoWj10aGlzLm5leHQoKSkuZG9uZSlyZXR1cm4gbnVsbDtpZigkIT1udWxsJiZaLnZhbHVlLmhlYWRlclR5cGUhPT0kKXRocm93IEVycm9yKHMyKCQpKTtyZXR1cm4gWi52YWx1ZX1yZWFkTWVzc2FnZUJvZHkoJCl7aWYoJDw9MClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bGV0IFo9JDAodGhpcy5zb3VyY2UucmVhZCgkKSk7aWYoWi5ieXRlTGVuZ3RoPCQpdGhyb3cgRXJyb3IoQUYoJCxaLmJ5dGVMZW5ndGgpKTtyZXR1cm4gWi5ieXRlT2Zmc2V0JTg9PT0wJiZaLmJ5dGVPZmZzZXQrWi5ieXRlTGVuZ3RoPD1aLmJ1ZmZlci5ieXRlTGVuZ3RoP1o6Wi5zbGljZSgpfXJlYWRTY2hlbWEoJD0hMSl7bGV0IFo9VDAuU2NoZW1hLFE9dGhpcy5yZWFkTWVzc2FnZShaKSxYPVE9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLmhlYWRlcigpO2lmKCQmJiFYKXRocm93IEVycm9yKGkyKFopKTtyZXR1cm4gWH1yZWFkTWV0YWRhdGFMZW5ndGgoKXtsZXQgJD10aGlzLnNvdXJjZS5yZWFkKEVHKSxaPSQmJm5ldyBVWigkKSxRPShaPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi5yZWFkSW50MzIoMCkpfHwwO3JldHVybntkb25lOlE9PT0wLHZhbHVlOlF9fXJlYWRNZXRhZGF0YSgkKXtsZXQgWj10aGlzLnNvdXJjZS5yZWFkKCQpO2lmKCFaKXJldHVybiBMJDtpZihaLmJ5dGVMZW5ndGg8JCl0aHJvdyBFcnJvcihMRigkLFouYnl0ZUxlbmd0aCkpO3JldHVybntkb25lOiExLHZhbHVlOktaLmRlY29kZShaKX19fTtWRz1jbGFzcyBWR3tjb25zdHJ1Y3RvcigkLFope3RoaXMuc291cmNlPSQgaW5zdGFuY2VvZiBaOD8kOmUxKCQpP25ldyBXNigkLFopOm5ldyBaOCgkKX1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9bmV4dCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgJDtpZigoJD15aWVsZCB0aGlzLnJlYWRNZXRhZGF0YUxlbmd0aCgpKS5kb25lKXJldHVybiBMJDtpZigkLnZhbHVlPT09LTEmJigkPXlpZWxkIHRoaXMucmVhZE1ldGFkYXRhTGVuZ3RoKCkpLmRvbmUpcmV0dXJuIEwkO2lmKCgkPXlpZWxkIHRoaXMucmVhZE1ldGFkYXRhKCQudmFsdWUpKS5kb25lKXJldHVybiBMJDtyZXR1cm4gJH0pfXRocm93KCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5zb3VyY2UudGhyb3coJCl9KX1yZXR1cm4oJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnNvdXJjZS5yZXR1cm4oJCl9KX1yZWFkTWVzc2FnZSgkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFo7aWYoKFo9eWllbGQgdGhpcy5uZXh0KCkpLmRvbmUpcmV0dXJuIG51bGw7aWYoJCE9bnVsbCYmWi52YWx1ZS5oZWFkZXJUeXBlIT09JCl0aHJvdyBFcnJvcihzMigkKSk7cmV0dXJuIFoudmFsdWV9KX1yZWFkTWVzc2FnZUJvZHkoJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCQ8PTApcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2xldCBaPSQwKHlpZWxkIHRoaXMuc291cmNlLnJlYWQoJCkpO2lmKFouYnl0ZUxlbmd0aDwkKXRocm93IEVycm9yKEFGKCQsWi5ieXRlTGVuZ3RoKSk7cmV0dXJuIFouYnl0ZU9mZnNldCU4PT09MCYmWi5ieXRlT2Zmc2V0K1ouYnl0ZUxlbmd0aDw9Wi5idWZmZXIuYnl0ZUxlbmd0aD9aOlouc2xpY2UoKX0pfXJlYWRTY2hlbWEoKXtyZXR1cm4gbih0aGlzLGFyZ3VtZW50cyx2b2lkIDAsZnVuY3Rpb24qKCQ9ITEpe2xldCBaPVQwLlNjaGVtYSxRPXlpZWxkIHRoaXMucmVhZE1lc3NhZ2UoWiksWD1RPT09bnVsbHx8UT09PXZvaWQgMD92b2lkIDA6US5oZWFkZXIoKTtpZigkJiYhWCl0aHJvdyBFcnJvcihpMihaKSk7cmV0dXJuIFh9KX1yZWFkTWV0YWRhdGFMZW5ndGgoKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0ICQ9eWllbGQgdGhpcy5zb3VyY2UucmVhZChFRyksWj0kJiZuZXcgVVooJCksUT0oWj09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOloucmVhZEludDMyKDApKXx8MDtyZXR1cm57ZG9uZTpRPT09MCx2YWx1ZTpRfX0pfXJlYWRNZXRhZGF0YSgkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFo9eWllbGQgdGhpcy5zb3VyY2UucmVhZCgkKTtpZighWilyZXR1cm4gTCQ7aWYoWi5ieXRlTGVuZ3RoPCQpdGhyb3cgRXJyb3IoTEYoJCxaLmJ5dGVMZW5ndGgpKTtyZXR1cm57ZG9uZTohMSx2YWx1ZTpLWi5kZWNvZGUoWil9fSl9fTtSRz1jbGFzcyBSRyBleHRlbmRzIGxZe2NvbnN0cnVjdG9yKCQpe3N1cGVyKG5ldyBVaW50OEFycmF5KDApKTt0aGlzLl9zY2hlbWE9ITEsdGhpcy5fYm9keT1bXSx0aGlzLl9iYXRjaEluZGV4PTAsdGhpcy5fZGljdGlvbmFyeUluZGV4PTAsdGhpcy5fanNvbj0kIGluc3RhbmNlb2YgbjQ/JDpuZXcgbjQoJCl9bmV4dCgpe2xldHtfanNvbjokfT10aGlzO2lmKCF0aGlzLl9zY2hlbWEpcmV0dXJuIHRoaXMuX3NjaGVtYT0hMCx7ZG9uZTohMSx2YWx1ZTpLWi5mcm9tSlNPTigkLnNjaGVtYSxUMC5TY2hlbWEpfTtpZih0aGlzLl9kaWN0aW9uYXJ5SW5kZXg8JC5kaWN0aW9uYXJpZXMubGVuZ3RoKXtsZXQgWj0kLmRpY3Rpb25hcmllc1t0aGlzLl9kaWN0aW9uYXJ5SW5kZXgrK107cmV0dXJuIHRoaXMuX2JvZHk9Wi5kYXRhLmNvbHVtbnMse2RvbmU6ITEsdmFsdWU6S1ouZnJvbUpTT04oWixUMC5EaWN0aW9uYXJ5QmF0Y2gpfX1pZih0aGlzLl9iYXRjaEluZGV4PCQuYmF0Y2hlcy5sZW5ndGgpe2xldCBaPSQuYmF0Y2hlc1t0aGlzLl9iYXRjaEluZGV4KytdO3JldHVybiB0aGlzLl9ib2R5PVouY29sdW1ucyx7ZG9uZTohMSx2YWx1ZTpLWi5mcm9tSlNPTihaLFQwLlJlY29yZEJhdGNoKX19cmV0dXJuIHRoaXMuX2JvZHk9W10sTCR9cmVhZE1lc3NhZ2VCb2R5KCQpe3JldHVybiBaKHRoaXMuX2JvZHkpO2Z1bmN0aW9uIFooUSl7cmV0dXJuKFF8fFtdKS5yZWR1Y2UoKFgsSik9PlsuLi5YLC4uLkouVkFMSURJVFkmJltKLlZBTElESVRZXXx8W10sLi4uSi5UWVBFX0lEJiZbSi5UWVBFX0lEXXx8W10sLi4uSi5PRkZTRVQmJltKLk9GRlNFVF18fFtdLC4uLkouREFUQSYmW0ouREFUQV18fFtdLC4uLkouVklFV1MmJltKLlZJRVdTXXx8W10sLi4uSi5WQVJJQURJQ19EQVRBX0JVRkZFUlN8fFtdLC4uLlooSi5jaGlsZHJlbildLFtdKX19cmVhZE1lc3NhZ2UoJCl7bGV0IFo7aWYoKFo9dGhpcy5uZXh0KCkpLmRvbmUpcmV0dXJuIG51bGw7aWYoJCE9bnVsbCYmWi52YWx1ZS5oZWFkZXJUeXBlIT09JCl0aHJvdyBFcnJvcihzMigkKSk7cmV0dXJuIFoudmFsdWV9cmVhZFNjaGVtYSgpe2xldCAkPVQwLlNjaGVtYSxaPXRoaXMucmVhZE1lc3NhZ2UoJCksUT1aPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi5oZWFkZXIoKTtpZighWnx8IVEpdGhyb3cgRXJyb3IoaTIoJCkpO3JldHVybiBRfX07QVc9bmV3IFVpbnQ4QXJyYXkobzIubGVuZ3RoKTtmb3IobGV0ICQ9MDskPG8yLmxlbmd0aDskKz0xKUFXWyRdPW8yLmNvZGVQb2ludEF0KCQpO0RXPUFXLmxlbmd0aCxyMj1EVytFRyxERj1EVyoyK0VHfSk7Y2xhc3MgT0Z7Y29uc3RydWN0b3IoKXt0aGlzLkxaNF9GUkFNRV9NQUdJQz1uZXcgVWludDhBcnJheShbNCwzNCw3NywyNF0pLHRoaXMuTUlOX0hFQURFUl9MRU5HVEg9N31pc1ZhbGlkQ29kZWNFbmNvZGUoJCl7bGV0IFo9bmV3IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOF0pLFE9JC5lbmNvZGUoWik7cmV0dXJuIHRoaXMuX2lzVmFsaWRDb21wcmVzc2VkKFEpfV9pc1ZhbGlkQ29tcHJlc3NlZCgkKXtyZXR1cm4gdGhpcy5faGFzTWluaW11bUxlbmd0aCgkKSYmdGhpcy5faGFzVmFsaWRNYWdpY051bWJlcigkKSYmdGhpcy5faGFzVmFsaWRWZXJzaW9uKCQpfV9oYXNNaW5pbXVtTGVuZ3RoKCQpe3JldHVybiAkLmxlbmd0aD49dGhpcy5NSU5fSEVBREVSX0xFTkdUSH1faGFzVmFsaWRNYWdpY051bWJlcigkKXtyZXR1cm4gdGhpcy5MWjRfRlJBTUVfTUFHSUMuZXZlcnkoKFosUSk9PiRbUV09PT1aKX1faGFzVmFsaWRWZXJzaW9uKCQpe3JldHVybigkWzRdJjE5Mik+PjY9PT0xfX1jbGFzcyBDRntjb25zdHJ1Y3Rvcigpe3RoaXMuWlNURF9NQUdJQz1uZXcgVWludDhBcnJheShbNDAsMTgxLDQ3LDI1M10pLHRoaXMuTUlOX0hFQURFUl9MRU5HVEg9Nn1pc1ZhbGlkQ29kZWNFbmNvZGUoJCl7bGV0IFo9bmV3IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOF0pLFE9JC5lbmNvZGUoWik7cmV0dXJuIHRoaXMuX2lzVmFsaWRDb21wcmVzc2VkKFEpfV9pc1ZhbGlkQ29tcHJlc3NlZCgkKXtyZXR1cm4gdGhpcy5faGFzTWluaW11bUxlbmd0aCgkKSYmdGhpcy5faGFzVmFsaWRNYWdpY051bWJlcigkKX1faGFzTWluaW11bUxlbmd0aCgkKXtyZXR1cm4gJC5sZW5ndGg+PXRoaXMuTUlOX0hFQURFUl9MRU5HVEh9X2hhc1ZhbGlkTWFnaWNOdW1iZXIoJCl7cmV0dXJuIHRoaXMuWlNURF9NQUdJQy5ldmVyeSgoWixRKT0+JFtRXT09PVopfX12YXIgakY7dmFyIFZGPU8oKCk9PntBWSgpO2pGPXtbZ1ouTFo0X0ZSQU1FXTpuZXcgT0YsW2daLlpTVERdOm5ldyBDRn19KTtjbGFzcyBSRntjb25zdHJ1Y3Rvcigpe3RoaXMucmVnaXN0cnk9e319c2V0KCQsWil7aWYoKFo9PT1udWxsfHxaPT09dm9pZCAwP3ZvaWQgMDpaLmVuY29kZSkmJnR5cGVvZiBaLmVuY29kZT09PSJmdW5jdGlvbiImJiFqRlskXS5pc1ZhbGlkQ29kZWNFbmNvZGUoWikpdGhyb3cgRXJyb3IoYEVuY29kZXIgZm9yICR7Z1pbJF19IGlzIG5vdCB2YWxpZC5gKTt0aGlzLnJlZ2lzdHJ5WyRdPVp9Z2V0KCQpe3ZhciBaO3JldHVybigoWj10aGlzLnJlZ2lzdHJ5KT09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOlpbJF0pfHxudWxsfX12YXIgT1c7dmFyIHQyPU8oKCk9PntBWSgpO1ZGKCk7T1c9bmV3IFJGfSk7dmFyIFNHPS0xLGRZPTg7Y2xhc3MgZTJ7Z2V0IG51bURpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9kaWN0aW9uYXJ5SW5kZXh9Z2V0IG51bVJlY29yZEJhdGNoZXMoKXtyZXR1cm4gdGhpcy5fcmVjb3JkQmF0Y2hJbmRleH1jb25zdHJ1Y3RvcigkPW5ldyBNYXApe3RoaXMuY2xvc2VkPSExLHRoaXMuYXV0b0Rlc3Ryb3k9ITAsdGhpcy5fZGljdGlvbmFyeUluZGV4PTAsdGhpcy5fcmVjb3JkQmF0Y2hJbmRleD0wLHRoaXMuZGljdGlvbmFyaWVzPSR9aXNTeW5jKCl7cmV0dXJuITF9aXNBc3luYygpe3JldHVybiExfWlzRmlsZSgpe3JldHVybiExfWlzU3RyZWFtKCl7cmV0dXJuITF9cmVzZXQoJCl7cmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlJbmRleD0wLHRoaXMuX3JlY29yZEJhdGNoSW5kZXg9MCx0aGlzLnNjaGVtYT0kLHRoaXMuZGljdGlvbmFyaWVzPW5ldyBNYXAsdGhpc31fbG9hZFJlY29yZEJhdGNoKCQsWixRKXtsZXQgWDtpZigkLmNvbXByZXNzaW9uIT1udWxsKXtsZXQgVz1PVy5nZXQoJC5jb21wcmVzc2lvbi50eXBlKTtpZigoVz09PW51bGx8fFc9PT12b2lkIDA/dm9pZCAwOlcuZGVjb2RlKSYmdHlwZW9mIFcuZGVjb2RlPT09ImZ1bmN0aW9uIil7bGV0e2RlY29tbXByZXNzZWRCb2R5OlksYnVmZmVyczpHfT10aGlzLl9kZWNvbXByZXNzQnVmZmVycygkLFosVyk7WD10aGlzLl9sb2FkQ29tcHJlc3NlZFZlY3RvcnMoJCxZLHRoaXMuc2NoZW1hLmZpZWxkcyksJD1uZXcgYSQoJC5sZW5ndGgsJC5ub2RlcyxHLG51bGwpfWVsc2UgdGhyb3cgRXJyb3IoIlJlY29yZCBiYXRjaCBpcyBjb21wcmVzc2VkIGJ1dCBjb2RlYyBub3QgZm91bmQiKX1lbHNlIFg9dGhpcy5fbG9hZFZlY3RvcnMoJCxaLHRoaXMuc2NoZW1hLmZpZWxkcyk7bGV0IEo9SSh7dHlwZTpuZXcgajAodGhpcy5zY2hlbWEuZmllbGRzKSxsZW5ndGg6JC5sZW5ndGgsY2hpbGRyZW46WH0pO3JldHVybiBuZXcgRDAodGhpcy5zY2hlbWEsSixRKX1fbG9hZERpY3Rpb25hcnlCYXRjaCgkLFope2xldHtpZDpRLGlzRGVsdGE6WH09JCx7ZGljdGlvbmFyaWVzOkosc2NoZW1hOld9PXRoaXMsWT1KLmdldChRKSxHPVcuZGljdGlvbmFyaWVzLmdldChRKSxIO2lmKCQuZGF0YS5jb21wcmVzc2lvbiE9bnVsbCl7bGV0IHo9T1cuZ2V0KCQuZGF0YS5jb21wcmVzc2lvbi50eXBlKTtpZigoej09PW51bGx8fHo9PT12b2lkIDA/dm9pZCAwOnouZGVjb2RlKSYmdHlwZW9mIHouZGVjb2RlPT09ImZ1bmN0aW9uIil7bGV0e2RlY29tbXByZXNzZWRCb2R5OnEsYnVmZmVyczpQfT10aGlzLl9kZWNvbXByZXNzQnVmZmVycygkLmRhdGEsWix6KTtIPXRoaXMuX2xvYWRDb21wcmVzc2VkVmVjdG9ycygkLmRhdGEscSxbR10pLCQ9bmV3IHlaKG5ldyBhJCgkLmRhdGEubGVuZ3RoLCQuZGF0YS5ub2RlcyxQLG51bGwsJC5kYXRhLnZhcmlhZGljQnVmZmVyQ291bnRzKSxRLFgpfWVsc2UgdGhyb3cgRXJyb3IoIkRpY3Rpb25hcnkgYmF0Y2ggaXMgY29tcHJlc3NlZCBidXQgY29kZWMgbm90IGZvdW5kIil9ZWxzZSBIPXRoaXMuX2xvYWRWZWN0b3JzKCQuZGF0YSxaLFtHXSk7cmV0dXJuKFkmJlg/WS5jb25jYXQobmV3IHIoSCkpOm5ldyByKEgpKS5tZW1vaXplKCl9X2xvYWRWZWN0b3JzKCQsWixRKXtyZXR1cm4gbmV3IHZZKFosJC5ub2RlcywkLmJ1ZmZlcnMsdGhpcy5kaWN0aW9uYXJpZXMsdGhpcy5zY2hlbWEubWV0YWRhdGFWZXJzaW9uLCQudmFyaWFkaWNCdWZmZXJDb3VudHMpLnZpc2l0TWFueShRKX1fbG9hZENvbXByZXNzZWRWZWN0b3JzKCQsWixRKXtyZXR1cm4gbmV3IEQyKFosJC5ub2RlcywkLmJ1ZmZlcnMsdGhpcy5kaWN0aW9uYXJpZXMsdGhpcy5zY2hlbWEubWV0YWRhdGFWZXJzaW9uLCQudmFyaWFkaWNCdWZmZXJDb3VudHMpLnZpc2l0TWFueShRKX1fZGVjb21wcmVzc0J1ZmZlcnMoJCxaLFEpe2xldCBYPVtdLEo9W10sVz0wO2ZvcihsZXR7b2Zmc2V0OlksbGVuZ3RoOkd9b2YgJC5idWZmZXJzKXtpZihHPT09MCl7WC5wdXNoKG5ldyBVaW50OEFycmF5KDApKSxKLnB1c2gobmV3IHgkKFcsMCkpO2NvbnRpbnVlfWxldCBIPW5ldyBVWihaLnN1YmFycmF5KFksWStHKSksej1jMChILnJlYWRJbnQ2NCgwKSkscT1ILmJ5dGVzKCkuc3ViYXJyYXkoZFkpLFA9ej09PVNHP3E6US5kZWNvZGUocSk7WC5wdXNoKFApO2xldCBVPShXKzcmLTgpLVc7Vys9VSxKLnB1c2gobmV3IHgkKFcsUC5sZW5ndGgpKSxXKz1QLmxlbmd0aH1yZXR1cm57ZGVjb21tcHJlc3NlZEJvZHk6WCxidWZmZXJzOkp9fX1mdW5jdGlvbiBrRigkLFope3JldHVybiBaJiZ0eXBlb2YgWi5hdXRvRGVzdHJveT09PSJib29sZWFuIj9aLmF1dG9EZXN0cm95OiQuYXV0b0Rlc3Ryb3l9ZnVuY3Rpb24qRUYoJCl7bGV0IFo9eiQuZnJvbSgkKTt0cnl7aWYoIVoub3Blbih7YXV0b0Rlc3Ryb3k6ITF9KS5jbG9zZWQpZG8geWllbGQgWjt3aGlsZSghWi5yZXNldCgpLm9wZW4oKS5jbG9zZWQpfWZpbmFsbHl7Wi5jYW5jZWwoKX19ZnVuY3Rpb24gd0YoJCl7cmV0dXJuIFVRKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBRPXlpZWxkIFYwKHokLmZyb20oJCkpO3RyeXtpZighKHlpZWxkIFYwKFEub3Blbih7YXV0b0Rlc3Ryb3k6ITF9KSkpLmNsb3NlZClkbyB5aWVsZCB5aWVsZCBWMChRKTt3aGlsZSghKHlpZWxkIFYwKFEucmVzZXQoKS5vcGVuKCkpKS5jbG9zZWQpfWZpbmFsbHl7eWllbGQgVjAoUS5jYW5jZWwoKSl9fSl9ZnVuY3Rpb24geUMoJCl7cmV0dXJuIG5ldyBfWChuZXcgQkYoJCkpfWZ1bmN0aW9uIGhDKCQpe2xldCBaPSQucGVlayhEVys3Ji04KTtyZXR1cm4gWiYmWi5ieXRlTGVuZ3RoPj00PyF3RyhaKT9uZXcgX1gobmV3IG5ZKCQpKTpuZXcgSDYobmV3ICRIKCQucmVhZCgpKSk6bmV3IF9YKG5ldyBuWShmdW5jdGlvbiooKXt9KCkpKX1mdW5jdGlvbiBiQygkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFo9eWllbGQgJC5wZWVrKERXKzcmLTgpO3JldHVybiBaJiZaLmJ5dGVMZW5ndGg+PTQ/IXdHKFopP25ldyBLNihuZXcgb1koJCkpOm5ldyBINihuZXcgJEgoeWllbGQgJC5yZWFkKCkpKTpuZXcgSzYobmV3IG9ZKGZ1bmN0aW9uKCl7cmV0dXJuIFVRKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe30pfSgpKSl9KX1mdW5jdGlvbiBtQygkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0e3NpemU6Wn09eWllbGQgJC5zdGF0KCksUT1uZXcgVzYoJCxaKTtpZihaPj1ERiYmd0coeWllbGQgUS5yZWFkQXQoMCxEVys3Ji04KSkpcmV0dXJuIG5ldyBCRyhuZXcgU0YoUSkpO3JldHVybiBuZXcgSzYobmV3IG9ZKFEpKX0pfXZhciB6JCxfWCxLNixINixCRyxuWSxvWSwkSCxTRixCRjt2YXIga0c9TygoKT0+e01RKCk7JDgoKTtaUSgpO0gkKCk7dSQoKTtLMigpO05ZKCk7WDYoKTtKNigpO3EyKCk7bVAoKTtESigpO3hZKCk7YTIoKTt0MigpO3kwKCk7eiQ9Y2xhc3MgeiQgZXh0ZW5kcyBQV3tjb25zdHJ1Y3RvcigkKXtzdXBlcigpO3RoaXMuX2ltcGw9JH1nZXQgY2xvc2VkKCl7cmV0dXJuIHRoaXMuX2ltcGwuY2xvc2VkfWdldCBzY2hlbWEoKXtyZXR1cm4gdGhpcy5faW1wbC5zY2hlbWF9Z2V0IGF1dG9EZXN0cm95KCl7cmV0dXJuIHRoaXMuX2ltcGwuYXV0b0Rlc3Ryb3l9Z2V0IGRpY3Rpb25hcmllcygpe3JldHVybiB0aGlzLl9pbXBsLmRpY3Rpb25hcmllc31nZXQgbnVtRGljdGlvbmFyaWVzKCl7cmV0dXJuIHRoaXMuX2ltcGwubnVtRGljdGlvbmFyaWVzfWdldCBudW1SZWNvcmRCYXRjaGVzKCl7cmV0dXJuIHRoaXMuX2ltcGwubnVtUmVjb3JkQmF0Y2hlc31nZXQgZm9vdGVyKCl7cmV0dXJuIHRoaXMuX2ltcGwuaXNGaWxlKCk/dGhpcy5faW1wbC5mb290ZXI6bnVsbH1pc1N5bmMoKXtyZXR1cm4gdGhpcy5faW1wbC5pc1N5bmMoKX1pc0FzeW5jKCl7cmV0dXJuIHRoaXMuX2ltcGwuaXNBc3luYygpfWlzRmlsZSgpe3JldHVybiB0aGlzLl9pbXBsLmlzRmlsZSgpfWlzU3RyZWFtKCl7cmV0dXJuIHRoaXMuX2ltcGwuaXNTdHJlYW0oKX1uZXh0KCl7cmV0dXJuIHRoaXMuX2ltcGwubmV4dCgpfXRocm93KCQpe3JldHVybiB0aGlzLl9pbXBsLnRocm93KCQpfXJldHVybigkKXtyZXR1cm4gdGhpcy5faW1wbC5yZXR1cm4oJCl9Y2FuY2VsKCl7cmV0dXJuIHRoaXMuX2ltcGwuY2FuY2VsKCl9cmVzZXQoJCl7cmV0dXJuIHRoaXMuX2ltcGwucmVzZXQoJCksdGhpcy5fRE9NU3RyZWFtPXZvaWQgMCx0aGlzLl9ub2RlU3RyZWFtPXZvaWQgMCx0aGlzfW9wZW4oJCl7bGV0IFo9dGhpcy5faW1wbC5vcGVuKCQpO3JldHVybiBOOChaKT9aLnRoZW4oKCk9PnRoaXMpOnRoaXN9cmVhZFJlY29yZEJhdGNoKCQpe3JldHVybiB0aGlzLl9pbXBsLmlzRmlsZSgpP3RoaXMuX2ltcGwucmVhZFJlY29yZEJhdGNoKCQpOm51bGx9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5faW1wbFtTeW1ib2wuaXRlcmF0b3JdKCl9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9pbXBsW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpfXRvRE9NU3RyZWFtKCl7cmV0dXJuIE5aLnRvRE9NU3RyZWFtKHRoaXMuaXNTeW5jKCk/e1tTeW1ib2wuaXRlcmF0b3JdOigpPT50aGlzfTp7W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+dGhpc30pfXRvTm9kZVN0cmVhbSgpe3JldHVybiBOWi50b05vZGVTdHJlYW0odGhpcy5pc1N5bmMoKT97W1N5bWJvbC5pdGVyYXRvcl06KCk9PnRoaXN9OntbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT50aGlzfSx7b2JqZWN0TW9kZTohMH0pfXN0YXRpYyB0aHJvdWdoTm9kZSgkKXt0aHJvdyBFcnJvcignInRocm91Z2hOb2RlIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX1zdGF0aWMgdGhyb3VnaERPTSgkLFope3Rocm93IEVycm9yKCcidGhyb3VnaERPTSIgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyl9c3RhdGljIGZyb20oJCl7aWYoJCBpbnN0YW5jZW9mIHokKXJldHVybiAkO2Vsc2UgaWYoYTEoJCkpcmV0dXJuIHlDKCQpO2Vsc2UgaWYoZTEoJCkpcmV0dXJuIG1DKCQpO2Vsc2UgaWYoTjgoJCkpcmV0dXJuKCgpPT5uKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgeiQuZnJvbSh5aWVsZCAkKX0pKSgpO2Vsc2UgaWYoJDQoJCl8fFBZKCQpfHxRNCgkKXx8ZlEoJCkpcmV0dXJuIGJDKG5ldyBaOCgkKSk7cmV0dXJuIGhDKG5ldyBTWCgkKSl9c3RhdGljIHJlYWRBbGwoJCl7aWYoJCBpbnN0YW5jZW9mIHokKXJldHVybiAkLmlzU3luYygpP0VGKCQpOndGKCQpO2Vsc2UgaWYoYTEoJCl8fEFycmF5QnVmZmVyLmlzVmlldygkKXx8VTgoJCl8fHQxKCQpKXJldHVybiBFRigkKTtyZXR1cm4gd0YoJCl9fTtfWD1jbGFzcyBfWCBleHRlbmRzIHoke2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX2ltcGw9JH1yZWFkQWxsKCl7cmV0dXJuWy4uLnRoaXNdfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX2ltcGxbU3ltYm9sLml0ZXJhdG9yXSgpfVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gVVEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7eWllbGQgVjAoeWllbGQqZDYoRjgodGhpc1tTeW1ib2wuaXRlcmF0b3JdKCkpKSl9KX19O0s2PWNsYXNzIEs2IGV4dGVuZHMgeiR7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5faW1wbD0kfXJlYWRBbGwoKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyICQsWixRLFg7bGV0IEo9W107dHJ5e2Zvcih2YXIgVz0hMCxZPUY4KHRoaXMpLEc7Rz15aWVsZCBZLm5leHQoKSwkPUcuZG9uZSwhJDtXPSEwKXtYPUcudmFsdWUsVz0hMTtsZXQgSD1YO0oucHVzaChIKX19Y2F0Y2goSCl7Wj17ZXJyb3I6SH19ZmluYWxseXt0cnl7aWYoIVcmJiEkJiYoUT1ZLnJldHVybikpeWllbGQgUS5jYWxsKFkpfWZpbmFsbHl7aWYoWil0aHJvdyBaLmVycm9yfX1yZXR1cm4gSn0pfVtTeW1ib2wuaXRlcmF0b3JdKCl7dGhyb3cgRXJyb3IoIkFzeW5jUmVjb3JkQmF0Y2hTdHJlYW1SZWFkZXIgaXMgbm90IEl0ZXJhYmxlIil9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9pbXBsW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpfX07SDY9Y2xhc3MgSDYgZXh0ZW5kcyBfWHtjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLl9pbXBsPSR9fTtCRz1jbGFzcyBCRyBleHRlbmRzIEs2e2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX2ltcGw9JH19O25ZPWNsYXNzIG5ZIGV4dGVuZHMgZTJ7Y29uc3RydWN0b3IoJCxaKXtzdXBlcihaKTt0aGlzLl9yZWFkZXI9IWExKCQpP25ldyBsWSh0aGlzLl9oYW5kbGU9JCk6bmV3IFJHKHRoaXMuX2hhbmRsZT0kKX1pc1N5bmMoKXtyZXR1cm4hMH1pc1N0cmVhbSgpe3JldHVybiEwfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9Y2FuY2VsKCl7aWYoIXRoaXMuY2xvc2VkJiYodGhpcy5jbG9zZWQ9ITApKXRoaXMucmVzZXQoKS5fcmVhZGVyLnJldHVybigpLHRoaXMuX3JlYWRlcj1udWxsLHRoaXMuZGljdGlvbmFyaWVzPW51bGx9b3BlbigkKXtpZighdGhpcy5jbG9zZWQpe2lmKHRoaXMuYXV0b0Rlc3Ryb3k9a0YodGhpcywkKSwhKHRoaXMuc2NoZW1hfHwodGhpcy5zY2hlbWE9dGhpcy5fcmVhZGVyLnJlYWRTY2hlbWEoKSkpKXRoaXMuY2FuY2VsKCl9cmV0dXJuIHRoaXN9dGhyb3coJCl7aWYoIXRoaXMuY2xvc2VkJiZ0aGlzLmF1dG9EZXN0cm95JiYodGhpcy5jbG9zZWQ9ITApKXJldHVybiB0aGlzLnJlc2V0KCkuX3JlYWRlci50aHJvdygkKTtyZXR1cm4gTCR9cmV0dXJuKCQpe2lmKCF0aGlzLmNsb3NlZCYmdGhpcy5hdXRvRGVzdHJveSYmKHRoaXMuY2xvc2VkPSEwKSlyZXR1cm4gdGhpcy5yZXNldCgpLl9yZWFkZXIucmV0dXJuKCQpO3JldHVybiBMJH1uZXh0KCl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIEwkO2xldCAkLHtfcmVhZGVyOlp9PXRoaXM7d2hpbGUoJD10aGlzLl9yZWFkTmV4dE1lc3NhZ2VBbmRWYWxpZGF0ZSgpKWlmKCQuaXNTY2hlbWEoKSl0aGlzLnJlc2V0KCQuaGVhZGVyKCkpO2Vsc2UgaWYoJC5pc1JlY29yZEJhdGNoKCkpe3RoaXMuX3JlY29yZEJhdGNoSW5kZXgrKztsZXQgUT0kLmhlYWRlcigpLFg9Wi5yZWFkTWVzc2FnZUJvZHkoJC5ib2R5TGVuZ3RoKTtyZXR1cm57ZG9uZTohMSx2YWx1ZTp0aGlzLl9sb2FkUmVjb3JkQmF0Y2goUSxYLCQubWV0YWRhdGEpfX1lbHNlIGlmKCQuaXNEaWN0aW9uYXJ5QmF0Y2goKSl7dGhpcy5fZGljdGlvbmFyeUluZGV4Kys7bGV0IFE9JC5oZWFkZXIoKSxYPVoucmVhZE1lc3NhZ2VCb2R5KCQuYm9keUxlbmd0aCksSj10aGlzLl9sb2FkRGljdGlvbmFyeUJhdGNoKFEsWCk7dGhpcy5kaWN0aW9uYXJpZXMuc2V0KFEuaWQsSil9aWYodGhpcy5zY2hlbWEmJnRoaXMuX3JlY29yZEJhdGNoSW5kZXg9PT0wKXJldHVybiB0aGlzLl9yZWNvcmRCYXRjaEluZGV4Kysse2RvbmU6ITEsdmFsdWU6bmV3IExXKHRoaXMuc2NoZW1hKX07cmV0dXJuIHRoaXMucmV0dXJuKCl9X3JlYWROZXh0TWVzc2FnZUFuZFZhbGlkYXRlKCQpe3JldHVybiB0aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2UoJCl9fTtvWT1jbGFzcyBvWSBleHRlbmRzIGUye2NvbnN0cnVjdG9yKCQsWil7c3VwZXIoWik7dGhpcy5fcmVhZGVyPW5ldyBWRyh0aGlzLl9oYW5kbGU9JCl9aXNBc3luYygpe3JldHVybiEwfWlzU3RyZWFtKCl7cmV0dXJuITB9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfWNhbmNlbCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5jbG9zZWQmJih0aGlzLmNsb3NlZD0hMCkpeWllbGQgdGhpcy5yZXNldCgpLl9yZWFkZXIucmV0dXJuKCksdGhpcy5fcmVhZGVyPW51bGwsdGhpcy5kaWN0aW9uYXJpZXM9bnVsbH0pfW9wZW4oJCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLmNsb3NlZCl7aWYodGhpcy5hdXRvRGVzdHJveT1rRih0aGlzLCQpLCEodGhpcy5zY2hlbWF8fCh0aGlzLnNjaGVtYT15aWVsZCB0aGlzLl9yZWFkZXIucmVhZFNjaGVtYSgpKSkpeWllbGQgdGhpcy5jYW5jZWwoKX1yZXR1cm4gdGhpc30pfXRocm93KCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5jbG9zZWQmJnRoaXMuYXV0b0Rlc3Ryb3kmJih0aGlzLmNsb3NlZD0hMCkpcmV0dXJuIHlpZWxkIHRoaXMucmVzZXQoKS5fcmVhZGVyLnRocm93KCQpO3JldHVybiBMJH0pfXJldHVybigkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuY2xvc2VkJiZ0aGlzLmF1dG9EZXN0cm95JiYodGhpcy5jbG9zZWQ9ITApKXJldHVybiB5aWVsZCB0aGlzLnJlc2V0KCkuX3JlYWRlci5yZXR1cm4oJCk7cmV0dXJuIEwkfSl9bmV4dCgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gTCQ7bGV0ICQse19yZWFkZXI6Wn09dGhpczt3aGlsZSgkPXlpZWxkIHRoaXMuX3JlYWROZXh0TWVzc2FnZUFuZFZhbGlkYXRlKCkpaWYoJC5pc1NjaGVtYSgpKXlpZWxkIHRoaXMucmVzZXQoJC5oZWFkZXIoKSk7ZWxzZSBpZigkLmlzUmVjb3JkQmF0Y2goKSl7dGhpcy5fcmVjb3JkQmF0Y2hJbmRleCsrO2xldCBRPSQuaGVhZGVyKCksWD15aWVsZCBaLnJlYWRNZXNzYWdlQm9keSgkLmJvZHlMZW5ndGgpO3JldHVybntkb25lOiExLHZhbHVlOnRoaXMuX2xvYWRSZWNvcmRCYXRjaChRLFgsJC5tZXRhZGF0YSl9fWVsc2UgaWYoJC5pc0RpY3Rpb25hcnlCYXRjaCgpKXt0aGlzLl9kaWN0aW9uYXJ5SW5kZXgrKztsZXQgUT0kLmhlYWRlcigpLFg9eWllbGQgWi5yZWFkTWVzc2FnZUJvZHkoJC5ib2R5TGVuZ3RoKSxKPXRoaXMuX2xvYWREaWN0aW9uYXJ5QmF0Y2goUSxYKTt0aGlzLmRpY3Rpb25hcmllcy5zZXQoUS5pZCxKKX1pZih0aGlzLnNjaGVtYSYmdGhpcy5fcmVjb3JkQmF0Y2hJbmRleD09PTApcmV0dXJuIHRoaXMuX3JlY29yZEJhdGNoSW5kZXgrKyx7ZG9uZTohMSx2YWx1ZTpuZXcgTFcodGhpcy5zY2hlbWEpfTtyZXR1cm4geWllbGQgdGhpcy5yZXR1cm4oKX0pfV9yZWFkTmV4dE1lc3NhZ2VBbmRWYWxpZGF0ZSgkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX3JlYWRlci5yZWFkTWVzc2FnZSgkKX0pfX07JEg9Y2xhc3MgJEggZXh0ZW5kcyBuWXtnZXQgZm9vdGVyKCl7cmV0dXJuIHRoaXMuX2Zvb3Rlcn1nZXQgbnVtRGljdGlvbmFyaWVzKCl7cmV0dXJuIHRoaXMuX2Zvb3Rlcj90aGlzLl9mb290ZXIubnVtRGljdGlvbmFyaWVzOjB9Z2V0IG51bVJlY29yZEJhdGNoZXMoKXtyZXR1cm4gdGhpcy5fZm9vdGVyP3RoaXMuX2Zvb3Rlci5udW1SZWNvcmRCYXRjaGVzOjB9Y29uc3RydWN0b3IoJCxaKXtzdXBlcigkIGluc3RhbmNlb2YgbzQ/JDpuZXcgbzQoJCksWil9aXNTeW5jKCl7cmV0dXJuITB9aXNGaWxlKCl7cmV0dXJuITB9b3BlbigkKXtpZighdGhpcy5jbG9zZWQmJiF0aGlzLl9mb290ZXIpe3RoaXMuc2NoZW1hPSh0aGlzLl9mb290ZXI9dGhpcy5fcmVhZEZvb3RlcigpKS5zY2hlbWE7Zm9yKGxldCBaIG9mIHRoaXMuX2Zvb3Rlci5kaWN0aW9uYXJ5QmF0Y2hlcygpKVomJnRoaXMuX3JlYWREaWN0aW9uYXJ5QmF0Y2godGhpcy5fZGljdGlvbmFyeUluZGV4KyspfXJldHVybiBzdXBlci5vcGVuKCQpfXJlYWRSZWNvcmRCYXRjaCgkKXt2YXIgWjtpZih0aGlzLmNsb3NlZClyZXR1cm4gbnVsbDtpZighdGhpcy5fZm9vdGVyKXRoaXMub3BlbigpO2xldCBRPShaPXRoaXMuX2Zvb3Rlcik9PT1udWxsfHxaPT09dm9pZCAwP3ZvaWQgMDpaLmdldFJlY29yZEJhdGNoKCQpO2lmKFEmJnRoaXMuX2hhbmRsZS5zZWVrKFEub2Zmc2V0KSl7bGV0IFg9dGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlKFQwLlJlY29yZEJhdGNoKTtpZihYPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5pc1JlY29yZEJhdGNoKCkpe2xldCBKPVguaGVhZGVyKCksVz10aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2VCb2R5KFguYm9keUxlbmd0aCk7cmV0dXJuIHRoaXMuX2xvYWRSZWNvcmRCYXRjaChKLFcsWC5tZXRhZGF0YSl9fXJldHVybiBudWxsfV9yZWFkRGljdGlvbmFyeUJhdGNoKCQpe3ZhciBaO2xldCBRPShaPXRoaXMuX2Zvb3Rlcik9PT1udWxsfHxaPT09dm9pZCAwP3ZvaWQgMDpaLmdldERpY3Rpb25hcnlCYXRjaCgkKTtpZihRJiZ0aGlzLl9oYW5kbGUuc2VlayhRLm9mZnNldCkpe2xldCBYPXRoaXMuX3JlYWRlci5yZWFkTWVzc2FnZShUMC5EaWN0aW9uYXJ5QmF0Y2gpO2lmKFg9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLmlzRGljdGlvbmFyeUJhdGNoKCkpe2xldCBKPVguaGVhZGVyKCksVz10aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2VCb2R5KFguYm9keUxlbmd0aCksWT10aGlzLl9sb2FkRGljdGlvbmFyeUJhdGNoKEosVyk7dGhpcy5kaWN0aW9uYXJpZXMuc2V0KEouaWQsWSl9fX1fcmVhZEZvb3Rlcigpe2xldHtfaGFuZGxlOiR9PXRoaXMsWj0kLnNpemUtcjIsUT0kLnJlYWRJbnQzMihaKSxYPSQucmVhZEF0KFotUSxRKTtyZXR1cm4gTkouZGVjb2RlKFgpfV9yZWFkTmV4dE1lc3NhZ2VBbmRWYWxpZGF0ZSgkKXt2YXIgWjtpZighdGhpcy5fZm9vdGVyKXRoaXMub3BlbigpO2lmKHRoaXMuX2Zvb3RlciYmdGhpcy5fcmVjb3JkQmF0Y2hJbmRleDx0aGlzLm51bVJlY29yZEJhdGNoZXMpe2xldCBRPShaPXRoaXMuX2Zvb3Rlcik9PT1udWxsfHxaPT09dm9pZCAwP3ZvaWQgMDpaLmdldFJlY29yZEJhdGNoKHRoaXMuX3JlY29yZEJhdGNoSW5kZXgpO2lmKFEmJnRoaXMuX2hhbmRsZS5zZWVrKFEub2Zmc2V0KSlyZXR1cm4gdGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlKCQpfXJldHVybiBudWxsfX07U0Y9Y2xhc3MgU0YgZXh0ZW5kcyBvWXtnZXQgZm9vdGVyKCl7cmV0dXJuIHRoaXMuX2Zvb3Rlcn1nZXQgbnVtRGljdGlvbmFyaWVzKCl7cmV0dXJuIHRoaXMuX2Zvb3Rlcj90aGlzLl9mb290ZXIubnVtRGljdGlvbmFyaWVzOjB9Z2V0IG51bVJlY29yZEJhdGNoZXMoKXtyZXR1cm4gdGhpcy5fZm9vdGVyP3RoaXMuX2Zvb3Rlci5udW1SZWNvcmRCYXRjaGVzOjB9Y29uc3RydWN0b3IoJCwuLi5aKXtsZXQgUT10eXBlb2YgWlswXSE9PSJudW1iZXIiP1ouc2hpZnQoKTp2b2lkIDAsWD1aWzBdaW5zdGFuY2VvZiBNYXA/Wi5zaGlmdCgpOnZvaWQgMDtzdXBlcigkIGluc3RhbmNlb2YgVzY/JDpuZXcgVzYoJCxRKSxYKX1pc0ZpbGUoKXtyZXR1cm4hMH1pc0FzeW5jKCl7cmV0dXJuITB9b3BlbigkKXtsZXQgWj1PYmplY3QuY3JlYXRlKG51bGwse29wZW46e2dldDooKT0+c3VwZXIub3Blbn19KTtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuY2xvc2VkJiYhdGhpcy5fZm9vdGVyKXt0aGlzLnNjaGVtYT0odGhpcy5fZm9vdGVyPXlpZWxkIHRoaXMuX3JlYWRGb290ZXIoKSkuc2NoZW1hO2ZvcihsZXQgUSBvZiB0aGlzLl9mb290ZXIuZGljdGlvbmFyeUJhdGNoZXMoKSlRJiYoeWllbGQgdGhpcy5fcmVhZERpY3Rpb25hcnlCYXRjaCh0aGlzLl9kaWN0aW9uYXJ5SW5kZXgrKykpfXJldHVybiB5aWVsZCBaLm9wZW4uY2FsbCh0aGlzLCQpfSl9cmVhZFJlY29yZEJhdGNoKCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgWjtpZih0aGlzLmNsb3NlZClyZXR1cm4gbnVsbDtpZighdGhpcy5fZm9vdGVyKXlpZWxkIHRoaXMub3BlbigpO2xldCBRPShaPXRoaXMuX2Zvb3Rlcik9PT1udWxsfHxaPT09dm9pZCAwP3ZvaWQgMDpaLmdldFJlY29yZEJhdGNoKCQpO2lmKFEmJih5aWVsZCB0aGlzLl9oYW5kbGUuc2VlayhRLm9mZnNldCkpKXtsZXQgWD15aWVsZCB0aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2UoVDAuUmVjb3JkQmF0Y2gpO2lmKFg9PT1udWxsfHxYPT09dm9pZCAwP3ZvaWQgMDpYLmlzUmVjb3JkQmF0Y2goKSl7bGV0IEo9WC5oZWFkZXIoKSxXPXlpZWxkIHRoaXMuX3JlYWRlci5yZWFkTWVzc2FnZUJvZHkoWC5ib2R5TGVuZ3RoKTtyZXR1cm4gdGhpcy5fbG9hZFJlY29yZEJhdGNoKEosVyxYLm1ldGFkYXRhKX19cmV0dXJuIG51bGx9KX1fcmVhZERpY3Rpb25hcnlCYXRjaCgkKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFo7bGV0IFE9KFo9dGhpcy5fZm9vdGVyKT09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOlouZ2V0RGljdGlvbmFyeUJhdGNoKCQpO2lmKFEmJih5aWVsZCB0aGlzLl9oYW5kbGUuc2VlayhRLm9mZnNldCkpKXtsZXQgWD15aWVsZCB0aGlzLl9yZWFkZXIucmVhZE1lc3NhZ2UoVDAuRGljdGlvbmFyeUJhdGNoKTtpZihYPT09bnVsbHx8WD09PXZvaWQgMD92b2lkIDA6WC5pc0RpY3Rpb25hcnlCYXRjaCgpKXtsZXQgSj1YLmhlYWRlcigpLFc9eWllbGQgdGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlQm9keShYLmJvZHlMZW5ndGgpLFk9dGhpcy5fbG9hZERpY3Rpb25hcnlCYXRjaChKLFcpO3RoaXMuZGljdGlvbmFyaWVzLnNldChKLmlkLFkpfX19KX1fcmVhZEZvb3Rlcigpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXR7X2hhbmRsZTokfT10aGlzOyQuX3BlbmRpbmcmJih5aWVsZCAkLl9wZW5kaW5nKTtsZXQgWj0kLnNpemUtcjIsUT15aWVsZCAkLnJlYWRJbnQzMihaKSxYPXlpZWxkICQucmVhZEF0KFotUSxRKTtyZXR1cm4gTkouZGVjb2RlKFgpfSl9X3JlYWROZXh0TWVzc2FnZUFuZFZhbGlkYXRlKCQpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5fZm9vdGVyKXlpZWxkIHRoaXMub3BlbigpO2lmKHRoaXMuX2Zvb3RlciYmdGhpcy5fcmVjb3JkQmF0Y2hJbmRleDx0aGlzLm51bVJlY29yZEJhdGNoZXMpe2xldCBaPXRoaXMuX2Zvb3Rlci5nZXRSZWNvcmRCYXRjaCh0aGlzLl9yZWNvcmRCYXRjaEluZGV4KTtpZihaJiYoeWllbGQgdGhpcy5faGFuZGxlLnNlZWsoWi5vZmZzZXQpKSlyZXR1cm4geWllbGQgdGhpcy5fcmVhZGVyLnJlYWRNZXNzYWdlKCQpfXJldHVybiBudWxsfSl9fTtCRj1jbGFzcyBCRiBleHRlbmRzIG5Ze2NvbnN0cnVjdG9yKCQsWil7c3VwZXIoJCxaKX1fbG9hZFZlY3RvcnMoJCxaLFEpe3JldHVybiBuZXcgQTIoWiwkLm5vZGVzLCQuYnVmZmVycyx0aGlzLmRpY3Rpb25hcmllcyx0aGlzLnNjaGVtYS5tZXRhZGF0YVZlcnNpb24sJC52YXJpYWRpY0J1ZmZlckNvdW50cykudmlzaXRNYW55KFEpfX19KTtmdW5jdGlvbiBCUSgkKXtsZXQgWj0kLmJ5dGVMZW5ndGgrNyYtODtyZXR1cm4gdGhpcy5idWZmZXJzLnB1c2goJCksdGhpcy5idWZmZXJSZWdpb25zLnB1c2gobmV3IHgkKHRoaXMuX2J5dGVMZW5ndGgsWikpLHRoaXMuX2J5dGVMZW5ndGgrPVosdGhpc31mdW5jdGlvbiBmQygkKXt2YXIgWjtsZXR7dHlwZTpRLGxlbmd0aDpYLHR5cGVJZHM6Six2YWx1ZU9mZnNldHM6V309JDtpZihCUS5jYWxsKHRoaXMsSiksUS5tb2RlPT09bTAuU3BhcnNlKXJldHVybiBaSC5jYWxsKHRoaXMsJCk7ZWxzZSBpZihRLm1vZGU9PT1tMC5EZW5zZSlpZigkLm9mZnNldDw9MClyZXR1cm4gQlEuY2FsbCh0aGlzLFcpLFpILmNhbGwodGhpcywkKTtlbHNle2xldCBZPW5ldyBJbnQzMkFycmF5KFgpLEc9T2JqZWN0LmNyZWF0ZShudWxsKSxIPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCB6LHEsUD0tMTsrK1A8WDspe2lmKCh6PUpbUF0pPT09dm9pZCAwKWNvbnRpbnVlO2lmKChxPUdbel0pPT09dm9pZCAwKXE9R1t6XT1XW1BdO1lbUF09V1tQXS1xLEhbel09KChaPUhbel0pIT09bnVsbCYmWiE9PXZvaWQgMD9aOjApKzF9QlEuY2FsbCh0aGlzLFkpLHRoaXMudmlzaXRNYW55KCQuY2hpbGRyZW4ubWFwKCh6LHEpPT57bGV0IFA9US50eXBlSWRzW3FdLFU9R1tQXSxNPUhbUF07cmV0dXJuIHouc2xpY2UoVSxNYXRoLm1pbihYLE0pKX0pKX1yZXR1cm4gdGhpc31mdW5jdGlvbiB1QygkKXtsZXQgWjtpZigkLm51bGxDb3VudD49JC5sZW5ndGgpcmV0dXJuIEJRLmNhbGwodGhpcyxuZXcgVWludDhBcnJheSgkLmxlbmd0aCs3Pj4zKSk7ZWxzZSBpZigoWj0kLnZhbHVlcylpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIEJRLmNhbGwodGhpcyxlSigkLm9mZnNldCwkLmxlbmd0aCxaKSk7cmV0dXJuIEJRLmNhbGwodGhpcywkNigkLnZhbHVlcykpfWZ1bmN0aW9uIFRYKCQpe3JldHVybiBCUS5jYWxsKHRoaXMsJC52YWx1ZXMuc3ViYXJyYXkoMCwkLmxlbmd0aCokLnN0cmlkZSkpfWZ1bmN0aW9uIElHKCQpe2xldHtsZW5ndGg6Wix2YWx1ZXM6USx2YWx1ZU9mZnNldHM6WH09JCxKPWMwKFhbMF0pLFc9YzAoWFtaXSksWT1NYXRoLm1pbihXLUosUS5ieXRlTGVuZ3RoLUopO3JldHVybiBCUS5jYWxsKHRoaXMsSjQoLUosWisxLFgpKSxCUS5jYWxsKHRoaXMsUS5zdWJhcnJheShKLEorWSkpLHRoaXN9ZnVuY3Rpb24gSUYoJCl7bGV0e29mZnNldDpaLGxlbmd0aDpRLHN0cmlkZTpYLHZhbHVlczpKLHZhcmlhZGljQnVmZmVyczpXPVtdfT0kO2lmKCFKKXRocm93IEVycm9yKCJCaW5hcnlWaWV3IGRhdGEgaXMgbWlzc2luZyB2aWV3IGJ1ZmZlciIpO2xldCBZPVoqWCxHPVkrUSpYO0JRLmNhbGwodGhpcyxKLnN1YmFycmF5KFksRykpO2ZvcihsZXQgSCBvZiBXKUJRLmNhbGwodGhpcyxIKTtyZXR1cm4gdGhpcy5fdmFyaWFkaWNCdWZmZXJDb3VudHMucHVzaChXLmxlbmd0aCksdGhpc31mdW5jdGlvbiBRSCgkKXtsZXR7bGVuZ3RoOlosdmFsdWVPZmZzZXRzOlF9PSQ7aWYoUSl7bGV0e1swXTpYLFtaXTpKfT1RO3JldHVybiBCUS5jYWxsKHRoaXMsSjQoLVgsWisxLFEpKSx0aGlzLnZpc2l0KCQuY2hpbGRyZW5bMF0uc2xpY2UoWCxKLVgpKX1yZXR1cm4gdGhpcy52aXNpdCgkLmNoaWxkcmVuWzBdKX1mdW5jdGlvbiBaSCgkKXtyZXR1cm4gdGhpcy52aXNpdE1hbnkoJC50eXBlLmNoaWxkcmVuLm1hcCgoWixRKT0+JC5jaGlsZHJlbltRXSkuZmlsdGVyKEJvb2xlYW4pKVswXX12YXIgRCQ7dmFyIF9GPU8oKCk9PntaUSgpO1I4KCk7dSQoKTtESigpO3MkKCk7R1coKTtYNigpO0gkKCk7RCQ9Y2xhc3MgRCQgZXh0ZW5kcyBIMHtzdGF0aWMgYXNzZW1ibGUoLi4uJCl7bGV0IFo9KFgpPT5YLmZsYXRNYXAoKEopPT5BcnJheS5pc0FycmF5KEopP1ooSik6SiBpbnN0YW5jZW9mIEQwP0ouZGF0YS5jaGlsZHJlbjpKLmRhdGEpLFE9bmV3IEQkO3JldHVybiBRLnZpc2l0TWFueShaKCQpKSxRfWNvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLl9ieXRlTGVuZ3RoPTAsdGhpcy5fbm9kZXM9W10sdGhpcy5fYnVmZmVycz1bXSx0aGlzLl9idWZmZXJSZWdpb25zPVtdLHRoaXMuX3ZhcmlhZGljQnVmZmVyQ291bnRzPVtdfXZpc2l0KCQpe2lmKCQgaW5zdGFuY2VvZiByKXJldHVybiB0aGlzLnZpc2l0TWFueSgkLmRhdGEpLHRoaXM7bGV0e3R5cGU6Wn09JDtpZighay5pc0RpY3Rpb25hcnkoWikpe2xldHtsZW5ndGg6UX09JDtpZihRPjIxNDc0ODM2NDcpdGhyb3cgUmFuZ2VFcnJvcigiQ2Fubm90IHdyaXRlIGFycmF5cyBsYXJnZXIgdGhhbiAyXjMxIC0gMSBpbiBsZW5ndGgiKTtpZihrLmlzVW5pb24oWikpdGhpcy5ub2Rlcy5wdXNoKG5ldyB3OChRLDApKTtlbHNle2xldHtudWxsQ291bnQ6WH09JDtpZighay5pc051bGwoWikpQlEuY2FsbCh0aGlzLFg8PTA/bmV3IFVpbnQ4QXJyYXkoMCk6ZUooJC5vZmZzZXQsUSwkLm51bGxCaXRtYXApKTt0aGlzLm5vZGVzLnB1c2gobmV3IHc4KFEsWCkpfX1yZXR1cm4gc3VwZXIudmlzaXQoJCl9dmlzaXROdWxsKCQpe3JldHVybiB0aGlzfXZpc2l0RGljdGlvbmFyeSgkKXtyZXR1cm4gdGhpcy52aXNpdCgkLmNsb25lKCQudHlwZS5pbmRpY2VzKSl9Z2V0IG5vZGVzKCl7cmV0dXJuIHRoaXMuX25vZGVzfWdldCBidWZmZXJzKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnN9Z2V0IGJ5dGVMZW5ndGgoKXtyZXR1cm4gdGhpcy5fYnl0ZUxlbmd0aH1nZXQgYnVmZmVyUmVnaW9ucygpe3JldHVybiB0aGlzLl9idWZmZXJSZWdpb25zfWdldCB2YXJpYWRpY0J1ZmZlckNvdW50cygpe3JldHVybiB0aGlzLl92YXJpYWRpY0J1ZmZlckNvdW50c319O0QkLnByb3RvdHlwZS52aXNpdEJvb2w9dUM7RCQucHJvdG90eXBlLnZpc2l0SW50PVRYO0QkLnByb3RvdHlwZS52aXNpdEZsb2F0PVRYO0QkLnByb3RvdHlwZS52aXNpdFV0Zjg9SUc7RCQucHJvdG90eXBlLnZpc2l0TGFyZ2VVdGY4PUlHO0QkLnByb3RvdHlwZS52aXNpdFV0ZjhWaWV3PUlGO0QkLnByb3RvdHlwZS52aXNpdEJpbmFyeT1JRztEJC5wcm90b3R5cGUudmlzaXRMYXJnZUJpbmFyeT1JRztEJC5wcm90b3R5cGUudmlzaXRCaW5hcnlWaWV3PUlGO0QkLnByb3RvdHlwZS52aXNpdEZpeGVkU2l6ZUJpbmFyeT1UWDtEJC5wcm90b3R5cGUudmlzaXREYXRlPVRYO0QkLnByb3RvdHlwZS52aXNpdFRpbWVzdGFtcD1UWDtEJC5wcm90b3R5cGUudmlzaXRUaW1lPVRYO0QkLnByb3RvdHlwZS52aXNpdERlY2ltYWw9VFg7RCQucHJvdG90eXBlLnZpc2l0TGlzdD1RSDtEJC5wcm90b3R5cGUudmlzaXRTdHJ1Y3Q9Wkg7RCQucHJvdG90eXBlLnZpc2l0VW5pb249ZkM7RCQucHJvdG90eXBlLnZpc2l0SW50ZXJ2YWw9VFg7RCQucHJvdG90eXBlLnZpc2l0RHVyYXRpb249VFg7RCQucHJvdG90eXBlLnZpc2l0Rml4ZWRTaXplTGlzdD1RSDtEJC5wcm90b3R5cGUudmlzaXRNYXA9UUh9KTtmdW5jdGlvbiBYSCgkLFope2xldCBRPVo7aWYoWiBpbnN0YW5jZW9mIHYkKVE9Wi5iYXRjaGVzLCQucmVzZXQodm9pZCAwLFouc2NoZW1hKTtmb3IobGV0IFggb2YgUSkkLndyaXRlKFgpO3JldHVybiAkLmZpbmlzaCgpfWZ1bmN0aW9uIEpIKCQsWil7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBRLFgsSixXLFksRyxIO3RyeXtmb3IoUT0hMCxYPUY4KFopO0o9eWllbGQgWC5uZXh0KCksVz1KLmRvbmUsIVc7UT0hMCl7SD1KLnZhbHVlLFE9ITE7bGV0IHo9SDskLndyaXRlKHopfX1jYXRjaCh6KXtZPXtlcnJvcjp6fX1maW5hbGx5e3RyeXtpZighUSYmIVcmJihHPVgucmV0dXJuKSl5aWVsZCBHLmNhbGwoWCl9ZmluYWxseXtpZihZKXRocm93IFkuZXJyb3J9fXJldHVybiAkLmZpbmlzaCgpfSl9dmFyIHo2LFhRLENXO3ZhciBXSD1PKCgpPT57TVEoKTtqRygpO2EyKCk7WlEoKTtYNigpO1g2KCk7SzIoKTt1JCgpO2NZKCk7SjYoKTtfRigpO3MkKCk7REooKTt4WSgpO0FZKCk7dDIoKTt5MCgpO3o2PWNsYXNzIHo2IGV4dGVuZHMgUFd7c3RhdGljIHRocm91Z2hOb2RlKCQpe3Rocm93IEVycm9yKCcidGhyb3VnaE5vZGUiIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpfXN0YXRpYyB0aHJvdWdoRE9NKCQsWil7dGhyb3cgRXJyb3IoJyJ0aHJvdWdoRE9NIiBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKX1jb25zdHJ1Y3RvcigkKXtzdXBlcigpO2lmKHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9jb21wcmVzc2lvbj1udWxsLHRoaXMuX3Npbms9bmV3IHdYLHRoaXMuX3NjaGVtYT1udWxsLHRoaXMuX2RpY3Rpb25hcnlCbG9ja3M9W10sdGhpcy5fcmVjb3JkQmF0Y2hCbG9ja3M9W10sdGhpcy5fc2VlbkRpY3Rpb25hcmllcz1uZXcgTWFwLHRoaXMuX2RpY3Rpb25hcnlEZWx0YU9mZnNldHM9bmV3IE1hcCxUWigkKXx8KCQ9e2F1dG9EZXN0cm95OiEwLHdyaXRlTGVnYWN5SXBjRm9ybWF0OiExLGNvbXByZXNzaW9uVHlwZTpudWxsfSksdGhpcy5fYXV0b0Rlc3Ryb3k9dHlwZW9mICQuYXV0b0Rlc3Ryb3k9PT0iYm9vbGVhbiI/JC5hdXRvRGVzdHJveTohMCx0aGlzLl93cml0ZUxlZ2FjeUlwY0Zvcm1hdD10eXBlb2YgJC53cml0ZUxlZ2FjeUlwY0Zvcm1hdD09PSJib29sZWFuIj8kLndyaXRlTGVnYWN5SXBjRm9ybWF0OiExLCQuY29tcHJlc3Npb25UeXBlIT1udWxsKXtpZih0aGlzLl93cml0ZUxlZ2FjeUlwY0Zvcm1hdCl0aHJvdyBFcnJvcigiTGVnYWN5IElQQyBmb3JtYXQgZG9lcyBub3Qgc3VwcG9ydCBjb2x1bW5hciBjb21wcmVzc2lvbi4gVXNlIG1vZGVybiBJUEMgZm9ybWF0ICh3cml0ZUxlZ2FjeUlwY0Zvcm1hdD1mYWxzZSkuIik7aWYoT2JqZWN0LnZhbHVlcyhnWikuaW5jbHVkZXMoJC5jb21wcmVzc2lvblR5cGUpKXRoaXMuX2NvbXByZXNzaW9uPW5ldyBxVygkLmNvbXByZXNzaW9uVHlwZSk7ZWxzZXtsZXQgWj1PYmplY3QudmFsdWVzKGdaKS5maWx0ZXIoKFEpPT50eXBlb2YgUT09PSJzdHJpbmciKTt0aHJvdyBFcnJvcihgVW5zdXBwb3J0ZWQgY29tcHJlc3Npb25UeXBlOiAkeyQuY29tcHJlc3Npb25UeXBlfSBBdmFpbGFibGUgdHlwZXM6ICR7Wi5qb2luKCIsICIpfWApfX1lbHNlIHRoaXMuX2NvbXByZXNzaW9uPW51bGx9dG9TdHJpbmcoJD0hMSl7cmV0dXJuIHRoaXMuX3NpbmsudG9TdHJpbmcoJCl9dG9VaW50OEFycmF5KCQ9ITEpe3JldHVybiB0aGlzLl9zaW5rLnRvVWludDhBcnJheSgkKX13cml0ZUFsbCgkKXtpZihOOCgkKSlyZXR1cm4gJC50aGVuKChaKT0+dGhpcy53cml0ZUFsbChaKSk7ZWxzZSBpZihmUSgkKSlyZXR1cm4gSkgodGhpcywkKTtyZXR1cm4gWEgodGhpcywkKX1nZXQgY2xvc2VkKCl7cmV0dXJuIHRoaXMuX3NpbmsuY2xvc2VkfVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fc2lua1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKX10b0RPTVN0cmVhbSgkKXtyZXR1cm4gdGhpcy5fc2luay50b0RPTVN0cmVhbSgkKX10b05vZGVTdHJlYW0oJCl7cmV0dXJuIHRoaXMuX3NpbmsudG9Ob2RlU3RyZWFtKCQpfWNsb3NlKCl7cmV0dXJuIHRoaXMucmVzZXQoKS5fc2luay5jbG9zZSgpfWFib3J0KCQpe3JldHVybiB0aGlzLnJlc2V0KCkuX3NpbmsuYWJvcnQoJCl9ZmluaXNoKCl7cmV0dXJuIHRoaXMuX2F1dG9EZXN0cm95P3RoaXMuY2xvc2UoKTp0aGlzLnJlc2V0KHRoaXMuX3NpbmssdGhpcy5fc2NoZW1hKSx0aGlzfXJlc2V0KCQ9dGhpcy5fc2luayxaPW51bGwpe2lmKCQ9PT10aGlzLl9zaW5rfHwkIGluc3RhbmNlb2Ygd1gpdGhpcy5fc2luaz0kO2Vsc2UgaWYodGhpcy5fc2luaz1uZXcgd1gsJCYmVjkoJCkpdGhpcy50b0RPTVN0cmVhbSh7dHlwZToiYnl0ZXMifSkucGlwZVRvKCQpO2Vsc2UgaWYoJCYmUjkoJCkpdGhpcy50b05vZGVTdHJlYW0oe29iamVjdE1vZGU6ITF9KS5waXBlKCQpO2lmKHRoaXMuX3N0YXJ0ZWQmJnRoaXMuX3NjaGVtYSl0aGlzLl93cml0ZUZvb3Rlcih0aGlzLl9zY2hlbWEpO2lmKHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGljdGlvbmFyeUJsb2Nrcz1bXSx0aGlzLl9yZWNvcmRCYXRjaEJsb2Nrcz1bXSx0aGlzLl9zZWVuRGljdGlvbmFyaWVzPW5ldyBNYXAsdGhpcy5fZGljdGlvbmFyeURlbHRhT2Zmc2V0cz1uZXcgTWFwLCFafHwhRzYoWix0aGlzLl9zY2hlbWEpKWlmKFo9PW51bGwpdGhpcy5fcG9zaXRpb249MCx0aGlzLl9zY2hlbWE9bnVsbDtlbHNlIHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc2NoZW1hPVosdGhpcy5fd3JpdGVTY2hlbWEoWik7cmV0dXJuIHRoaXN9d3JpdGUoJCl7bGV0IFo9bnVsbDtpZighdGhpcy5fc2luayl0aHJvdyBFcnJvcigiUmVjb3JkQmF0Y2hXcml0ZXIgaXMgY2xvc2VkIik7ZWxzZSBpZigkPT1udWxsKXJldHVybiB0aGlzLmZpbmlzaCgpJiZ2b2lkIDA7ZWxzZSBpZigkIGluc3RhbmNlb2YgdiQmJiEoWj0kLnNjaGVtYSkpcmV0dXJuIHRoaXMuZmluaXNoKCkmJnZvaWQgMDtlbHNlIGlmKCQgaW5zdGFuY2VvZiBEMCYmIShaPSQuc2NoZW1hKSlyZXR1cm4gdGhpcy5maW5pc2goKSYmdm9pZCAwO2lmKFomJiFHNihaLHRoaXMuX3NjaGVtYSkpe2lmKHRoaXMuX3N0YXJ0ZWQmJnRoaXMuX2F1dG9EZXN0cm95KXJldHVybiB0aGlzLmNsb3NlKCk7dGhpcy5yZXNldCh0aGlzLl9zaW5rLFopfWlmKCQgaW5zdGFuY2VvZiBEMCl7aWYoISgkIGluc3RhbmNlb2YgTFcpKXRoaXMuX3dyaXRlUmVjb3JkQmF0Y2goJCl9ZWxzZSBpZigkIGluc3RhbmNlb2YgdiQpdGhpcy53cml0ZUFsbCgkLmJhdGNoZXMpO2Vsc2UgaWYoVTgoJCkpdGhpcy53cml0ZUFsbCgkKX1fd3JpdGVNZXNzYWdlKCQsWj04KXtsZXQgUT1aLTEsWD1LWi5lbmNvZGUoJCksSj1YLmJ5dGVMZW5ndGgsVz0hdGhpcy5fd3JpdGVMZWdhY3lJcGNGb3JtYXQ/ODo0LFk9SitXK1EmflEsRz1ZLUotVztpZigkLmhlYWRlclR5cGU9PT1UMC5SZWNvcmRCYXRjaCl0aGlzLl9yZWNvcmRCYXRjaEJsb2Nrcy5wdXNoKG5ldyBFWChZLCQuYm9keUxlbmd0aCx0aGlzLl9wb3NpdGlvbikpO2Vsc2UgaWYoJC5oZWFkZXJUeXBlPT09VDAuRGljdGlvbmFyeUJhdGNoKXRoaXMuX2RpY3Rpb25hcnlCbG9ja3MucHVzaChuZXcgRVgoWSwkLmJvZHlMZW5ndGgsdGhpcy5fcG9zaXRpb24pKTtpZighdGhpcy5fd3JpdGVMZWdhY3lJcGNGb3JtYXQpdGhpcy5fd3JpdGUoSW50MzJBcnJheS5vZigtMSkpO2lmKHRoaXMuX3dyaXRlKEludDMyQXJyYXkub2YoWS1XKSksSj4wKXRoaXMuX3dyaXRlKFgpO3JldHVybiB0aGlzLl93cml0ZVBhZGRpbmcoRyl9X3dyaXRlKCQpe2lmKHRoaXMuX3N0YXJ0ZWQpe2xldCBaPSQwKCQpO2lmKFomJlouYnl0ZUxlbmd0aD4wKXRoaXMuX3Npbmsud3JpdGUoWiksdGhpcy5fcG9zaXRpb24rPVouYnl0ZUxlbmd0aH1yZXR1cm4gdGhpc31fd3JpdGVTY2hlbWEoJCl7cmV0dXJuIHRoaXMuX3dyaXRlTWVzc2FnZShLWi5mcm9tKCQpKX1fd3JpdGVGb290ZXIoJCl7cmV0dXJuIHRoaXMuX3dyaXRlTGVnYWN5SXBjRm9ybWF0P3RoaXMuX3dyaXRlKEludDMyQXJyYXkub2YoMCkpOnRoaXMuX3dyaXRlKEludDMyQXJyYXkub2YoLTEsMCkpfV93cml0ZU1hZ2ljKCl7cmV0dXJuIHRoaXMuX3dyaXRlKEFXKX1fd3JpdGVQYWRkaW5nKCQpe3JldHVybiAkPjA/dGhpcy5fd3JpdGUobmV3IFVpbnQ4QXJyYXkoJCkpOnRoaXN9X3dyaXRlUmVjb3JkQmF0Y2goJCl7bGV0e2J5dGVMZW5ndGg6Wixub2RlczpRLGJ1ZmZlclJlZ2lvbnM6WCxidWZmZXJzOkosdmFyaWFkaWNCdWZmZXJDb3VudHM6V309dGhpcy5fYXNzZW1ibGVSZWNvcmRCYXRjaCgkKSxZPW5ldyBhJCgkLm51bVJvd3MsUSxYLHRoaXMuX2NvbXByZXNzaW9uLFcsJC5tZXRhZGF0YSksRz1LWi5mcm9tKFksWik7cmV0dXJuIHRoaXMuX3dyaXRlRGljdGlvbmFyaWVzKCQpLl93cml0ZU1lc3NhZ2UoRykuX3dyaXRlQm9keUJ1ZmZlcnMoSil9X2Fzc2VtYmxlUmVjb3JkQmF0Y2goJCl7bGV0e2J5dGVMZW5ndGg6Wixub2RlczpRLGJ1ZmZlclJlZ2lvbnM6WCxidWZmZXJzOkosdmFyaWFkaWNCdWZmZXJDb3VudHM6V309RCQuYXNzZW1ibGUoJCk7aWYodGhpcy5fY29tcHJlc3Npb24hPW51bGwpKHtieXRlTGVuZ3RoOlosYnVmZmVyUmVnaW9uczpYLGJ1ZmZlcnM6Sn09dGhpcy5fY29tcHJlc3NCb2R5QnVmZmVycyhKKSk7cmV0dXJue2J5dGVMZW5ndGg6Wixub2RlczpRLGJ1ZmZlclJlZ2lvbnM6WCxidWZmZXJzOkosdmFyaWFkaWNCdWZmZXJDb3VudHM6V319X2NvbXByZXNzQm9keUJ1ZmZlcnMoJCl7bGV0IFo9T1cuZ2V0KHRoaXMuX2NvbXByZXNzaW9uLnR5cGUpO2lmKCEoWj09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOlouZW5jb2RlKXx8dHlwZW9mIFouZW5jb2RlIT09ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihgQ29kZWMgZm9yIGNvbXByZXNzaW9uIHR5cGUgIiR7Z1pbdGhpcy5fY29tcHJlc3Npb24udHlwZV19IiBoYXMgaW52YWxpZCBlbmNvZGUgbWV0aG9kYCk7bGV0IFE9MCxYPVtdLEo9W107Zm9yKGxldCBZIG9mICQpe2xldCBHPSQwKFkpO2lmKEcubGVuZ3RoPT09MCl7WC5wdXNoKG5ldyBVaW50OEFycmF5KDApLG5ldyBVaW50OEFycmF5KDApKSxKLnB1c2gobmV3IHgkKFEsMCkpO2NvbnRpbnVlfWxldCBIPVouZW5jb2RlKEcpLHo9SC5sZW5ndGg8Ry5sZW5ndGgscT16P0g6RyxQPXo/cS5sZW5ndGg6U0csVT1uZXcgVVoobmV3IFVpbnQ4QXJyYXkoZFkpKTtVLndyaXRlSW50NjQoMCxCaWdJbnQoUCkpLFgucHVzaChVLmJ5dGVzKCksbmV3IFVpbnQ4QXJyYXkocSkpO2xldCBNPShRKzcmLTgpLVE7USs9TTtsZXQgTD1kWStxLmxlbmd0aDtKLnB1c2gobmV3IHgkKFEsTCkpLFErPUx9bGV0IFc9KFErNyYtOCktUTtyZXR1cm4gUSs9Vyx7Ynl0ZUxlbmd0aDpRLGJ1ZmZlclJlZ2lvbnM6SixidWZmZXJzOlh9fV93cml0ZURpY3Rpb25hcnlCYXRjaCgkLFosUT0hMSl7bGV0e2J5dGVMZW5ndGg6WCxub2RlczpKLGJ1ZmZlclJlZ2lvbnM6VyxidWZmZXJzOlksdmFyaWFkaWNCdWZmZXJDb3VudHM6R309dGhpcy5fYXNzZW1ibGVSZWNvcmRCYXRjaChuZXcgcihbJF0pKSxIPW5ldyBhJCgkLmxlbmd0aCxKLFcsdGhpcy5fY29tcHJlc3Npb24sRyksej1uZXcgeVooSCxaLFEpLHE9S1ouZnJvbSh6LFgpO3JldHVybiB0aGlzLl93cml0ZU1lc3NhZ2UocSkuX3dyaXRlQm9keUJ1ZmZlcnMoWSl9X3dyaXRlQm9keUJ1ZmZlcnMoJCl7bGV0IFo9dGhpcy5fY29tcHJlc3Npb24hPW51bGw/MjoxLFE9QXJyYXkoWik7Zm9yKGxldCBYPTA7WDwkLmxlbmd0aDtYKz1aKXtsZXQgSj0wO2ZvcihsZXQgWT0tMTsrK1k8WjspUVtZXT0kW1grWV0sSis9UVtZXS5ieXRlTGVuZ3RoO2lmKEo9PT0wKWNvbnRpbnVlO2ZvcihsZXQgWSBvZiBRKXRoaXMuX3dyaXRlKFkpO2xldCBXPShKKzcmLTgpLUo7aWYoVz4wKXRoaXMuX3dyaXRlUGFkZGluZyhXKX1yZXR1cm4gdGhpc31fd3JpdGVEaWN0aW9uYXJpZXMoJCl7dmFyIFosUTtmb3IobGV0W1gsSl1vZiAkLmRpY3Rpb25hcmllcyl7bGV0IFc9KFo9Sj09PW51bGx8fEo9PT12b2lkIDA/dm9pZCAwOkouZGF0YSkhPT1udWxsJiZaIT09dm9pZCAwP1o6W10sWT10aGlzLl9zZWVuRGljdGlvbmFyaWVzLmdldChYKSxHPShRPXRoaXMuX2RpY3Rpb25hcnlEZWx0YU9mZnNldHMuZ2V0KFgpKSE9PW51bGwmJlEhPT12b2lkIDA/UTowO2lmKCFZfHxZLmRhdGFbMF0hPT1XWzBdKWZvcihsZXRbSCx6XW9mIFcuZW50cmllcygpKXRoaXMuX3dyaXRlRGljdGlvbmFyeUJhdGNoKHosWCxIPjApO2Vsc2UgaWYoRzxXLmxlbmd0aClmb3IobGV0IEggb2YgVy5zbGljZShHKSl0aGlzLl93cml0ZURpY3Rpb25hcnlCYXRjaChILFgsITApO3RoaXMuX3NlZW5EaWN0aW9uYXJpZXMuc2V0KFgsSiksdGhpcy5fZGljdGlvbmFyeURlbHRhT2Zmc2V0cy5zZXQoWCxXLmxlbmd0aCl9cmV0dXJuIHRoaXN9fTtYUT1jbGFzcyBYUSBleHRlbmRzIHo2e3N0YXRpYyB3cml0ZUFsbCgkLFope2xldCBRPW5ldyBYUShaKTtpZihOOCgkKSlyZXR1cm4gJC50aGVuKChYKT0+US53cml0ZUFsbChYKSk7ZWxzZSBpZihmUSgkKSlyZXR1cm4gSkgoUSwkKTtyZXR1cm4gWEgoUSwkKX19O0NXPWNsYXNzIENXIGV4dGVuZHMgejZ7c3RhdGljIHdyaXRlQWxsKCQsWil7bGV0IFE9bmV3IENXKFopO2lmKE44KCQpKXJldHVybiAkLnRoZW4oKFgpPT5RLndyaXRlQWxsKFgpKTtlbHNlIGlmKGZRKCQpKXJldHVybiBKSChRLCQpO3JldHVybiBYSChRLCQpfWNvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMuX2F1dG9EZXN0cm95PSEwLHRoaXMuX3dyaXRlTGVnYWN5SXBjRm9ybWF0PSExfV93cml0ZVNjaGVtYSgkKXtyZXR1cm4gdGhpcy5fd3JpdGVNYWdpYygpLl93cml0ZVBhZGRpbmcoMil9X3dyaXRlRGljdGlvbmFyeUJhdGNoKCQsWixRPSExKXtpZighUSYmdGhpcy5fc2VlbkRpY3Rpb25hcmllcy5oYXMoWikpdGhyb3cgRXJyb3IoIlRoZSBBcnJvdyBGaWxlIGZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0IHJlcGxhY2VtZW50IGRpY3Rpb25hcmllcy4gIik7cmV0dXJuIHN1cGVyLl93cml0ZURpY3Rpb25hcnlCYXRjaCgkLFosUSl9X3dyaXRlRm9vdGVyKCQpe2xldCBaPU5KLmVuY29kZShuZXcgTkooJCxpMC5WNSx0aGlzLl9yZWNvcmRCYXRjaEJsb2Nrcyx0aGlzLl9kaWN0aW9uYXJ5QmxvY2tzKSk7cmV0dXJuIHN1cGVyLl93cml0ZUZvb3RlcigkKS5fd3JpdGUoWikuX3dyaXRlKEludDMyQXJyYXkub2YoWi5ieXRlTGVuZ3RoKSkuX3dyaXRlTWFnaWMoKX19fSk7ZnVuY3Rpb24gVEYoJCxaKXtpZihmUSgkKSlyZXR1cm4gY0MoJCxaKTtpZihVOCgkKSlyZXR1cm4gcEMoJCxaKTt0aHJvdyBFcnJvcigidG9ET01TdHJlYW0oKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGFuIEl0ZXJhYmxlIG9yIEFzeW5jSXRlcmFibGUiKX1mdW5jdGlvbiBwQygkLFope2xldCBRPW51bGwsWD0oWj09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOloudHlwZSk9PT0iYnl0ZXMifHwhMSxKPShaPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi5oaWdoV2F0ZXJNYXJrKXx8TWF0aC5wb3coMiwyNCk7cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWikse3N0YXJ0KFkpe1coWSxRfHwoUT0kW1N5bWJvbC5pdGVyYXRvcl0oKSkpfSxwdWxsKFkpe1E/VyhZLFEpOlkuY2xvc2UoKX0sY2FuY2VsKCl7KFE9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLnJldHVybikmJlEucmV0dXJuKCksUT1udWxsfX0pLE9iamVjdC5hc3NpZ24oe2hpZ2hXYXRlck1hcms6WD9KOnZvaWQgMH0sWikpO2Z1bmN0aW9uIFcoWSxHKXtsZXQgSCx6PW51bGwscT1ZLmRlc2lyZWRTaXplfHxudWxsO3doaWxlKCEoej1HLm5leHQoWD9xOm51bGwpKS5kb25lKXtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoei52YWx1ZSkmJihIPSQwKHoudmFsdWUpKSlxIT1udWxsJiZYJiYocT1xLUguYnl0ZUxlbmd0aCsxKSx6LnZhbHVlPUg7aWYoWS5lbnF1ZXVlKHoudmFsdWUpLHEhPW51bGwmJi0tcTw9MClyZXR1cm59WS5jbG9zZSgpfX1mdW5jdGlvbiBjQygkLFope2xldCBRPW51bGwsWD0oWj09PW51bGx8fFo9PT12b2lkIDA/dm9pZCAwOloudHlwZSk9PT0iYnl0ZXMifHwhMSxKPShaPT09bnVsbHx8Wj09PXZvaWQgMD92b2lkIDA6Wi5oaWdoV2F0ZXJNYXJrKXx8TWF0aC5wb3coMiwyNCk7cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sWikse3N0YXJ0KFkpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBXKFksUXx8KFE9JFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSkpfSl9LHB1bGwoWSl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1E/eWllbGQgVyhZLFEpOlkuY2xvc2UoKX0pfSxjYW5jZWwoKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7KFE9PT1udWxsfHxRPT09dm9pZCAwP3ZvaWQgMDpRLnJldHVybikmJih5aWVsZCBRLnJldHVybigpKSxRPW51bGx9KX19KSxPYmplY3QuYXNzaWduKHtoaWdoV2F0ZXJNYXJrOlg/Sjp2b2lkIDB9LFopKTtmdW5jdGlvbiBXKFksRyl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBILHo9bnVsbCxxPVkuZGVzaXJlZFNpemV8fG51bGw7d2hpbGUoISh6PXlpZWxkIEcubmV4dChYP3E6bnVsbCkpLmRvbmUpe2lmKEFycmF5QnVmZmVyLmlzVmlldyh6LnZhbHVlKSYmKEg9JDAoei52YWx1ZSkpKXEhPW51bGwmJlgmJihxPXEtSC5ieXRlTGVuZ3RoKzEpLHoudmFsdWU9SDtpZihZLmVucXVldWUoei52YWx1ZSkscSE9bnVsbCYmLS1xPD0wKXJldHVybn1ZLmNsb3NlKCl9KX19dmFyIGdGPU8oKCk9PntNUSgpO3MkKCl9KTtmdW5jdGlvbiB5RigkKXtyZXR1cm4gbmV3IGhGKCQpfWNsYXNzIGhGe2NvbnN0cnVjdG9yKCQpe3RoaXMuX251bUNodW5rcz0wLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX2J1ZmZlcmVkU2l6ZT0wO2xldHtbInJlYWRhYmxlU3RyYXRlZ3kiXTpaLFsid3JpdGFibGVTdHJhdGVneSJdOlEsWyJxdWV1ZWluZ1N0cmF0ZWd5Il06WD0iY291bnQifT0kLEo9TzkoJCxbInJlYWRhYmxlU3RyYXRlZ3kiLCJ3cml0YWJsZVN0cmF0ZWd5IiwicXVldWVpbmdTdHJhdGVneSJdKTt0aGlzLl9jb250cm9sbGVyPW51bGwsdGhpcy5fYnVpbGRlcj1CWChKKSx0aGlzLl9nZXRTaXplPVghPT0iYnl0ZXMiP3hGOnZGO2xldHtbImhpZ2hXYXRlck1hcmsiXTpXPVg9PT0iYnl0ZXMiP01hdGgucG93KDIsMTQpOjEwMDB9PU9iamVjdC5hc3NpZ24oe30sWikse1siaGlnaFdhdGVyTWFyayJdOlk9WD09PSJieXRlcyI/TWF0aC5wb3coMiwxNCk6MTAwMH09T2JqZWN0LmFzc2lnbih7fSxRKTt0aGlzLnJlYWRhYmxlPW5ldyBSZWFkYWJsZVN0cmVhbSh7WyJjYW5jZWwiXTooKT0+e3RoaXMuX2J1aWxkZXIuY2xlYXIoKX0sWyJwdWxsIl06KEcpPT57dGhpcy5fbWF5YmVGbHVzaCh0aGlzLl9idWlsZGVyLHRoaXMuX2NvbnRyb2xsZXI9Ryl9LFsic3RhcnQiXTooRyk9Pnt0aGlzLl9tYXliZUZsdXNoKHRoaXMuX2J1aWxkZXIsdGhpcy5fY29udHJvbGxlcj1HKX19LHtoaWdoV2F0ZXJNYXJrOlcsc2l6ZTpYIT09ImJ5dGVzIj94Rjp2Rn0pLHRoaXMud3JpdGFibGU9bmV3IFdyaXRhYmxlU3RyZWFtKHtbImFib3J0Il06KCk9Pnt0aGlzLl9idWlsZGVyLmNsZWFyKCl9LFsid3JpdGUiXTooKT0+e3RoaXMuX21heWJlRmx1c2godGhpcy5fYnVpbGRlcix0aGlzLl9jb250cm9sbGVyKX0sWyJjbG9zZSJdOigpPT57dGhpcy5fbWF5YmVGbHVzaCh0aGlzLl9idWlsZGVyLmZpbmlzaCgpLHRoaXMuX2NvbnRyb2xsZXIpfX0se2hpZ2hXYXRlck1hcms6WSxzaXplOihHKT0+dGhpcy5fd3JpdGVWYWx1ZUFuZFJldHVybkNodW5rU2l6ZShHKX0pfV93cml0ZVZhbHVlQW5kUmV0dXJuQ2h1bmtTaXplKCQpe2xldCBaPXRoaXMuX2J1ZmZlcmVkU2l6ZTtyZXR1cm4gdGhpcy5fYnVmZmVyZWRTaXplPXRoaXMuX2dldFNpemUodGhpcy5fYnVpbGRlci5hcHBlbmQoJCkpLHRoaXMuX2J1ZmZlcmVkU2l6ZS1afV9tYXliZUZsdXNoKCQsWil7aWYoWj09bnVsbClyZXR1cm47aWYodGhpcy5fYnVmZmVyZWRTaXplPj1aLmRlc2lyZWRTaXplKSsrdGhpcy5fbnVtQ2h1bmtzJiZ0aGlzLl9lbnF1ZXVlKFosJC50b1ZlY3RvcigpKTtpZigkLmZpbmlzaGVkKXtpZigkLmxlbmd0aD4wfHx0aGlzLl9udW1DaHVua3M9PT0wKSsrdGhpcy5fbnVtQ2h1bmtzJiZ0aGlzLl9lbnF1ZXVlKFosJC50b1ZlY3RvcigpKTtpZighdGhpcy5fZmluaXNoZWQmJih0aGlzLl9maW5pc2hlZD0hMCkpdGhpcy5fZW5xdWV1ZShaLG51bGwpfX1fZW5xdWV1ZSgkLFope3RoaXMuX2J1ZmZlcmVkU2l6ZT0wLHRoaXMuX2NvbnRyb2xsZXI9bnVsbCxaPT1udWxsPyQuY2xvc2UoKTokLmVucXVldWUoWil9fXZhciB4Rj0oJCk9Pnt2YXIgWjtyZXR1cm4oWj0kPT09bnVsbHx8JD09PXZvaWQgMD92b2lkIDA6JC5sZW5ndGgpIT09bnVsbCYmWiE9PXZvaWQgMD9aOjB9LHZGPSgkKT0+e3ZhciBaO3JldHVybihaPSQ9PT1udWxsfHwkPT09dm9pZCAwP3ZvaWQgMDokLmJ5dGVMZW5ndGgpIT09bnVsbCYmWiE9PXZvaWQgMD9aOjB9O3ZhciBiRj1PKCgpPT57TVEoKTt0NCgpfSk7ZnVuY3Rpb24gX0coJCxaKXtsZXQgUT1uZXcgd1gsWD1udWxsLEo9bmV3IFJlYWRhYmxlU3RyZWFtKHtjYW5jZWwoKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgUS5jbG9zZSgpfSl9LHN0YXJ0KEcpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBZKEcsWHx8KFg9eWllbGQgVygpKSl9KX0scHVsbChHKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7WD95aWVsZCBZKEcsWCk6Ry5jbG9zZSgpfSl9fSk7cmV0dXJue3dyaXRhYmxlOm5ldyBXcml0YWJsZVN0cmVhbShRLE9iamVjdC5hc3NpZ24oe2hpZ2hXYXRlck1hcms6TWF0aC5wb3coMiwxNCl9LCQpKSxyZWFkYWJsZTpKfTtmdW5jdGlvbiBXKCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCh5aWVsZCB6JC5mcm9tKFEpKS5vcGVuKFopfSl9ZnVuY3Rpb24gWShHLEgpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgej1HLmRlc2lyZWRTaXplLHE9bnVsbDt3aGlsZSghKHE9eWllbGQgSC5uZXh0KCkpLmRvbmUpaWYoRy5lbnF1ZXVlKHEudmFsdWUpLHohPW51bGwmJi0tejw9MClyZXR1cm47Ry5jbG9zZSgpfSl9fXZhciBtRj1PKCgpPT57TVEoKTtKNigpO2tHKCl9KTtmdW5jdGlvbiBURygkLFope2xldCBRPW5ldyB0aGlzKCQpLFg9bmV3IFo4KFEpLEo9bmV3IFJlYWRhYmxlU3RyZWFtKHtjYW5jZWwoKXtyZXR1cm4gbih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgWC5jYW5jZWwoKX0pfSxwdWxsKFkpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBXKFkpfSl9LHN0YXJ0KFkpe3JldHVybiBuKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBXKFkpfSl9fSxPYmplY3QuYXNzaWduKHtoaWdoV2F0ZXJNYXJrOk1hdGgucG93KDIsMTQpfSxaKSk7cmV0dXJue3dyaXRhYmxlOm5ldyBXcml0YWJsZVN0cmVhbShRLCQpLHJlYWRhYmxlOkp9O2Z1bmN0aW9uIFcoWSl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBHPW51bGwsSD1ZLmRlc2lyZWRTaXplO3doaWxlKEc9eWllbGQgWC5yZWFkKEh8fG51bGwpKWlmKFkuZW5xdWV1ZShHKSxIIT1udWxsJiYoSC09Ry5ieXRlTGVuZ3RoKTw9MClyZXR1cm47WS5jbG9zZSgpfSl9fXZhciBmRj1PKCgpPT57TVEoKTtKNigpfSk7dmFyIFlIPXt9O1A4KFlILHtpc0Fycm93VmVjdG9yOigpPT5kRixpc0Fycm93VGFibGU6KCk9Pm9GLGlzQXJyb3dTY2hlbWE6KCk9PnVGLGlzQXJyb3dSZWNvcmRCYXRjaDooKT0+bkYsaXNBcnJvd0ZpZWxkOigpPT5wRixpc0Fycm93RGF0YVR5cGU6KCk9PmNGLGlzQXJyb3dEYXRhOigpPT5sRn0pO2Z1bmN0aW9uIHVGKCQpe3JldHVybiBRMC5pc1NjaGVtYSgkKX1mdW5jdGlvbiBwRigkKXtyZXR1cm4gYS5pc0ZpZWxkKCQpfWZ1bmN0aW9uIGNGKCQpe3JldHVybiBrLmlzRGF0YVR5cGUoJCl9ZnVuY3Rpb24gbEYoJCl7cmV0dXJuIEEwLmlzRGF0YSgkKX1mdW5jdGlvbiBkRigkKXtyZXR1cm4gci5pc1ZlY3RvcigkKX1mdW5jdGlvbiBuRigkKXtyZXR1cm4gRDAuaXNSZWNvcmRCYXRjaCgkKX1mdW5jdGlvbiBvRigkKXtyZXR1cm4gdiQuaXNUYWJsZSgkKX12YXIgc0Y9TygoKT0+e3ZaKCk7SCQoKTskOCgpO1pRKCk7REooKTtqRygpfSk7dmFyIEdqO3ZhciB0Rj1PKCgpPT57dSQoKTskOCgpO0gkKCk7dlooKTt0NCgpO2tHKCk7V0goKTtESigpO2RLKCk7TjIoKTtHVygpO1NZKCk7cyQoKTtXVygpO3NGKCk7Y1koKTtHaj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGxLKSxGMiksSjIpLG5LKSxxSyksWDIpLGZLKSxMMiksWUgpLHtjb21wYXJlU2NoZW1hczpHNixjb21wYXJlRmllbGRzOkhGLGNvbXBhcmVUeXBlczpER30pfSk7dmFyIEpRPU8oKCk9PntOWSgpO1IkKCk7a0coKTtXSCgpO2dGKCk7YkYoKTttRigpO2ZGKCk7dEYoKTtOWi50b0RPTVN0cmVhbT1URjtNJC50aHJvdWdoRE9NPXlGO3okLnRocm91Z2hET009X0c7SDYudGhyb3VnaERPTT1fRztfWC50aHJvdWdoRE9NPV9HO3o2LnRocm91Z2hET009VEc7Q1cudGhyb3VnaERPTT1URztYUS50aHJvdWdoRE9NPVRHfSk7ZnVuY3Rpb24gS2ooKXtsZXQgJD1pbXBvcnQubWV0YS5yZXF1aXJlPz9nbG9iYWxUaGlzLnJlcXVpcmU/P251bGw7aWYoISQpdGhyb3cgRXJyb3IoIkZkU2luayByZXF1aXJlcyBOb2RlLmpzIG9yIEJ1biAobm9kZTpmcy53cml0ZVN5bmMpLiBGb3Igb3RoZXIgcnVudGltZXMsIHN1cHBseSBhIGN1c3RvbSBBY2Nlc3NMb2dTaW5rIHRoYXQgd3JhcHMgY29uc29sZS5sb2cgb3IgeW91ciBsb2dnZXIuIik7cmV0dXJuICQoIm5vZGU6ZnMiKS53cml0ZVN5bmN9Y2xhc3MgS0h7ZmQ7X3dyaXRlU3luYz1LaigpO2NvbnN0cnVjdG9yKCQpe3RoaXMuZmQ9JH13cml0ZSgkKXtsZXQgWj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoJCksUT0wO3doaWxlKFE8Wi5sZW5ndGgpe2xldCBYPXRoaXMuX3dyaXRlU3luYyh0aGlzLmZkLFosUSxaLmxlbmd0aC1RKTtpZihYPD0wKXRocm93IEVycm9yKGBhY2Nlc3MtbG9nIHdyaXRlU3luYyByZXR1cm5lZCAke1h9YCk7USs9WH19fWZ1bmN0aW9uIEhqKCl7bGV0ICQ9bmV3IERhdGUsWj0kLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIiksUT0oJC5nZXRVVENNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLFg9JC5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksSj0kLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksVz0kLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxZPSQuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLEc9JC5nZXRVVENNaWxsaXNlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDMsIjAiKTtyZXR1cm5gJHtafS0ke1F9LSR7WH1UJHtKfToke1d9OiR7WX0uJHtHfVpgfWZ1bmN0aW9uIHpqKCQpe3JldHVybiBCdWZmZXIuZnJvbSgkKS50b1N0cmluZygiYmFzZTY0Iil9ZnVuY3Rpb24gcWooJCl7cmV0dXJuIE1hdGgucm91bmQoJCoxMDApLzEwMH1mdW5jdGlvbiBHSCgkKXtyZXR1cm4gUGouZW5jb2RlKCQpLmJ5dGVMZW5ndGh9ZnVuY3Rpb24gekgoJCl7bGV0IFo9e307Zm9yKGxldFtRLFhdb2YgT2JqZWN0LmVudHJpZXMoJCkpWltRXT1Gai50ZXN0KFEpP0hIOlg7cmV0dXJuIFp9ZnVuY3Rpb24gZUYoJCl7cmV0dXJuey4uLiR9fWZ1bmN0aW9uIHFIKCl7aWYoalc9PT1udWxsKXtqVz0hMTt0cnl7bGV0ICQ9aW1wb3J0Lm1ldGEucmVxdWlyZT8/Z2xvYmFsVGhpcy5yZXF1aXJlPz9udWxsO2lmKCQpalc9JChNaik/LnRyYWNlPz8hMX1jYXRjaHtqVz0hMX19aWYoIWpXKXJldHVybiBudWxsO3RyeXtsZXQgJD1qVy5nZXRBY3RpdmVTcGFuKCk/LnNwYW5Db250ZXh0KCk7aWYoISQpcmV0dXJuIG51bGw7bGV0IFo9U3RyaW5nKCQudHJhY2VJZD8/IiIpLFE9U3RyaW5nKCQuc3BhbklkPz8iIik7aWYoIU5qLnRlc3QoWil8fCFVai50ZXN0KFEpKXJldHVybiBudWxsO2lmKC9eMCskLy50ZXN0KFopfHwvXjArJC8udGVzdChRKSlyZXR1cm4gbnVsbDtyZXR1cm57dHJhY2VJZDpaLHNwYW5JZDpRfX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTGooJCl7bGV0IFo9MjE2NjEzNjI2MTtmb3IobGV0IFE9MDtRPCQubGVuZ3RoO1ErKylaXj0kLmNoYXJDb2RlQXQoUSkmMjU1LFo9TWF0aC5pbXVsKFosMTY3Nzc2MTkpPj4+MDtyZXR1cm4gWj4+PjB9Y2xhc3MgZ0d7cmF0ZTt0aHJlc2hvbGQ7Y29uc3RydWN0b3IoJCl7aWYodGhpcy5yYXRlPSQsISh0eXBlb2YgJD09PSJudW1iZXIiJiZOdW1iZXIuaXNGaW5pdGUoJCkmJiQ+PTAmJiQ8PTEpKXRocm93IFJhbmdlRXJyb3IoYGFjY2Vzcy1sb2cgc2FtcGxlIHJhdGUgbXVzdCBiZSBiZXR3ZWVuIDAuMCBhbmQgMS4wLCBnb3QgJHskfWApO3RoaXMudGhyZXNob2xkPSQqNDI5NDk2NzI5NX1rZWVwKCQsWil7aWYodGhpcy5yYXRlPj0xKXJldHVybiEwO2lmKCQuc3RhdHVzPT09ImVycm9yIilyZXR1cm4hMDtpZihMaihaKT50aGlzLnRocmVzaG9sZClyZXR1cm4hMTtyZXR1cm4gJC5zYW1wbGVfcmF0ZT10aGlzLnJhdGUsITB9fWNsYXNzICROe2NhcGFjaXR5O3dyaXRlUmVjb3JkO3F1ZXVlPVtdO2Ryb3BwZWQ9MDtzY2hlZHVsZWQ9ITE7Y29uc3RydWN0b3IoJCxaKXt0aGlzLmNhcGFjaXR5PSQsdGhpcy53cml0ZVJlY29yZD1afWVucXVldWUoJCl7aWYodGhpcy5xdWV1ZS5sZW5ndGg+PXRoaXMuY2FwYWNpdHkpe3RoaXMuZHJvcHBlZCsrO3JldHVybn1pZih0aGlzLmRyb3BwZWQpJC5kcm9wcGVkX3JlY29yZHM9dGhpcy5kcm9wcGVkLHRoaXMuZHJvcHBlZD0wO2lmKHRoaXMucXVldWUucHVzaCgkKSwhdGhpcy5zY2hlZHVsZWQpdGhpcy5zY2hlZHVsZWQ9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuc2NoZWR1bGVkPSExLHRoaXMuZmx1c2goKX0sMCl9Zmx1c2goKXt3aGlsZSh0aGlzLnF1ZXVlLmxlbmd0aD4wKXtsZXQgJD10aGlzLnF1ZXVlLnNoaWZ0KCk7dGhpcy53cml0ZVJlY29yZCgkKX19Z2V0IGRyb3BwZWRDb3VudCgpe3JldHVybiB0aGlzLmRyb3BwZWR9fWNsYXNzIFBIe3Npbms7c2VydmVyVmVyc2lvbjtsZXZlbDttYXhSZWNvcmRCeXRlcztzYW1wbGVyO3RyYWNlQ29udGV4dDtyZWRhY3RvcjtxdWV1ZTtjb25zdHJ1Y3RvcigkLFo9e30pe3RoaXMuc2luaz0kO2xldCBRPXR5cGVvZiBaPT09InN0cmluZyI/e3NlcnZlclZlcnNpb246Wn06Wjt0aGlzLnNlcnZlclZlcnNpb249US5zZXJ2ZXJWZXJzaW9uPz8iIix0aGlzLmxldmVsPVEubGV2ZWw/PyJJTkZPIix0aGlzLm1heFJlY29yZEJ5dGVzPVEubWF4UmVjb3JkQnl0ZXM/PzEwNDg1NzYsdGhpcy5zYW1wbGVyPW5ldyBnRyhRLnNhbXBsZVJhdGU/PzEpLHRoaXMudHJhY2VDb250ZXh0PVEudHJhY2VDb250ZXh0Pz9xSCx0aGlzLnJlZGFjdG9yPVEucmVkYWN0b3I/P3pILHRoaXMucXVldWU9US5hc3luYz9uZXcgJE4oUS5xdWV1ZVNpemU/PzFlNCwoWCk9PnRoaXMud3JpdGUoWCkpOm51bGx9Zmx1c2goKXt0aGlzLnF1ZXVlPy5mbHVzaCgpfWdldCBkcm9wcGVkUmVjb3Jkcygpe3JldHVybiB0aGlzLnF1ZXVlPy5kcm9wcGVkQ291bnQ/PzB9b25EaXNwYXRjaFN0YXJ0KCQpe3JldHVybntzdGFydE5zOnByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpfX1vbkRpc3BhdGNoRW5kKCQsWixRLFgpe2xldCBKPSQsVz1KP3FqKE51bWJlcihwcm9jZXNzLmhydGltZS5iaWdpbnQoKS1KLnN0YXJ0TnMpLzFlNik6MCxZPVg/ImVycm9yIjoib2siLEc9WD9YLnR5cGU/P1guY29uc3RydWN0b3IubmFtZToiIixIPVg/Lm1lc3NhZ2U/PyIiLHo9Wi5wcm90b2NvbD8/IiIscT17dGltZXN0YW1wOkhqKCksbGV2ZWw6IklORk8iLGxvZ2dlcjoidmdpX3JwYy5hY2Nlc3MiLG1lc3NhZ2U6YCR7en0uJHtaLm1ldGhvZH0gJHtZfWAsc2VydmVyX2lkOlouc2VydmVySWQscHJvdG9jb2w6eixwcm90b2NvbF9oYXNoOloucHJvdG9jb2xIYXNoPz8iIixtZXRob2Q6Wi5tZXRob2QsbWV0aG9kX3R5cGU6Wi5tZXRob2RUeXBlLHByaW5jaXBhbDpaLnByaW5jaXBhbD8/IiIsYXV0aF9kb21haW46Wi5hdXRoRG9tYWluPz8iIixhdXRoZW50aWNhdGVkOlouYXV0aGVudGljYXRlZD8/ITEscmVtb3RlX2FkZHI6Wi5yZW1vdGVBZGRyPz8iIixkdXJhdGlvbl9tczpXLHN0YXR1czpZLGVycm9yX3R5cGU6R307aWYoSClxLmVycm9yX21lc3NhZ2U9SDtpZih0aGlzLnNlcnZlclZlcnNpb24pcS5zZXJ2ZXJfdmVyc2lvbj10aGlzLnNlcnZlclZlcnNpb247aWYoWi5wcm90b2NvbFZlcnNpb24pcS5wcm90b2NvbF92ZXJzaW9uPVoucHJvdG9jb2xWZXJzaW9uO2lmKFoucmVxdWVzdElkKXEucmVxdWVzdF9pZD1aLnJlcXVlc3RJZDtpZihaLmh0dHBTdGF0dXMhPT12b2lkIDApcS5odHRwX3N0YXR1cz1aLmh0dHBTdGF0dXM7bGV0IFA9dGhpcy5jdXJyZW50VHJhY2UoKTtpZihQKXEudHJhY2VfaWQ9UC50cmFjZUlkLHEuc3Bhbl9pZD1QLnNwYW5JZDtpZihaLnJlcXVlc3REYXRhJiZaLnJlcXVlc3REYXRhLmxlbmd0aD4wKXtsZXQgTT16aihaLnJlcXVlc3REYXRhKTtpZih0aGlzLmxldmVsPT09IkRFQlVHIilxLnJlcXVlc3RfZGF0YT1NO2Vsc2UgcS5vcmlnaW5hbF9yZXF1ZXN0X2J5dGVzPU0ubGVuZ3RoLHEudHJ1bmNhdGVkPSJwYXlsb2FkX29taXR0ZWQifWlmKFoubWV0aG9kVHlwZT09PSJzdHJlYW0iKXEuc3RyZWFtX2lkPVouc3RyZWFtSWQ/PyIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7aWYoWi5jYW5jZWxsZWQpcS5jYW5jZWxsZWQ9ITA7aWYoWi5jbGFpbXMmJk9iamVjdC5rZXlzKFouY2xhaW1zKS5sZW5ndGg+MCl7bGV0IE09dGhpcy5yZWRhY3QoWi5jbGFpbXMpO2lmKE9iamVjdC5rZXlzKE0pLmxlbmd0aD4wKXEuY2xhaW1zPU19aWYoWi5yZXF1ZXN0Qnl0ZXMhPT12b2lkIDApcS5yZXF1ZXN0X2J5dGVzPVoucmVxdWVzdEJ5dGVzO2lmKFouZXh0ZXJuYWxpemVkQnl0ZXMpcS5leHRlcm5hbGl6ZWRfYnl0ZXM9Wi5leHRlcm5hbGl6ZWRCeXRlcztpZihRLmlucHV0QmF0Y2hlcytRLm91dHB1dEJhdGNoZXMrUS5pbnB1dFJvd3MrUS5vdXRwdXRSb3dzK1EuaW5wdXRCeXRlcytRLm91dHB1dEJ5dGVzIT09MClxLmlucHV0X2JhdGNoZXM9US5pbnB1dEJhdGNoZXMscS5vdXRwdXRfYmF0Y2hlcz1RLm91dHB1dEJhdGNoZXMscS5pbnB1dF9yb3dzPVEuaW5wdXRSb3dzLHEub3V0cHV0X3Jvd3M9US5vdXRwdXRSb3dzLHEuaW5wdXRfYnl0ZXM9US5pbnB1dEJ5dGVzLHEub3V0cHV0X2J5dGVzPVEub3V0cHV0Qnl0ZXM7bGV0IFU9Wi5zdHJlYW1JZHx8Wi5yZXF1ZXN0SWR8fGAke3EudGltZXN0YW1wfToke1oubWV0aG9kfWA7aWYoWi5kZWZlcnJhbCl7Wi5kZWZlcnJhbC5kZWZlcigoTSk9PntpZihNIT09dm9pZCAwKXEucmVzcG9uc2VfYnl0ZXM9TTt0aGlzLmVtaXQocSxVKX0pO3JldHVybn10aGlzLmVtaXQocSxVKX1yZWRhY3QoJCl7dHJ5e3JldHVybiB0aGlzLnJlZGFjdG9yKCQpfWNhdGNoKFope3JldHVybiBjb25zb2xlLndhcm4oInZnaS1ycGMgYWNjZXNzIGxvZzogY2xhaW0gcmVkYWN0b3IgdGhyZXc7IGRyb3BwaW5nIGNsYWltcyBmcm9tIHRoZSByZWNvcmQiLFopLHt9fX1jdXJyZW50VHJhY2UoKXt0cnl7cmV0dXJuIHRoaXMudHJhY2VDb250ZXh0KCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWVtaXQoJCxaKXtpZighdGhpcy5zYW1wbGVyLmtlZXAoJCxaKSlyZXR1cm47aWYodGhpcy5xdWV1ZSl7dGhpcy5xdWV1ZS5lbnF1ZXVlKCQpO3JldHVybn10aGlzLndyaXRlKCQpfXdyaXRlKCQpe3RyeXt0aGlzLnNpbmsud3JpdGUoYCR7dGhpcy5mb3JtYXQoJCl9CmApfWNhdGNoe319Zm9ybWF0KCQpe2xldCBaPUpTT04uc3RyaW5naWZ5KCQpO2lmKHRoaXMubWF4UmVjb3JkQnl0ZXM8PTB8fEdIKFopPD10aGlzLm1heFJlY29yZEJ5dGVzKXJldHVybiBaO2xldCBRPSQucmVxdWVzdF9kYXRhO2lmKHR5cGVvZiBRPT09InN0cmluZyIpe2lmKCQub3JpZ2luYWxfcmVxdWVzdF9ieXRlcz1RLmxlbmd0aCxkZWxldGUgJC5yZXF1ZXN0X2RhdGEsJC50cnVuY2F0ZWQ9ITAsWj1KU09OLnN0cmluZ2lmeSgkKSxHSChaKTw9dGhpcy5tYXhSZWNvcmRCeXRlcylyZXR1cm4gWn1pZigkLmNsYWltcyE9PXZvaWQgMCl7aWYoJC5jbGFpbXM9e30sJC50cnVuY2F0ZWQ9ITAsWj1KU09OLnN0cmluZ2lmeSgkKSxHSChaKTw9dGhpcy5tYXhSZWNvcmRCeXRlcylyZXR1cm4gWn1sZXQgWD17dGltZXN0YW1wOiQudGltZXN0YW1wLGxldmVsOiJJTkZPIixsb2dnZXI6InZnaV9ycGMuYWNjZXNzIixtZXNzYWdlOiJyZWNvcmRfdG9vX2xhcmdlIixzZXJ2ZXJfaWQ6JC5zZXJ2ZXJfaWQ/PyIiLHByb3RvY29sOiQucHJvdG9jb2w/PyIiLHByb3RvY29sX2hhc2g6JC5wcm90b2NvbF9oYXNoPz8iIixtZXRob2Q6JC5tZXRob2Q/PyIiLG1ldGhvZF90eXBlOiQubWV0aG9kX3R5cGU/PyJ1bmFyeSIscHJpbmNpcGFsOiQucHJpbmNpcGFsPz8iIixhdXRoX2RvbWFpbjokLmF1dGhfZG9tYWluPz8iIixhdXRoZW50aWNhdGVkOiQuYXV0aGVudGljYXRlZD8/ITEscmVtb3RlX2FkZHI6JC5yZW1vdGVfYWRkcj8/IiIsZHVyYXRpb25fbXM6JC5kdXJhdGlvbl9tcz8/MCxzdGF0dXM6JC5zdGF0dXM/PyJvayIsZXJyb3JfdHlwZTokLmVycm9yX3R5cGU/PyIiLHRydW5jYXRlZDoicmVjb3JkX3Rvb19sYXJnZSJ9O2lmKCQubWV0aG9kX3R5cGU9PT0ic3RyZWFtIiYmdHlwZW9mICQuc3RyZWFtX2lkPT09InN0cmluZyIpWC5zdHJlYW1faWQ9JC5zdHJlYW1faWQ7aWYoWC5zdGF0dXM9PT0iZXJyb3IiKVguZXJyb3JfbWVzc2FnZT10eXBlb2YgJC5lcnJvcl9tZXNzYWdlPT09InN0cmluZyImJiQuZXJyb3JfbWVzc2FnZT8kLmVycm9yX21lc3NhZ2U6InJlY29yZF90b29fbGFyZ2UiO2lmKHR5cGVvZiAkLmRyb3BwZWRfcmVjb3Jkcz09PSJudW1iZXIiKVguZHJvcHBlZF9yZWNvcmRzPSQuZHJvcHBlZF9yZWNvcmRzO2lmKHR5cGVvZiAkLnNhbXBsZV9yYXRlPT09Im51bWJlciIpWC5zYW1wbGVfcmF0ZT0kLnNhbXBsZV9yYXRlO3JldHVybiBKU09OLnN0cmluZ2lmeShYKX19dmFyIFBqLEhIPSJbcmVkYWN0ZWRdIixGaixOaixVaixNaj0iQG9wZW50ZWxlbWV0cnkvYXBpIixqVz1udWxsO3ZhciBaTj1PKCgpPT57UGo9bmV3IFRleHRFbmNvZGVyO0ZqPS9wYXNzd29yZHx0b2tlbnxzZWNyZXR8a2V5fGF1dGhvcml6YXRpb258ZW1haWx8cGhvbmV8YWRkcmVzc3xiaXJ0aGRhdGV8Z2VuZGVyfF5uYW1lJHxnaXZlbl9uYW1lfGZhbWlseV9uYW1lfG1pZGRsZV9uYW1lfG5pY2tuYW1lfHByZWZlcnJlZF91c2VybmFtZXxwaWN0dXJlfHByb2ZpbGV8d2Vic2l0ZS9pO05qPS9eWzAtOWEtZl17MzJ9JC8sVWo9L15bMC05YS1mXXsxNn0kL30pO2Z1bmN0aW9uIFZXKCQpe2xldCBaPUFqLmV4ZWMoJCk7aWYoIVopdGhyb3cgRXJyb3IoYEludmFsaWQgcHJvdG9jb2wgdmVyc2lvbiAnJHskfSc6IGV4cGVjdGVkIGNhbm9uaWNhbCBzZW12ZXIgTUFKT1IuTUlOT1IuUEFUQ0ggd2l0aCBub24tbmVnYXRpdmUgaW50ZWdlcnMgYW5kIG5vIGxlYWRpbmcgemVyb3MgKG5vIHByZXJlbGVhc2VzIG9yIGJ1aWxkIG1ldGFkYXRhKS5gKTtyZXR1cm5bTnVtYmVyKFpbMV0pLE51bWJlcihaWzJdKSxOdW1iZXIoWlszXSldfXZhciBiLGdYLHhHPSJtZXRob2Rfbm90X2ltcGxlbWVudGVkIix2Rz0ic2Vzc2lvbl9sb3N0Iix5Rz0ic2VydmVyX2RyYWluaW5nIixRTj0icHJvdG9jb2xfdmVyc2lvbl9taXNtYXRjaCIseFgsQWosWFgsQjgsc1k7dmFyIEhaPU8oKCk9PntiPWNsYXNzIGIgZXh0ZW5kcyBFcnJvcntlcnJvclR5cGU7ZXJyb3JNZXNzYWdlO3JlbW90ZVRyYWNlYmFjaztjb25zdHJ1Y3RvcigkLFosUSl7c3VwZXIoYCR7JH06ICR7Wn1gKTt0aGlzLmVycm9yVHlwZT0kLHRoaXMuZXJyb3JNZXNzYWdlPVosdGhpcy5yZW1vdGVUcmFjZWJhY2s9USx0aGlzLm5hbWU9IlJwY0Vycm9yIn19O2dYPWNsYXNzIGdYIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJWZXJzaW9uRXJyb3IifX07eFg9Y2xhc3MgeFggZXh0ZW5kcyBnWHtzdGF0aWMgZXJyb3JLaW5kPVFOO2Vycm9yS2luZD1RTjtjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLm5hbWU9IlByb3RvY29sVmVyc2lvbkVycm9yIn19O0FqPS9eKDB8WzEtOV1cZCopXC4oMHxbMS05XVxkKilcLigwfFsxLTldXGQqKSQvO1hYPWNsYXNzIFhYIGV4dGVuZHMgRXJyb3J7c3RhdGljIGVycm9yS2luZD14RztlcnJvcktpbmQ9eEc7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yIn19O0I4PWNsYXNzIEI4IGV4dGVuZHMgRXJyb3J7c3RhdGljIGVycm9yS2luZD12RztlcnJvcktpbmQ9dkc7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJTZXNzaW9uTG9zdEVycm9yIn19O3NZPWNsYXNzIHNZIGV4dGVuZHMgRXJyb3J7c3RhdGljIGVycm9yS2luZD15RztlcnJvcktpbmQ9eUc7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJTZXJ2ZXJEcmFpbmluZ0Vycm9yIn19fSk7Y2xhc3Mgelp7ZG9tYWluO2F1dGhlbnRpY2F0ZWQ7cHJpbmNpcGFsO2NsYWltcztjb25zdHJ1Y3RvcigkLFosUSxYPXt9KXt0aGlzLmRvbWFpbj0kLHRoaXMuYXV0aGVudGljYXRlZD1aLHRoaXMucHJpbmNpcGFsPVEsdGhpcy5jbGFpbXM9WH1zdGF0aWMgYW5vbnltb3VzKCl7cmV0dXJuIG5ldyB6WigiIiwhMSxudWxsKX1yZXF1aXJlQXV0aGVudGljYXRlZCgpe2lmKCF0aGlzLmF1dGhlbnRpY2F0ZWQpdGhyb3cgbmV3IGIoIkF1dGhlbnRpY2F0aW9uRXJyb3IiLCJBdXRoZW50aWNhdGlvbiByZXF1aXJlZCIsIiIpfX12YXIgcTY9TygoKT0+e0haKCl9KTt2YXIgSlg9NjcxMDg4NjQ7ZnVuY3Rpb24gRkgoJCl7aWYoIS9eWzEtOV1bMC05XSokLy50ZXN0KCQpKXRocm93IFR5cGVFcnJvcigibXVzdCBiZSBhIHBvc2l0aXZlIGRlY2ltYWwgaW50ZWdlciIpO2xldCBaPU51bWJlcigkKTtpZighTnVtYmVyLmlzU2FmZUludGVnZXIoWil8fFo+WE4pdGhyb3cgVHlwZUVycm9yKGBtdXN0IG5vdCBleGNlZWQgJHtYTn1gKTtyZXR1cm4gWn1mdW5jdGlvbiBiRygkLFope2lmKCQ9PT12b2lkIDApcmV0dXJuO2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcigkKXx8JDw9MCl0aHJvdyBUeXBlRXJyb3IoYCR7Wn0gbXVzdCBiZSBhIHBvc2l0aXZlIHNhZmUgaW50ZWdlcmApO3JldHVybiAkfWZ1bmN0aW9uIGlZKCQpe2xldCBaPUZIKCQpO2lmKFo8NjU1MzYpdGhyb3cgVHlwZUVycm9yKCJtdXN0IGJlIGF0IGxlYXN0IDY1NTM2Iik7cmV0dXJuIFp9ZnVuY3Rpb24gV1EoJCxaKXtsZXQgUT1iRygkLFopO2lmKFEhPT12b2lkIDAmJlE8NjU1MzYpdGhyb3cgVHlwZUVycm9yKGAke1p9IG11c3QgYmUgYXQgbGVhc3QgNjU1MzZgKTtyZXR1cm4gUX1mdW5jdGlvbiB0JCguLi4kKXtsZXQgWjtmb3IobGV0IFEgb2YgJClpZihRIT09dm9pZCAwJiZRPjAmJihaPT09dm9pZCAwfHxRPFopKVo9UTtyZXR1cm4gWn12YXIgYlo9IlZHSS1BY2NlcHQtTWF4LVJlc3BvbnNlLUJ5dGVzIixoRz0iVkdJLUFjY2VwdC1NYXgtUmVzcG9uc2UtQnl0ZXMtU3VwcG9ydCIsWE47dmFyIE9KPU8oKCk9PntYTj1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUn0pO2Z1bmN0aW9uIG1HKCQsWil7cmV0dXJuICQuZ2V0KFopPz8kLmdldChaLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIEdOKCQsWil7bGV0IFE9bUcoJCxaKTtpZihRPT1udWxsKXJldHVybltdO3JldHVybiBRLnNwbGl0KCIsIikubWFwKChYKT0+WC50cmltKCkpLmZpbHRlcigoWCk9PlgubGVuZ3RoPjApfWZ1bmN0aW9uIHJZKCQsWixRPSExKXtsZXQgWD0kLmdldChaKT8/JC5nZXQoWi50b0xvd2VyQ2FzZSgpKTtpZihYPT1udWxsKXJldHVybiBudWxsO3JldHVybiBRP2lZKFgpOkZIKFgpfWZ1bmN0aW9uIGZHKCQpe2xldCBRPSgkLmdldChKTik/PyQuZ2V0KEpOLnRvTG93ZXJDYXNlKCkpKT09PSJ0cnVlIixYPW51bGwsSj0kLmdldCgiQ2FjaGUtQ29udHJvbCIpPz8kLmdldCgiY2FjaGUtY29udHJvbCIpO2lmKEopZm9yKGxldCBHIG9mIEouc3BsaXQoIiwiKSl7bGV0IEg9Ry50cmltKCkudG9Mb3dlckNhc2UoKTtpZihILnN0YXJ0c1dpdGgoIm1heC1hZ2U9Iikpe2xldCB6PU51bWJlci5wYXJzZUZsb2F0KEguc2xpY2UoOCkpO2lmKE51bWJlci5pc0Zpbml0ZSh6KSlYPURhdGUubm93KCkreioxMDAwO2JyZWFrfX1sZXQgWT1tRygkLFlOKT09bnVsbD9bInpzdGQiXTpHTigkLFlOKS5tYXAoKEcpPT5HLnRvTG93ZXJDYXNlKCkpO3JldHVybnttYXhSZXF1ZXN0Qnl0ZXM6clkoJCxEaiksdXBsb2FkVXJsU3VwcG9ydDpRLG1heFVwbG9hZEJ5dGVzOnJZKCQsT2opLG1heFJlc3BvbnNlQnl0ZXM6clkoJCxDaiwhMCksYWNjZXB0TWF4UmVzcG9uc2VCeXRlc1N1cHBvcnQ6KCQuZ2V0KFdOKT8/JC5nZXQoV04udG9Mb3dlckNhc2UoKSkpPT09InRydWUiLG1heEV4dGVybmFsaXplZFJlc3BvbnNlQnl0ZXM6clkoJCxqaiwhMCksZXh0ZXJuYWxpemF0aW9uRW5hYmxlZDptRygkLFZqKT09PSJ0cnVlIixzdXBwb3J0ZWRFbmNvZGluZ3M6WSxzdGlja3lFbmFibGVkOm1HKCQsUmopPT09InRydWUiLHN0aWNreURlZmF1bHRUdGw6clkoJCxFaiksc3RpY2t5RWNob0hlYWRlcnM6R04oJCx3aiksY2FjaGVFeHBpcmVzQXQ6WH19ZnVuY3Rpb24gQ0ooJCl7bGV0IFo9ZkcoJCk7aWYoIVouYWNjZXB0TWF4UmVzcG9uc2VCeXRlc1N1cHBvcnQpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJTZXJ2ZXIgbXVzdCBhZHZlcnRpc2UgVkdJLUFjY2VwdC1NYXgtUmVzcG9uc2UtQnl0ZXMtU3VwcG9ydDogdHJ1ZSBvbiBldmVyeSBSUEMgcmVzcG9uc2UiLCIiKTtyZXR1cm4gWn1hc3luYyBmdW5jdGlvbiBrOCgkLFosUSxYLEo9Z2xvYmFsVGhpcy5mZXRjaCl7bGV0IFc9e307aWYoUSlXLkF1dGhvcml6YXRpb249UTtsZXQgWT1YPz9KWDtXUShZLCJhY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXMiKSxXW2JaXT1TdHJpbmcoWSk7bGV0IEc9YXdhaXQgSihgJHskfSR7Wn0vaGVhbHRoYCx7bWV0aG9kOiJPUFRJT05TIixoZWFkZXJzOld9KTtpZighRy5vayl0aHJvdyBuZXcgYigiVHJhbnNwb3J0RXJyb3IiLGBDYXBhYmlsaXR5IGRpc2NvdmVyeSBmYWlsZWQ6IEhUVFAgJHtHLnN0YXR1c31gLCIiKTtyZXR1cm4gZkcoRy5oZWFkZXJzKX1mdW5jdGlvbiB1RygkKXtpZighJClyZXR1cm4hMTtpZigkLmNhY2hlRXhwaXJlc0F0PT1udWxsKXJldHVybiEwO3JldHVybiBEYXRlLm5vdygpPCQuY2FjaGVFeHBpcmVzQXR9dmFyIERqPSJWR0ktTWF4LVJlcXVlc3QtQnl0ZXMiLEpOPSJWR0ktVXBsb2FkLVVSTC1TdXBwb3J0IixPaj0iVkdJLU1heC1VcGxvYWQtQnl0ZXMiLENqPSJWR0ktTWF4LVJlc3BvbnNlLUJ5dGVzIixXTj0iVkdJLUFjY2VwdC1NYXgtUmVzcG9uc2UtQnl0ZXMtU3VwcG9ydCIsamo9IlZHSS1NYXgtRXh0ZXJuYWxpemVkLVJlc3BvbnNlLUJ5dGVzIixWaj0iVkdJLUV4dGVybmFsaXphdGlvbi1FbmFibGVkIixZTj0iVkdJLVN1cHBvcnRlZC1FbmNvZGluZ3MiLFJqPSJWR0ktU3RpY2t5LUVuYWJsZWQiLEVqPSJWR0ktU3RpY2t5LURlZmF1bHQtVFRMIix3aj0iVkdJLVN0aWNreS1FY2hvLUhlYWRlcnMiO3ZhciBSVz1PKCgpPT57SFooKTtPSigpfSk7ZnVuY3Rpb24gU2ooJCl7cmV0dXJuIHR5cGVvZiAkPT09Im9iamVjdCImJiQhPT1udWxsJiZ0eXBlb2YgJC5idWZmZXJzPT09Im9iamVjdCJ9ZnVuY3Rpb24gTkgoJCxaKXtsZXQgUT0tMTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJCkpUT0kLmJ5dGVMZW5ndGg7ZWxzZSBpZigkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpUT0kLmJ5dGVMZW5ndGg7ZWxzZSBpZihTaigkKSlmb3IobGV0IFggb2YgT2JqZWN0LnZhbHVlcygkLmJ1ZmZlcnMpKXtsZXQgSj1YPy5ieXRlTGVuZ3RoO2lmKHR5cGVvZiBKPT09Im51bWJlciImJko+USlRPUp9ZWxzZSBpZih0eXBlb2YgJD09PSJzdHJpbmciKVE9JC5sZW5ndGg7aWYoUT4yMTQ3NDgzNjQwKXRocm93IFJhbmdlRXJyb3IoYCR7Wn0gaXMgJHtRfSBieXRlczsgdGhpcyBUeXBlU2NyaXB0IHdvcmtlciBjYW4gZW5jb2RlIGF0IG1vc3QgMjE0NzQ4MzY0MCAoMiBHaUIgLSA4KS4gQm90aCBBcnJvdyBiYWNrZW5kcyBhbGlnbiBidWZmZXJzIHdpdGggKGJ5dGVMZW5ndGggKyA3KSAmIH43LCBhbmQgdGhlIGJpdHdpc2UgJiB0cnVuY2F0ZXMgdG8gaW50MzIsIHNvIGEgbGFyZ2VyIHZhbHVlIHdvdWxkIGJlIHNlbnQgYXMgYSBuZWdhdGl2ZSBib2R5TGVuZ3RoLiBUaGUgd2lyZSBhbmQgdGhlIGArInByb3RvY29sIGNhcnJ5IGl0IGZpbmUg4oCUIHRoZSBsaW1pdCBpcyB0aGUgSmF2YVNjcmlwdCBBcnJvdyBlbmNvZGVycycsIG5vdCB2Z2ktcnBjJ3MuIil9ZnVuY3Rpb24gTzAoJCxaLFE9ITAsWCl7cmV0dXJuIG5ldyBhKCQsWixRLFg/P25ldyBNYXApfWZ1bmN0aW9uIEUwKCQsWil7cmV0dXJuIG5ldyBRMCgkLFo/P25ldyBNYXApfWZ1bmN0aW9uIGVZKCQpe2xldCBaPW5ldyBYUTtyZXR1cm4gWi5yZXNldCh2b2lkIDAsJCksWi5jbG9zZSgpLFoudG9VaW50OEFycmF5KCEwKX1mdW5jdGlvbiAkMSgkKXtsZXQgWj16JC5mcm9tKCQpLFE9Wy4uLlpdO2lmKFEubGVuZ3RoPjApcmV0dXJuIFFbMF0uc2NoZW1hO2lmKFouc2NoZW1hKXJldHVybiBaLnNjaGVtYTt0aHJvdyBFcnJvcigiQ2Fubm90IGRlc2VyaWFsaXplIHNjaGVtYSBmcm9tIGVtcHR5IElQQyBzdHJlYW0iKX1mdW5jdGlvbiBtWigkKXtsZXQgWj0kLFE9bmV3IFhRO3JldHVybiBRLnJlc2V0KHZvaWQgMCxaLnNjaGVtYSksUS5fd3JpdGVSZWNvcmRCYXRjaChaKSxRLmNsb3NlKCksUS50b1VpbnQ4QXJyYXkoITApfWZ1bmN0aW9uIEY2KCQpe2xldCBaPW5ldyBYUTtaLnJlc2V0KHZvaWQgMCwkKTtsZXQgUT0oKT0+e2xldCBYPVouX3NpbmsuX3ZhbHVlcztpZihYLmxlbmd0aD09PTEpe2xldCBHPVhbMF07cmV0dXJuIFgubGVuZ3RoPTAsR31sZXQgSj1YLnJlZHVjZSgoRyxIKT0+RytILmxlbmd0aCwwKSxXPW5ldyBVaW50OEFycmF5KEopLFk9MDtmb3IobGV0IEcgb2YgWClXLnNldChHLFkpLFkrPUcubGVuZ3RoO3JldHVybiBYLmxlbmd0aD0wLFd9O3JldHVybntzdGFydDooKT0+USgpLHdyaXRlQmF0Y2goWCl7cmV0dXJuIFouX3dyaXRlUmVjb3JkQmF0Y2goWCksUSgpfSxmaW5pc2g6KCk9Pm5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KFstMSwwXSkuYnVmZmVyKX19ZnVuY3Rpb24gUkgoJCl7cmV0dXJuWy4uLnokLmZyb20oJCldLmZpbHRlcigoUSk9PlEuY29uc3RydWN0b3IubmFtZSE9PSJfSW50ZXJuYWxFbXB0eVBsYWNlaG9sZGVyUmVjb3JkQmF0Y2giKX1mdW5jdGlvbiBrUSgkKXtsZXQgWj16JC5mcm9tKCQpLFE9Wy4uLlpdO2lmKFEubGVuZ3RoPT09MCl7bGV0IFg9Wi5zY2hlbWE/P25ldyBRMChbXSksSj1uZXcgajAoWC5maWVsZHMpLFc9SSh7dHlwZTpKLGxlbmd0aDowLGNoaWxkcmVuOltdLG51bGxDb3VudDowfSk7cmV0dXJuIG5ldyBEMChYLFcpfXJldHVybiBRWzBdfWZ1bmN0aW9uIFlRKCQsWil7bGV0IFE9JCxYPVEuZmllbGRzLmxlbmd0aD4wP1pbUS5maWVsZHNbMF0ubmFtZV0/Lmxlbmd0aD8/MDowLEo9US5maWVsZHMubWFwKChHKT0+e2xldCBIPVpbRy5uYW1lXTtpZighSClyZXR1cm4gSSh7dHlwZTpHLnR5cGUsbGVuZ3RoOlgsbnVsbENvdW50Olh9KTtmb3IobGV0IHogb2YgSClOSCh6LEcubmFtZSk7cmV0dXJuIFFYKEgsRy50eXBlKS5kYXRhWzBdfSksVz1uZXcgajAoUS5maWVsZHMpLFk9SSh7dHlwZTpXLGxlbmd0aDpYLGNoaWxkcmVuOkosbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IEQwKFEsWSl9ZnVuY3Rpb24gR1EoJCxaKXtsZXQgUT0kLFg9US5maWVsZHMubWFwKChZKT0+RVcoWS50eXBlKSksSj1uZXcgajAoUS5maWVsZHMpLFc9SSh7dHlwZTpKLGxlbmd0aDowLGNoaWxkcmVuOlgsbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IEQwKFEsVyxaKX1mdW5jdGlvbiBFVygkKXtsZXQgWj17RGF0YVR5cGU6ayxEYXRhOkEwfTtpZihaLkRhdGFUeXBlLmlzU3RydWN0KCQpKXtsZXQgUT0kLmNoaWxkcmVuLm1hcCgoWCk9PkVXKFgudHlwZSkpO3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOjAsY2hpbGRyZW46USxudWxsQ291bnQ6MH0pfWlmKFouRGF0YVR5cGUuaXNMaXN0KCQpKXtsZXQgUT1FVygkLmNoaWxkcmVuWzBdLnR5cGUpO3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOjAsY2hpbGQ6USxudWxsQ291bnQ6MCx2YWx1ZU9mZnNldHM6bmV3IEludDMyQXJyYXkoWzBdKX0pfWlmKFouRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KCQpKXtsZXQgUT1FVygkLmNoaWxkcmVuWzBdLnR5cGUpO3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOjAsY2hpbGQ6USxudWxsQ291bnQ6MH0pfWlmKFouRGF0YVR5cGUuaXNNYXAoJCkpe2xldCBRPSQuY2hpbGRyZW5bMF0/LnR5cGUsWD1RP0VXKFEpOkkoe3R5cGU6bmV3IGowKFtdKSxsZW5ndGg6MCxjaGlsZHJlbjpbXSxudWxsQ291bnQ6MH0pO3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOjAsY2hpbGQ6WCxudWxsQ291bnQ6MCx2YWx1ZU9mZnNldHM6bmV3IEludDMyQXJyYXkoWzBdKX0pfWlmKFouRGF0YVR5cGUuaXNVbmlvbigkKSl7bGV0IFE9JC5jaGlsZHJlbi5tYXAoKFgpPT5FVyhYLnR5cGUpKTtpZihaLkRhdGFUeXBlLmlzRGVuc2VVbmlvbigkKSlyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDowLHR5cGVJZHM6bmV3IEludDhBcnJheSgwKSx2YWx1ZU9mZnNldHM6bmV3IEludDMyQXJyYXkoMCksY2hpbGRyZW46USxudWxsQ291bnQ6MH0pO3JldHVybiBJKHt0eXBlOiQsbGVuZ3RoOjAsdHlwZUlkczpuZXcgSW50OEFycmF5KDApLGNoaWxkcmVuOlEsbnVsbENvdW50OjB9KX1yZXR1cm4gSSh7dHlwZTokLGxlbmd0aDowLG51bGxDb3VudDowfSl9ZnVuY3Rpb24gdlgoJCxaLFEpe2xldCBYPSQsSj17RGF0YVR5cGU6ayxEYXRhOkEwfSxXPVguZmllbGRzLm1hcCgoSCk9PntsZXQgej1aW0gubmFtZV07aWYoTkgoeixILm5hbWUpLHogaW5zdGFuY2VvZiBKLkRhdGEpcmV0dXJuIHo7cmV0dXJuIFFYKFt6XSxILnR5cGUpLmRhdGFbMF19KSxZPW5ldyBqMChYLmZpZWxkcyksRz1JKHt0eXBlOlksbGVuZ3RoOjEsY2hpbGRyZW46VyxudWxsQ291bnQ6MH0pO3JldHVybiBuZXcgRDAoWCxHLFEpfWZ1bmN0aW9uIGUkKCQsWil7bGV0IFE9JDtyZXR1cm4gbmV3IEQwKFEuc2NoZW1hLFEuZGF0YSxaKX1mdW5jdGlvbiBONigkLFope2xldCBRPW5ldyBYUTtRLnJlc2V0KHZvaWQgMCwkKTtmb3IobGV0IFggb2YgWilRLl93cml0ZVJlY29yZEJhdGNoKFgpO3JldHVybiBRLmNsb3NlKCksUS50b1VpbnQ4QXJyYXkoITApfWZ1bmN0aW9uIFU2KCQsWil7bGV0IFE9JDtpZihRLm51bVJvd3M9PT0wKXJldHVybiAkO2xldCBYPVo7aWYoUS5zY2hlbWEuZmllbGRzLmxlbmd0aCE9PVguZmllbGRzLmxlbmd0aCl0aHJvdyBUeXBlRXJyb3IoYEZpZWxkIGNvdW50IG1pc21hdGNoOiBleHBlY3RlZCAke1guZmllbGRzLmxlbmd0aH0sIGdvdCAke1Euc2NoZW1hLmZpZWxkcy5sZW5ndGh9YCk7Zm9yKGxldCBIPTA7SDxYLmZpZWxkcy5sZW5ndGg7SCsrKWlmKFEuc2NoZW1hLmZpZWxkc1tIXS5uYW1lIT09WC5maWVsZHNbSF0ubmFtZSl0aHJvdyBUeXBlRXJyb3IoYEZpZWxkIG5hbWUgbWlzbWF0Y2ggYXQgaW5kZXggJHtIfTogZXhwZWN0ZWQgJyR7WC5maWVsZHNbSF0ubmFtZX0nLCBnb3QgJyR7US5zY2hlbWEuZmllbGRzW0hdLm5hbWV9J2ApO2xldCBKPSExLFc9WC5maWVsZHMubWFwKChILHopPT57bGV0IHE9US5kYXRhLmNoaWxkcmVuW3pdLFA9cS50eXBlLFU9SC50eXBlO2lmKFA9PT1VKXJldHVybiBxO2lmKCFCaihQLFUpKXJldHVybiBKPSEwLHEuY2xvbmUoVSk7aWYoS04oUCkmJktOKFUpKXtKPSEwO2xldCBNPVEuZ2V0Q2hpbGRBdCh6KSxMPVtdO2ZvcihsZXQgRD0wO0Q8US5udW1Sb3dzO0QrKyl7bGV0IFI9TS5nZXQoRCk7TC5wdXNoKHR5cGVvZiBSPT09ImJpZ2ludCI/TnVtYmVyKFIpOlIpfXJldHVybiBRWChMLFUpLmRhdGFbMF19cmV0dXJuIEo9ITAscS5jbG9uZShVKX0pO2lmKCFKKXJldHVybiAkO2xldCBZPW5ldyBqMChYLmZpZWxkcyksRz1JKHt0eXBlOlksbGVuZ3RoOlEubnVtUm93cyxjaGlsZHJlbjpXLG51bGxDb3VudDpRLmRhdGEubnVsbENvdW50LG51bGxCaXRtYXA6US5kYXRhLm51bGxCaXRtYXB9KTtyZXR1cm4gbmV3IEQwKFgsRyxRLm1ldGFkYXRhKX12YXIgYVksako9KCk9Pm5ldyBWJCxVSD0oKT0+bmV3IHM4LE1IPSgpPT5uZXcgaTgsTEg9KCk9Pm5ldyBHWixWSj0oKT0+bmV3IEFaLEFIPSgpPT5uZXcgcjgsREg9KCk9Pm5ldyBhOCxPSD0oKT0+bmV3IHQ4LENIPSgpPT5uZXcgVlEsakg9KCk9Pm5ldyBlOCx0WT0oKT0+bmV3ICRRLFokPSgpPT5uZXcgVCQsWDg9KCk9Pm5ldyB4WixWSD0oJD1udWxsKT0+bmV3IHRaKGwuTUlDUk9TRUNPTkQsJCksUDY9KCQpPT5uZXcgTFooJCkscEc9KCQpPT5uZXcgajAoJCksQmo9KCQsWik9PntpZigkLnR5cGVJZD09PVoudHlwZUlkKXJldHVybiExO2lmKCQuY29uc3RydWN0b3I9PT1aLmNvbnN0cnVjdG9yKXJldHVybiExO3JldHVybiEwfSxLTj0oJCk9PiQudHlwZUlkPT09QS5JbnR8fCQudHlwZUlkPT09QS5GbG9hdDt2YXIgV1g9TygoKT0+e0pRKCk7YVk9e25hbWU6ImFycm93LWpzIixvcGFxdWVQYXNzdGhyb3VnaDohMH19KTt2YXIgeVg9InZnaV9ycGMubWV0aG9kIixSSj0idmdpX3JwYy5wcm90b2NvbCIsS1E9InZnaV9ycGMubG9nX2xldmVsIixNNj0idmdpX3JwYy5sb2dfbWVzc2FnZSIsRUo9InZnaV9ycGMubG9nX2V4dHJhIixoWD0idmdpX3JwYy5yZXF1ZXN0X3ZlcnNpb24iLElRPSIxIix3Vz0idmdpX3JwYy5zZXJ2ZXJfaWQiLHdKPSJ2Z2lfcnBjLnJlcXVlc3RfaWQiLFNKPSJ2Z2lfcnBjLnByb3RvY29sX3ZlcnNpb24iLHkkPSJ2Z2lfcnBjLnN0cmVhbV9zdGF0ZSNiNjQiLFlYPSJ2Z2lfcnBjLmNhbGxfc3RhdGUjYjY0IixiWD0idmdpX3JwYy5jYW5jZWwiLGNHPSJ2Z2lfcnBjLmxvY2F0aW9uIixFSD0idmdpX3JwYy5sb2NhdGlvbi5zaGEyNTYiLEhOPSJ2Z2lfcnBjLmxvY2F0aW9uLmZldGNoX21zIix6Tj0idmdpX3JwYy5sb2NhdGlvbi5zb3VyY2UiLEJKPSJYLVZHSS1SUEMtRXJyb3IiLGxHPSJYLVJlcXVlc3QtSUQiLGRHPSJ2Z2lfcnBjLmVycm9yX2tpbmQiO2Z1bmN0aW9uIGZIKCQpe3JldHVybiAkIT1udWxsJiZ0eXBlb2YgJC5udW1Sb3dzPT09Im51bWJlciImJiQuc2NoZW1hIT1udWxsJiZBcnJheS5pc0FycmF5KCQuc2NoZW1hLmZpZWxkcyl9dmFyIGcwLFoxPSgkKT0+JC50eXBlSWQ9PT1nMC5JbnQsd0g9KCQpPT4kLnR5cGVJZD09PWcwLkZsb2F0LFNIPSgkKT0+JC50eXBlSWQ9PT1nMC5CaW5hcnl8fCQudHlwZUlkPT09ZzAuTGFyZ2VCaW5hcnksQkg9KCQpPT4kLnR5cGVJZD09PWcwLlV0Zjh8fCQudHlwZUlkPT09ZzAuTGFyZ2VVdGY4LGtIPSgkKT0+JC50eXBlSWQ9PT1nMC5MYXJnZVV0ZjgsSUg9KCQpPT4kLnR5cGVJZD09PWcwLkxhcmdlQmluYXJ5LF9IPSgkKT0+JC50eXBlSWQ9PT1nMC5Cb29sLFRIPSgkKT0+JC50eXBlSWQ9PT1nMC5EZWNpbWFsLGdIPSgkKT0+JC50eXBlSWQ9PT1nMC5EYXRlLHhIPSgkKT0+JC50eXBlSWQ9PT1nMC5UaW1lLHZIPSgkKT0+JC50eXBlSWQ9PT1nMC5UaW1lc3RhbXAseUg9KCQpPT4kLnR5cGVJZD09PWcwLkR1cmF0aW9uLGhIPSgkKT0+JC50eXBlSWQ9PT1nMC5NYXAsYkg9KCQpPT4kLnR5cGVJZD09PWcwLkZpeGVkU2l6ZUJpbmFyeSxtSD0oJCk9PiQudHlwZUlkPT09ZzAuRGljdGlvbmFyeTt2YXIgdUg9TygoKT0+e2cwPXtOdWxsOjEsSW50OjIsRmxvYXQ6MyxCaW5hcnk6NCxVdGY4OjUsQm9vbDo2LERlY2ltYWw6NyxEYXRlOjgsVGltZTo5LFRpbWVzdGFtcDoxMCxJbnRlcnZhbDoxMSxMaXN0OjEyLFN0cnVjdDoxMyxVbmlvbjoxNCxGaXhlZFNpemVCaW5hcnk6MTUsRml4ZWRTaXplTGlzdDoxNixNYXA6MTcsRHVyYXRpb246MTgsTGFyZ2VCaW5hcnk6MTksTGFyZ2VVdGY4OjIwLERpY3Rpb25hcnk6LTF9fSk7dmFyIHFaPU8oKCk9PntXWCgpO3VIKCl9KTtmdW5jdGlvbiBPJCgkLFope2xldCBRPSQubWV0YWRhdGE7aWYoIVEpcmV0dXJuITE7bGV0IFg9US5nZXQoS1EpO2lmKCFYKXJldHVybiExO2xldCBKPVEuZ2V0KE02KT8/IiI7aWYoWD09PSJFWENFUFRJT04iKXtsZXQgVz1RLmdldChFSiksWT0iUnBjRXJyb3IiLEc9SixIPSIiO2lmKFcpdHJ5e2xldCB6PUpTT04ucGFyc2UoVyk7WT16LmV4Y2VwdGlvbl90eXBlPz8iUnBjRXJyb3IiLEc9ei5leGNlcHRpb25fbWVzc2FnZT8/SixIPXoudHJhY2ViYWNrPz8iIn1jYXRjaHt9dGhyb3cgbmV3IGIoWSxHLEgpfWlmKFope2xldCBXPVEuZ2V0KEVKKSxZO2lmKFcpdHJ5e1k9SlNPTi5wYXJzZShXKX1jYXRjaHt9Wih7bGV2ZWw6WCxtZXNzYWdlOkosZXh0cmE6WX0pfXJldHVybiEwfXZhciBwSD1PKCgpPT57SFooKX0pO2Z1bmN0aW9uIEZOKCQsWil7dmFyIFE9W10sWD0rIVosSj0wLFc9MDtmb3IoOyQubGVuZ3RoOyl7dmFyIFk9dmooJCxYfHxaKTtpZih0eXBlb2YgWT09Im9iamVjdCIpe2lmKFgpe2lmKFo9bnVsbCxZLncubGVuZ3RoPT1ZLnUpUS5wdXNoKFo9WS53KSxXKz1ZLnV9ZWxzZSBRLnB1c2goWiksWS5lPTA7Zm9yKDshWS5sOyl7dmFyIEc9Y2ooJCxZLFopO2lmKCFHKWMkKDUpO2lmKFopWS5lPVkueTtlbHNlIFEucHVzaChHKSxXKz1HLmxlbmd0aCxUaihZLncsMCxHLmxlbmd0aCksWS53LnNldChHLFkudy5sZW5ndGgtRy5sZW5ndGgpfUo9WS5iK1kuYyo0fWVsc2UgSj1ZOyQ9JC5zdWJhcnJheShKKX1yZXR1cm4gbGooUSxXKX12YXIgSWosaCQsbkcsX2osb0csY0g9ZnVuY3Rpb24oJCxaLFEpe2lmKGgkLnByb3RvdHlwZS5zbGljZSlyZXR1cm4gaCQucHJvdG90eXBlLnNsaWNlLmNhbGwoJCxaLFEpO2lmKFo9PW51bGx8fFo8MClaPTA7aWYoUT09bnVsbHx8UT4kLmxlbmd0aClRPSQubGVuZ3RoO3ZhciBYPW5ldyBoJChRLVopO3JldHVybiBYLnNldCgkLnN1YmFycmF5KFosUSkpLFh9LFgxPWZ1bmN0aW9uKCQsWixRLFgpe2lmKGgkLnByb3RvdHlwZS5maWxsKXJldHVybiBoJC5wcm90b3R5cGUuZmlsbC5jYWxsKCQsWixRLFgpO2lmKFE9PW51bGx8fFE8MClRPTA7aWYoWD09bnVsbHx8WD4kLmxlbmd0aClYPSQubGVuZ3RoO2Zvcig7UTxYOysrUSkkW1FdPVo7cmV0dXJuICR9LFRqPWZ1bmN0aW9uKCQsWixRLFgpe2lmKGgkLnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBoJC5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKCQsWixRLFgpO2lmKFE9PW51bGx8fFE8MClRPTA7aWYoWD09bnVsbHx8WD4kLmxlbmd0aClYPSQubGVuZ3RoO3doaWxlKFE8WCkkW1orK109JFtRKytdfSxnaixjJD1mdW5jdGlvbigkLFosUSl7dmFyIFg9RXJyb3IoWnx8Z2pbJF0pO2lmKFguY29kZT0kLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKFgsYyQpO2lmKCFRKXRocm93IFg7cmV0dXJuIFh9LHFOPWZ1bmN0aW9uKCQsWixRKXt2YXIgWD0wLEo9MDtmb3IoO1g8UTsrK1gpSnw9JFtaKytdPDwoWDw8Myk7cmV0dXJuIEp9LHhqPWZ1bmN0aW9uKCQsWil7cmV0dXJuKCRbWl18JFtaKzFdPDw4fCRbWisyXTw8MTZ8JFtaKzNdPDwyNCk+Pj4wfSx2aj1mdW5jdGlvbigkLFope3ZhciBRPSRbMF18JFsxXTw8OHwkWzJdPDwxNjtpZihRPT0zMTI2NTY4JiYkWzNdPT0yNTMpe3ZhciBYPSRbNF0sSj1YPj41JjEsVz1YPj4yJjEsWT1YJjMsRz1YPj42O2lmKFgmOCljJCgwKTt2YXIgSD02LUosej1ZPT0zPzQ6WSxxPXFOKCQsSCx6KTtIKz16O3ZhciBQPUc/MTw8RzpKLFU9cU4oJCxILFApKyhHPT0xJiYyNTYpLE09VTtpZighSil7dmFyIEw9MTw8MTArKCRbNV0+PjMpO009TCsoTD4+MykqKCRbNV0mNyl9aWYoTT4yMTQ1Mzg2NDk2KWMkKDEpO3ZhciBEPW5ldyBoJCgoWj09MT9VfHxNOlo/MDpNKSsxMik7cmV0dXJuIERbMF09MSxEWzRdPTQsRFs4XT04LHtiOkgrUCx5OjAsbDowLGQ6cSx3OlomJlohPTE/WjpELnN1YmFycmF5KDEyKSxlOk0sbzpuZXcgb0coRC5idWZmZXIsMCwzKSx1OlUsYzpXLG06TWF0aC5taW4oMTMxMDcyLE0pfX1lbHNlIGlmKChRPj40fCRbM108PDIwKT09MjU0ODE4OTMpcmV0dXJuIHhqKCQsNCkrODtjJCgwKX0sTDY9ZnVuY3Rpb24oJCl7dmFyIFo9MDtmb3IoOzE8PFo8PSQ7KytaKTtyZXR1cm4gWi0xfSxKMT1mdW5jdGlvbigkLFosUSl7dmFyIFg9KFo8PDMpKzQsSj0oJFtaXSYxNSkrNTtpZihKPlEpYyQoMyk7dmFyIFc9MTw8SixZPVcsRz0tMSxIPS0xLHo9LTEscT1XLFA9bmV3IElqKDUxMisoVzw8MikpLFU9bmV3IF9qKFAsMCwyNTYpLE09bmV3IG5HKFAsMCwyNTYpLEw9bmV3IG5HKFAsNTEyLFcpLEQ9NTEyKyhXPDwxKSxSPW5ldyBoJChQLEQsVyksVj1uZXcgaCQoUCxEK1cpO3doaWxlKEc8MjU1JiZZPjApe3ZhciBnPUw2KFkrMSksdz1YPj4zLFQ9KDE8PGcrMSktMSxFPSgkW3ddfCRbdysxXTw8OHwkW3crMl08PDE2KT4+KFgmNykmVCxfPSgxPDxnKS0xLHk9VC1ZLTEsaD1FJl87aWYoaDx5KVgrPWcsRT1oO2Vsc2UgaWYoWCs9ZysxLEU+XylFLT15O2lmKFVbKytHXT0tLUUsRT09LTEpWSs9RSxSWy0tcV09RztlbHNlIFktPUU7aWYoIUUpZG97dmFyIHM9WD4+MztIPSgkW3NdfCRbcysxXTw8OCk+PihYJjcpJjMsWCs9MixHKz1IfXdoaWxlKEg9PTMpfWlmKEc+MjU1fHxZKWMkKDApO3ZhciBmPTAsYz0oVz4+MSkrKFc+PjMpKzMsbz1XLTE7Zm9yKHZhciBlPTA7ZTw9RzsrK2Upe3ZhciBtPVVbZV07aWYobTwxKXtNW2VdPS1tO2NvbnRpbnVlfWZvcih6PTA7ejxtOysreil7UltmXT1lO2RvIGY9ZitjJm87d2hpbGUoZj49cSl9fWlmKGYpYyQoMCk7Zm9yKHo9MDt6PFc7Kyt6KXt2YXIgdT1NW1Jbel1dKyssRjA9Vlt6XT1KLUw2KHUpO0xbel09KHU8PEYwKS1XfXJldHVybltYKzc+PjMse2I6SixzOlIsbjpWLHQ6TH1dfSx5aj1mdW5jdGlvbigkLFope3ZhciBRPTAsWD0tMSxKPW5ldyBoJCgyOTIpLFc9JFtaXSxZPUouc3ViYXJyYXkoMCwyNTYpLEc9Si5zdWJhcnJheSgyNTYsMjY4KSxIPW5ldyBuRyhKLmJ1ZmZlciwyNjgpO2lmKFc8MTI4KXt2YXIgej1KMSgkLForMSw2KSxxPXpbMF0sUD16WzFdO1orPVc7dmFyIFU9cTw8MyxNPSRbWl07aWYoIU0pYyQoMCk7dmFyIEw9MCxEPTAsUj1QLmIsVj1SLGc9KCsrWjw8MyktOCtMNihNKTtmb3IoOzspe2lmKGctPVIsZzxVKWJyZWFrO3ZhciB3PWc+PjM7aWYoTCs9KCRbd118JFt3KzFdPDw4KT4+KGcmNykmKDE8PFIpLTEsWVsrK1hdPVAuc1tMXSxnLT1WLGc8VSlicmVhazt3PWc+PjMsRCs9KCRbd118JFt3KzFdPDw4KT4+KGcmNykmKDE8PFYpLTEsWVsrK1hdPVAuc1tEXSxSPVAubltMXSxMPVAudFtMXSxWPVAubltEXSxEPVAudFtEXX1pZigrK1g+MjU1KWMkKDApfWVsc2V7WD1XLTEyNztmb3IoO1E8WDtRKz0yKXt2YXIgVD0kWysrWl07WVtRXT1UPj40LFlbUSsxXT1UJjE1fSsrWn12YXIgRT0wO2ZvcihRPTA7UTxYOysrUSl7dmFyIF89WVtRXTtpZihfPjExKWMkKDApO0UrPV8mJjE8PF8tMX12YXIgeT1MNihFKSsxLGg9MTw8eSxzPWgtRTtpZihzJnMtMSljJCgwKTtZW1grK109TDYocykrMTtmb3IoUT0wO1E8WDsrK1Epe3ZhciBfPVlbUV07KytHW1lbUV09XyYmeSsxLV9dfXZhciBmPW5ldyBoJChoPDwxKSxjPWYuc3ViYXJyYXkoMCxoKSxvPWYuc3ViYXJyYXkoaCk7SFt5XT0wO2ZvcihRPXk7UT4wOy0tUSl7dmFyIGU9SFtRXTtYMShvLFEsZSxIW1EtMV09ZStHW1FdKigxPDx5LVEpKX1pZihIWzBdIT1oKWMkKDApO2ZvcihRPTA7UTxYOysrUSl7dmFyIG09WVtRXTtpZihtKXt2YXIgdT1IW21dO1gxKGMsUSx1LEhbbV09dSsoMTw8eS1tKSl9fXJldHVybltaLHtuOm8sYjp5LHM6Y31dfSxoaixiaixtaixQTj1mdW5jdGlvbigkLFope3ZhciBRPSQubGVuZ3RoLFg9bmV3IG9HKFEpO2Zvcih2YXIgSj0wO0o8UTsrK0opWFtKXT1aLForPTE8PCRbSl07cmV0dXJuIFh9LGxILGZqLGRILHVqLFExPWZ1bmN0aW9uKCQsWixRKXt2YXIgWD0kLmxlbmd0aCxKPVoubGVuZ3RoLFc9JFtYLTFdLFk9KDE8PFEuYiktMSxHPS1RLmI7aWYoIVcpYyQoMCk7dmFyIEg9MCx6PVEuYixxPShYPDwzKS04K0w2KFcpLXosUD0tMTtmb3IoO3E+RyYmUDxKOyl7dmFyIFU9cT4+MyxNPSgkW1VdfCRbVSsxXTw8OHwkW1UrMl08PDE2KT4+KHEmNyk7SD0oSDw8enxNKSZZLFpbKytQXT1RLnNbSF0scS09ej1RLm5bSF19aWYocSE9R3x8UCsxIT1KKWMkKDApfSxwaj1mdW5jdGlvbigkLFosUSl7dmFyIFg9NixKPVoubGVuZ3RoLFc9SiszPj4yLFk9Vzw8MSxHPVcrWTtRMSgkLnN1YmFycmF5KFgsWCs9JFswXXwkWzFdPDw4KSxaLnN1YmFycmF5KDAsVyksUSksUTEoJC5zdWJhcnJheShYLFgrPSRbMl18JFszXTw8OCksWi5zdWJhcnJheShXLFkpLFEpLFExKCQuc3ViYXJyYXkoWCxYKz0kWzRdfCRbNV08PDgpLFouc3ViYXJyYXkoWSxHKSxRKSxRMSgkLnN1YmFycmF5KFgpLFouc3ViYXJyYXkoRyksUSl9LGNqPWZ1bmN0aW9uKCQsWixRKXt2YXIgWCxKPVouYixXPSRbSl0sWT1XPj4xJjM7Wi5sPVcmMTt2YXIgRz1XPj4zfCRbSisxXTw8NXwkW0orMl08PDEzLEg9KEorPTMpK0c7aWYoWT09MSl7aWYoSj49JC5sZW5ndGgpcmV0dXJuO2lmKFouYj1KKzEsUSlyZXR1cm4gWDEoUSwkW0pdLFoueSxaLnkrPUcpLFE7cmV0dXJuIFgxKG5ldyBoJChHKSwkW0pdKX1pZihIPiQubGVuZ3RoKXJldHVybjtpZihZPT0wKXtpZihaLmI9SCxRKXJldHVybiBRLnNldCgkLnN1YmFycmF5KEosSCksWi55KSxaLnkrPUcsUTtyZXR1cm4gY0goJCxKLEgpfWlmKFk9PTIpe3ZhciB6PSRbSl0scT16JjMsUD16Pj4yJjMsVT16Pj40LE09MCxMPTA7aWYocTwyKWlmKFAmMSlVfD0kWysrSl08PDR8KFAmMiYmJFsrK0pdPDwxMik7ZWxzZSBVPXo+PjM7ZWxzZSBpZihMPVAsUDwyKVV8PSgkWysrSl0mNjMpPDw0LE09JFtKXT4+NnwkWysrSl08PDI7ZWxzZSBpZihQPT0yKVV8PSRbKytKXTw8NHwoJFsrK0pdJjMpPDwxMixNPSRbSl0+PjJ8JFsrK0pdPDw2O2Vsc2UgVXw9JFsrK0pdPDw0fCgkWysrSl0mNjMpPDwxMixNPSRbSl0+PjZ8JFsrK0pdPDwyfCRbKytKXTw8MTA7KytKO3ZhciBEPVE/US5zdWJhcnJheShaLnksWi55K1oubSk6bmV3IGgkKFoubSksUj1ELmxlbmd0aC1VO2lmKHE9PTApRC5zZXQoJC5zdWJhcnJheShKLEorPVUpLFIpO2Vsc2UgaWYocT09MSlYMShELCRbSisrXSxSKTtlbHNle3ZhciBWPVouaDtpZihxPT0yKXt2YXIgZz15aigkLEopO00rPUotKEo9Z1swXSksWi5oPVY9Z1sxXX1lbHNlIGlmKCFWKWMkKDApOyhMP3BqOlExKSgkLnN1YmFycmF5KEosSis9TSksRC5zdWJhcnJheShSKSxWKX12YXIgdz0kW0orK107aWYodyl7aWYodz09MjU1KXc9KCRbSisrXXwkW0orK108PDgpKzMyNTEyO2Vsc2UgaWYodz4xMjcpdz13LTEyODw8OHwkW0orK107dmFyIFQ9JFtKKytdO2lmKFQmMyljJCgwKTt2YXIgRT1bYmosbWosaGpdO2Zvcih2YXIgXz0yO18+LTE7LS1fKXt2YXIgeT1UPj4oXzw8MSkrMiYzO2lmKHk9PTEpe3ZhciBoPW5ldyBoJChbMCwwLCRbSisrXV0pO0VbX109e3M6aC5zdWJhcnJheSgyLDMpLG46aC5zdWJhcnJheSgwLDEpLHQ6bmV3IG5HKGguYnVmZmVyLDAsMSksYjowfX1lbHNlIGlmKHk9PTIpWD1KMSgkLEosOS0oXyYxKSksSj1YWzBdLEVbX109WFsxXTtlbHNlIGlmKHk9PTMpe2lmKCFaLnQpYyQoMCk7RVtfXT1aLnRbX119fXZhciBzPVoudD1FLGY9c1swXSxjPXNbMV0sbz1zWzJdLGU9JFtILTFdO2lmKCFlKWMkKDApO3ZhciBtPShIPDwzKS04K0w2KGUpLW8uYix1PW0+PjMsRjA9MCxCMD0oJFt1XXwkW3UrMV08PDgpPj4obSY3KSYoMTw8by5iKS0xO3U9KG0tPWMuYik+PjM7dmFyIHA9KCRbdV18JFt1KzFdPDw4KT4+KG0mNykmKDE8PGMuYiktMTt1PShtLT1mLmIpPj4zO3ZhciB4MD0oJFt1XXwkW3UrMV08PDgpPj4obSY3KSYoMTw8Zi5iKS0xO2ZvcigrK3c7LS13Oyl7dmFyIGQwPW8uc1tCMF0sbjA9by5uW0IwXSxTPWYuc1t4MF0sZD1mLm5beDBdLGswPWMuc1twXSxYMD1jLm5bcF07dT0obS09azApPj4zO3ZhciBoMD0xPDxrMCxJMD1oMCsoKCRbdV18JFt1KzFdPDw4fCRbdSsyXTw8MTZ8JFt1KzNdPDwyNCk+Pj4obSY3KSZoMC0xKTt1PShtLT1kSFtTXSk+PjM7dmFyIHYwPXVqW1NdKygoJFt1XXwkW3UrMV08PDh8JFt1KzJdPDwxNik+PihtJjcpJigxPDxkSFtTXSktMSk7dT0obS09bEhbZDBdKT4+Mzt2YXIgTiQ9ZmpbZDBdKygoJFt1XXwkW3UrMV08PDh8JFt1KzJdPDwxNik+PihtJjcpJigxPDxsSFtkMF0pLTEpO2lmKHU9KG0tPW4wKT4+MyxCMD1vLnRbQjBdKygoJFt1XXwkW3UrMV08PDgpPj4obSY3KSYoMTw8bjApLTEpLHU9KG0tPWQpPj4zLHgwPWYudFt4MF0rKCgkW3VdfCRbdSsxXTw8OCk+PihtJjcpJigxPDxkKS0xKSx1PShtLT1YMCk+PjMscD1jLnRbcF0rKCgkW3VdfCRbdSsxXTw8OCk+PihtJjcpJigxPDxYMCktMSksSTA+MylaLm9bMl09Wi5vWzFdLFoub1sxXT1aLm9bMF0sWi5vWzBdPUkwLT0zO2Vsc2V7dmFyIGxaPUkwLShOJCE9MCk7aWYobFope2lmKEkwPWxaPT0zP1oub1swXS0xOloub1tsWl0sbFo+MSlaLm9bMl09Wi5vWzFdO1oub1sxXT1aLm9bMF0sWi5vWzBdPUkwfWVsc2UgSTA9Wi5vWzBdfWZvcih2YXIgXz0wO188TiQ7KytfKURbRjArX109RFtSK19dO0YwKz1OJCxSKz1OJDt2YXIgQiQ9RjAtSTA7aWYoQiQ8MCl7dmFyIGRaPS1CJCxIOD1aLmUrQiQ7aWYoZFo+djApZFo9djA7Zm9yKHZhciBfPTA7XzxkWjsrK18pRFtGMCtfXT1aLndbSDgrX107RjArPWRaLHYwLT1kWixCJD0wfWZvcih2YXIgXz0wO188djA7KytfKURbRjArX109RFtCJCtfXTtGMCs9djB9aWYoRjAhPVIpd2hpbGUoUjxELmxlbmd0aClEW0YwKytdPURbUisrXTtlbHNlIEYwPUQubGVuZ3RoO2lmKFEpWi55Kz1GMDtlbHNlIEQ9Y0goRCwwLEYwKX1lbHNlIGlmKFEpe2lmKFoueSs9VSxSKWZvcih2YXIgXz0wO188VTsrK18pRFtfXT1EW1IrX119ZWxzZSBpZihSKUQ9Y0goRCxSKTtyZXR1cm4gWi5iPUgsRH1jJCgyKX0sbGo9ZnVuY3Rpb24oJCxaKXtpZigkLmxlbmd0aD09MSlyZXR1cm4gJFswXTt2YXIgUT1uZXcgaCQoWik7Zm9yKHZhciBYPTAsSj0wO1g8JC5sZW5ndGg7KytYKXt2YXIgVz0kW1hdO1Euc2V0KFcsSiksSis9Vy5sZW5ndGh9cmV0dXJuIFF9O3ZhciBOTj1PKCgpPT57SWo9QXJyYXlCdWZmZXIsaCQ9VWludDhBcnJheSxuRz1VaW50MTZBcnJheSxfaj1JbnQxNkFycmF5LG9HPUludDMyQXJyYXksZ2o9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLGhqPUoxKG5ldyBoJChbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLGJqPUoxKG5ldyBoJChbMzMsMjAsMTk2LDI0LDk5LDE0MCwzMywxMzIsMTYsNjYsOCwzMywxMzIsMTYsNjYsOCwzMyw2OCw2OCw2OCw2OCw2OCw2OCw2OCw2OCwzNiw5XSksMCw2KVsxXSxtaj1KMShuZXcgaCQoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sbEg9bmV3IGgkKG5ldyBvRyhbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAyMDUwMDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxmaj1QTihsSCwwKSxkSD1uZXcgaCQobmV3IG9HKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksdWo9UE4oZEgsMyl9KTt2YXIgVU49e307UDgoVU4se3pzdGREZWNvbXByZXNzOigpPT5BNix6c3RkQ29tcHJlc3M6KCk9PlcxLGlzWnN0ZENvbXByZXNzQXZhaWxhYmxlOigpPT5zSH0pO2Z1bmN0aW9uIG9IKCl7bGV0ICQ9aW1wb3J0Lm1ldGEucmVxdWlyZT8/Z2xvYmFsVGhpcy5yZXF1aXJlPz9udWxsO2lmKCEkKXJldHVybiBudWxsO3RyeXtyZXR1cm4gJChkail9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHNIKCl7aWYobkgpcmV0dXJuITA7cmV0dXJuIHR5cGVvZiBvSCgpPy56c3RkQ29tcHJlc3NTeW5jPT09ImZ1bmN0aW9uIn1hc3luYyBmdW5jdGlvbiBXMSgkLFope2lmKG5IKXJldHVybiBuZXcgVWludDhBcnJheShCdW4uenN0ZENvbXByZXNzU3luYygkLHtsZXZlbDpafSkpO2xldCBRPW9IKCksWD1RPy56c3RkQ29tcHJlc3NTeW5jO2lmKHR5cGVvZiBYIT09ImZ1bmN0aW9uIil0aHJvdyBFcnJvcigienN0ZCBjb21wcmVzc2lvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgcnVudGltZS4gUmVxdWlyZXMgQnVuIG9yIE5vZGUuanMgPj0gMjIuMTUgLyBEZW5vID49IDIuNi45LiAod29ya2VyZCBoYXMgbm8gbmF0aXZlIHpzdGQgZW5jb2RlcjsgZnpzdGQgaXMgZGVjb21wcmVzcy1vbmx5LikiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWCgkLHtwYXJhbXM6e1tRLmNvbnN0YW50cy5aU1REX2NfY29tcHJlc3Npb25MZXZlbF06Wn19KSl9YXN5bmMgZnVuY3Rpb24gQTYoJCxaKXtpZihaIT1udWxsKXtsZXQgWD1uaigkKTtpZihYIT09bnVsbCYmWD5aKXRocm93IEVycm9yKGB6c3RkIGRlY29tcHJlc3NlZCBzaXplICgke1h9KSB3b3VsZCBleGNlZWQgY2FwICgke1p9KWApfWxldCBRO2lmKG5IKVE9bmV3IFVpbnQ4QXJyYXkoQnVuLnpzdGREZWNvbXByZXNzU3luYygkKSk7ZWxzZXtsZXQgSj1vSCgpPy56c3RkRGVjb21wcmVzc1N5bmM7aWYodHlwZW9mIEo9PT0iZnVuY3Rpb24iKVE9bmV3IFVpbnQ4QXJyYXkoSigkKSk7ZWxzZXtsZXQgVz1GTigkKTtRPW5ldyBVaW50OEFycmF5KFcuYnl0ZUxlbmd0aCksUS5zZXQoVyl9fWlmKFohPW51bGwmJlEuYnl0ZUxlbmd0aD5aKXRocm93IEVycm9yKGB6c3RkIGRlY29tcHJlc3NlZCBzaXplICgke1EuYnl0ZUxlbmd0aH0pIGV4Y2VlZHMgY2FwICgke1p9KWApO3JldHVybiBRfWZ1bmN0aW9uIG5qKCQpe2lmKCQubGVuZ3RoPDYpcmV0dXJuIG51bGw7aWYoJFswXSE9PTQwfHwkWzFdIT09MTgxfHwkWzJdIT09NDd8fCRbM10hPT0yNTMpcmV0dXJuIG51bGw7bGV0IFo9JFs0XSxRPVo+PjYmMyxYPShaPj41JjEpPT09MSxKPVomMyxXPVE9PT0wP1g/MTowOlE9PT0xPzI6UT09PTI/NDo4O2lmKFc9PT0wKXJldHVybiBudWxsO2xldCBZPVg/MDoxLEc9Sj09PTA/MDpKPT09MT8xOko9PT0yPzI6NCxIPTUrWStHO2lmKCQubGVuZ3RoPEgrVylyZXR1cm4gbnVsbDtsZXQgej0wbjtmb3IobGV0IHE9MDtxPFc7cSsrKXp8PUJpZ0ludCgkW0grcV0pPDxCaWdJbnQocSo4KTtpZihXPT09Mil6Kz0yNTZuO2lmKHo+QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSlyZXR1cm4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7cmV0dXJuIE51bWJlcih6KX12YXIgZGo9Im5vZGU6emxpYiIsbkg7dmFyIFkxPU8oKCk9PntOTigpO25IPXR5cGVvZiBnbG9iYWxUaGlzLkJ1bjwidSJ9KTtmdW5jdGlvbiBvaigkKXtsZXQgWj1NTi5nZXQoJCk7aWYoWj09PXZvaWQgMCl7bGV0IFE9W107Zm9yKGxldCBYIG9mICQuZmllbGRzKWlmKFoxKFgudHlwZSkmJlgudHlwZS5iaXRXaWR0aD09PTY0KVEucHVzaChYLm5hbWUpO1o9USxNTi5zZXQoJCxaKX1yZXR1cm4gWn1mdW5jdGlvbiBpSCgkLFope2xldCBRPW9qKCQpO2lmKFEubGVuZ3RoPT09MClyZXR1cm4gWjtsZXQgWD1udWxsO2ZvcihsZXQgSiBvZiBRKXtsZXQgVz1aW0pdO2lmKFc9PT12b2lkIDApY29udGludWU7aWYoQXJyYXkuaXNBcnJheShXKSl7bGV0IFk9bnVsbDtmb3IobGV0IEc9MDtHPFcubGVuZ3RoO0crKylpZih0eXBlb2YgV1tHXT09PSJudW1iZXIiKXtpZihZPT09bnVsbClZPVcuc2xpY2UoKTtZW0ddPUJpZ0ludChXW0ddKX1pZihZIT09bnVsbClYPz89ey4uLlp9LFhbSl09WX1lbHNlIGlmKHR5cGVvZiBXPT09Im51bWJlciIpWD8/PXsuLi5afSxYW0pdPUJpZ0ludChXKX1yZXR1cm4gWD8/Wn1mdW5jdGlvbiBENigkLFosUSxYKXtsZXQgSj1uZXcgTWFwO2lmKEouc2V0KHdXLFEpLFghPT1udWxsKUouc2V0KHdKLFgpO2lmKCQuZmllbGRzLmxlbmd0aD09PTApcmV0dXJuIEdYKCQsSik7Zm9yKGxldCBZIG9mICQuZmllbGRzKWlmKFpbWS5uYW1lXT09PXZvaWQgMCYmIVkubnVsbGFibGUpe2xldCBHPU9iamVjdC5rZXlzKFopO3Rocm93IFR5cGVFcnJvcihgSGFuZGxlciByZXN1bHQgbWlzc2luZyByZXF1aXJlZCBmaWVsZCAnJHtZLm5hbWV9Jy4gR290IGtleXM6IFske0cuam9pbigiLCAiKX1dYCl9bGV0IFc9aUgoJCxaKTtyZXR1cm4gdlgoJCxXLEopfWZ1bmN0aW9uIHEkKCQsWixRLFgpe2xldCBKPW5ldyBNYXA7Si5zZXQoS1EsIkVYQ0VQVElPTiIpO2xldCBXPVouZXJyb3JUeXBlLFk9dHlwZW9mIFc9PT0ic3RyaW5nIiYmVy5sZW5ndGg+MD9XOnR5cGVvZiBaLm5hbWU9PT0ic3RyaW5nIiYmWi5uYW1lIT09IkVycm9yIj9aLm5hbWU6Wi5jb25zdHJ1Y3Rvci5uYW1lLEc9Wi5lcnJvck1lc3NhZ2UsSD10eXBlb2YgRz09PSJzdHJpbmciP0c6Wi5tZXNzYWdlO0ouc2V0KE02LGAke1l9OiAke0h9YCk7bGV0IHo9Wi5lcnJvcktpbmQ/P1ouY29uc3RydWN0b3IuZXJyb3JLaW5kO2lmKHR5cGVvZiB6PT09InN0cmluZyImJnoubGVuZ3RoPjApSi5zZXQoZEcseik7bGV0IHE9e2V4Y2VwdGlvbl90eXBlOlksZXhjZXB0aW9uX21lc3NhZ2U6SCx0cmFjZWJhY2s6Wi5zdGFjaz8/IiJ9O2lmKHR5cGVvZiB6PT09InN0cmluZyImJnoubGVuZ3RoPjApcS5lcnJvcl9raW5kPXo7aWYoSi5zZXQoRUosSlNPTi5zdHJpbmdpZnkocSkpLEouc2V0KHdXLFEpLFghPT1udWxsKUouc2V0KHdKLFgpO3JldHVybiBHWCgkLEopfWZ1bmN0aW9uIExOKCQsWixRLFgsSixXKXtsZXQgWT1uZXcgTWFwO2lmKFkuc2V0KEtRLFopLFkuc2V0KE02LFEpLFgpWS5zZXQoRUosSlNPTi5zdHJpbmdpZnkoWCkpO2lmKEohPW51bGwpWS5zZXQod1csSik7aWYoVyE9bnVsbClZLnNldCh3SixXKTtyZXR1cm4gR1goJCxZKX1mdW5jdGlvbiBHWCgkLFope3JldHVybiBHUSgkLFopfXZhciBNTjt2YXIgbVg9TygoKT0+e3FaKCk7TU49bmV3IFdlYWtNYXB9KTtmdW5jdGlvbiBBTigpe3JldHVybiB0eXBlb2YgcGVyZm9ybWFuY2U8InUiP3BlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9ZnVuY3Rpb24gc0coJCl7bGV0IFo9bmV3IFVSTCgkKTtpZihaLnByb3RvY29sIT09Imh0dHBzOiIpdGhyb3cgRXJyb3IoYEV4dGVybmFsIGxvY2F0aW9uIFVSTCBtdXN0IHVzZSBIVFRQUywgZ290ICIke1oucHJvdG9jb2x9ImApfWZ1bmN0aW9uIE82KCQpe3RyeXtsZXQgWj1uZXcgVVJMKCQpO3JldHVybiBaLnVzZXJuYW1lPSIiLFoucGFzc3dvcmQ9IiIsWi5zZWFyY2g9IiIsWi5oYXNoPSIiLFoudG9TdHJpbmcoKX1jYXRjaHtyZXR1cm4iPGludmFsaWQtdXJsPiJ9fWZ1bmN0aW9uIGFqKCQpe2xldCBaPSQubWF4RmV0Y2hCeXRlcz8/aWosUT0kLm1heERlY29tcHJlc3NlZEJ5dGVzPz9NYXRoLm1pbihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixaKjE2KSxYPSQubWF4UmVkaXJlY3RzPz9yajtpZighTnVtYmVyLmlzU2FmZUludGVnZXIoWil8fFo8MCl0aHJvdyBFcnJvcigibWF4RmV0Y2hCeXRlcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihRKXx8UTwwKXRocm93IEVycm9yKCJtYXhEZWNvbXByZXNzZWRCeXRlcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihYKXx8WDwwKXRocm93IEVycm9yKCJtYXhSZWRpcmVjdHMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXIiKTtyZXR1cm57bWF4RmV0Y2hCeXRlczpaLG1heERlY29tcHJlc3NlZEJ5dGVzOlEsbWF4UmVkaXJlY3RzOlh9fWFzeW5jIGZ1bmN0aW9uIHRqKCQsWixRKXtsZXQgWD0kLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpO2lmKFghPW51bGwpe2xldCB6PU51bWJlcihYKTtpZihOdW1iZXIuaXNGaW5pdGUoeikmJno+Wil0aHJvdyBRLmFib3J0KCksRXJyb3IoYEV4dGVybmFsIGxvY2F0aW9uIGZldGNoIGV4Y2VlZHMgbWF4X2ZldGNoX2J5dGVzICgke3p9ID4gJHtafSlgKX1pZighJC5ib2R5KXJldHVybiBuZXcgVWludDhBcnJheTtsZXQgSj0kLmJvZHkuZ2V0UmVhZGVyKCksVz1bXSxZPTA7dHJ5e3doaWxlKCEwKXtsZXR7ZG9uZTp6LHZhbHVlOnF9PWF3YWl0IEoucmVhZCgpO2lmKHopYnJlYWs7aWYoWSs9cS5ieXRlTGVuZ3RoLFk+Wil0aHJvdyBRLmFib3J0KCksRXJyb3IoYEV4dGVybmFsIGxvY2F0aW9uIGZldGNoIGV4Y2VlZGVkIG1heF9mZXRjaF9ieXRlcyAoJHtafSBieXRlcylgKTtXLnB1c2gocSl9fWZpbmFsbHl7dHJ5e2F3YWl0IEouY2FuY2VsKCl9Y2F0Y2h7fUoucmVsZWFzZUxvY2soKX1sZXQgRz1uZXcgVWludDhBcnJheShZKSxIPTA7Zm9yKGxldCB6IG9mIFcpRy5zZXQoeixIKSxIKz16LmJ5dGVMZW5ndGg7cmV0dXJuIEd9YXN5bmMgZnVuY3Rpb24gRE4oJCl7bGV0IFo9bmV3IEFycmF5QnVmZmVyKCQuYnl0ZUxlbmd0aCk7bmV3IFVpbnQ4QXJyYXkoWikuc2V0KCQpO2xldCBRPWF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixaKTtyZXR1cm4gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShRKSkubWFwKChYKT0+WC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1mdW5jdGlvbiBGJCgkKXtpZigkLm51bVJvd3MhPT0wKXJldHVybiExO2xldCBaPSQubWV0YWRhdGE7aWYoIVopcmV0dXJuITE7cmV0dXJuIFouaGFzKGNHKSYmIVouaGFzKEtRKX1mdW5jdGlvbiBHMSgkLFosUSl7bGV0IFg9bmV3IE1hcDtpZihYLnNldChjRyxaKSxRKVguc2V0KEVILFEpO3JldHVybiBHWCgkLFgpfWZ1bmN0aW9uIGVqKCQpe3JldHVybiBtWigkKX1mdW5jdGlvbiAkVigkKXtyZXR1cm4gbVooJCkuYnl0ZUxlbmd0aH1hc3luYyBmdW5jdGlvbiBrSigkLFosUSxYPSExKXtpZighWj8uc3RvcmFnZSlyZXR1cm4gJDtpZigkLm51bVJvd3M9PT0wKXJldHVybiAkO2xldCBKPVouZXh0ZXJuYWxpemVUaHJlc2hvbGRCeXRlcz8/c2o7aWYoIVgmJiRWKCQpPEopcmV0dXJuICQ7bGV0IFc9ZWooJCksWT1hd2FpdCBETihXKSxHPSIiO2lmKFouY29tcHJlc3Npb24/LmFsZ29yaXRobT09PSJ6c3RkIilXPWF3YWl0IFcxKFcsWi5jb21wcmVzc2lvbi5sZXZlbD8/MyksRz0ienN0ZCI7UT8uKFcuYnl0ZUxlbmd0aCk7bGV0IEg9YXdhaXQgWi5zdG9yYWdlLnVwbG9hZChXLEcpO3JldHVybiBHMSgkLnNjaGVtYSxILFkpfWFzeW5jIGZ1bmN0aW9uIEUkKCQsWixRKXtpZighWilyZXR1cm4gJDtpZighRiQoJCkpcmV0dXJuICQ7bGV0IFg9JC5tZXRhZGF0YT8uZ2V0KGNHKTtpZighWClyZXR1cm4gJDtsZXR7bWF4RmV0Y2hCeXRlczpKLG1heERlY29tcHJlc3NlZEJ5dGVzOlcsbWF4UmVkaXJlY3RzOll9PWFqKFopLEc9Wi51cmxWYWxpZGF0b3I9PT1udWxsP3ZvaWQgMDpaLnVybFZhbGlkYXRvcj8/c0csSD1BTigpLHo9WCxxLFA7Zm9yKGxldCBWPTA7O1YrKyl7aWYoRyl0cnl7Ryh6KX1jYXRjaCh3KXtsZXQgVD1HPT09c0cmJncgaW5zdGFuY2VvZiBFcnJvcj9gOiAke3cubWVzc2FnZX1gOiIiO3Rocm93IEVycm9yKGBFeHRlcm5hbCBsb2NhdGlvbiBVUkwgcmVqZWN0ZWQgW3VybDogJHtPNih6KX1dJHtUfWApfVA9bmV3IEFib3J0Q29udHJvbGxlcjt0cnl7cT1hd2FpdChaLmZldGNoPz9nbG9iYWxUaGlzLmZldGNoKSh6LHtyZWRpcmVjdDoibWFudWFsIixzaWduYWw6UC5zaWduYWwsZGVjb21wcmVzczohMX0pfWNhdGNoe3Rocm93IEVycm9yKGBFeHRlcm5hbCBsb2NhdGlvbiBmZXRjaCBmYWlsZWQgW3VybDogJHtPNih6KX1dYCl9aWYoIVszMDEsMzAyLDMwMywzMDcsMzA4XS5pbmNsdWRlcyhxLnN0YXR1cykpYnJlYWs7aWYoVj49WSl0aHJvdyBQLmFib3J0KCksRXJyb3IoYEV4dGVybmFsIGxvY2F0aW9uIHJlZGlyZWN0IGxpbWl0IGV4Y2VlZGVkICgke1l9KWApO2xldCBnPXEuaGVhZGVycy5nZXQoIkxvY2F0aW9uIik7aWYoIWcpdGhyb3cgUC5hYm9ydCgpLEVycm9yKGBFeHRlcm5hbCBsb2NhdGlvbiByZWRpcmVjdCBoYWQgbm8gTG9jYXRpb24gaGVhZGVyIFt1cmw6ICR7TzYoeil9XWApO3RyeXt6PW5ldyBVUkwoZyx6KS50b1N0cmluZygpfWNhdGNoe3Rocm93IFAuYWJvcnQoKSxFcnJvcihgRXh0ZXJuYWwgbG9jYXRpb24gcmVkaXJlY3QgdGFyZ2V0IGlzIGludmFsaWQgW3VybDogJHtPNih6KX1dYCl9UC5hYm9ydCgpfWlmKCFxLm9rKXRocm93IEVycm9yKGBFeHRlcm5hbCBsb2NhdGlvbiBmZXRjaCBmYWlsZWQ6ICR7cS5zdGF0dXN9ICR7cS5zdGF0dXNUZXh0fSBbdXJsOiAke082KHopfV1gKTtsZXQgVT1hd2FpdCB0aihxLEosUCk7aWYocS5oZWFkZXJzLmdldCgiQ29udGVudC1FbmNvZGluZyIpPT09InpzdGQiKXRyeXtVPW5ldyBVaW50OEFycmF5KGF3YWl0IEE2KFUsVykpfWNhdGNoKFYpe2lmKFYgaW5zdGFuY2VvZiBFcnJvciYmLyg/OmRlY29tcHJlc3NlZCBzaXplfFxiY2FwXGIpL2kudGVzdChWLm1lc3NhZ2UpKXRocm93IEVycm9yKGBFeHRlcm5hbCBsb2NhdGlvbiBkZWNvbXByZXNzZWQgYm9keSBleGNlZWRzIG1heF9kZWNvbXByZXNzZWRfYnl0ZXMgKCR7V30pYCk7dGhyb3cgRXJyb3IoIkV4dGVybmFsIGxvY2F0aW9uIHpzdGQgZGVjb21wcmVzc2lvbiBmYWlsZWQiKX1pZihVLmJ5dGVMZW5ndGg+Vyl0aHJvdyBFcnJvcihgRXh0ZXJuYWwgbG9jYXRpb24gZGVjb21wcmVzc2VkIGJvZHkgZXhjZWVkcyBtYXhfZGVjb21wcmVzc2VkX2J5dGVzICgke1UuYnl0ZUxlbmd0aH0gPiAke1d9KWApO2xldCBMPSQubWV0YWRhdGE/LmdldChFSCk7aWYoTCl7bGV0IFY9YXdhaXQgRE4oVSk7aWYoViE9PUwpdGhyb3cgRXJyb3IoYFNIQS0yNTYgY2hlY2tzdW0gbWlzbWF0Y2ggZm9yICR7TzYoeil9OiBleHBlY3RlZCAke0x9LCBnb3QgJHtWfWApfWxldCBEPW51bGw7Zm9yKGxldCBWIG9mIFJIKFUpKXtpZihWLm51bVJvd3M9PT0wJiZPJChWLFEpKWNvbnRpbnVlO0Q/Pz1WfWlmKEQ9PT1udWxsfHxELm51bVJvd3M9PT0wJiZELnNjaGVtYS5maWVsZHMubGVuZ3RoPT09MCl0aHJvdyBFcnJvcihgTm8gZGF0YSBiYXRjaCBmb3VuZCBpbiBleHRlcm5hbCBJUEMgc3RyZWFtIGZyb20gJHtPNih6KX1gKTtsZXQgUj1uZXcgTWFwKEQubWV0YWRhdGE/P1tdKTtyZXR1cm4gUi5zZXQoSE4sKEFOKCktSCkudG9GaXhlZCgxKSksUi5zZXQoek4sWCksZSQoRCxSKX12YXIgc2o9MTA0ODU3Nixpaj0yNjg0MzU0NTYscmo9NTt2YXIgSTg9TygoKT0+e3FaKCk7cEgoKTtZMSgpO21YKCl9KTtmdW5jdGlvbiBPTigkKXtpZighJClyZXR1cm5bXTtsZXQgWj1bXSxRPW5ldyBTZXQ7Zm9yKGxldCBYIG9mICQuc3BsaXQoIiwiKSl7bGV0IEo9WC50cmltKCkudG9Mb3dlckNhc2UoKTtpZighSiljb250aW51ZTtsZXQgVz1KLmluZGV4T2YoIjsiKTtpZihXPj0wKUo9Si5zbGljZSgwLFcpLnRyaW0oKTtpZighWlYuaW5jbHVkZXMoSikpY29udGludWU7aWYoUS5oYXMoSikpY29udGludWU7US5hZGQoSiksWi5wdXNoKEopfXJldHVybiBafWZ1bmN0aW9uIGpOKCQsWixRKXtsZXQgWD1PTigkKSxKPU9OKFopLFc9Wy4uLkosLi4uWC5maWx0ZXIoKFkpPT4hSi5pbmNsdWRlcyhZKSldO2ZvcihsZXQgWSBvZiBXKXtpZihZPT09ImlkZW50aXR5IilyZXR1cm57Y29kZWM6bnVsbCx1c2VkQ3VzdG9tOiExfTtpZihRKFkpKXJldHVybntjb2RlYzpZLHVzZWRDdXN0b206Si5pbmNsdWRlcyhZKSYmIVguaW5jbHVkZXMoWSl9fXJldHVybntjb2RlYzpudWxsLHVzZWRDdXN0b206Si5sZW5ndGg+MH19ZnVuY3Rpb24gU1coJCl7cmV0dXJuICQ/InpzdGQsIGd6aXAiOiJnemlwIn12YXIgQ049MSxySCxaVixDNj0iQ29udGVudC1FbmNvZGluZyIsSUo9IlgtVkdJLUNvbnRlbnQtRW5jb2RpbmciLF9KPSJYLVZHSS1BY2NlcHQtRW5jb2RpbmciLGFIPSJWR0ktU3VwcG9ydGVkLUVuY29kaW5ncyI7dmFyIEJXPU8oKCk9PntySD1bInpzdGQiLCJnemlwIl0sWlY9Wy4uLnJILCJpZGVudGl0eSJdfSk7YXN5bmMgZnVuY3Rpb24gVk4oJCxaLFEpe2xldCBYPVoud3JpdGFibGUuZ2V0V3JpdGVyKCksSj1aLnJlYWRhYmxlLmdldFJlYWRlcigpLFc9bmV3IFVpbnQ4QXJyYXkoJC5ieXRlTGVuZ3RoKTtXLnNldCgkKTtsZXQgWT0oYXN5bmMoKT0+e2F3YWl0IFgud3JpdGUoVyksYXdhaXQgWC5jbG9zZSgpfSkoKSxHPVtdLEg9MDt3aGlsZSghMCl7bGV0e3ZhbHVlOlAsZG9uZTpVfT1hd2FpdCBKLnJlYWQoKTtpZihVKWJyZWFrO2xldCBNPVA7aWYoSCs9TS5ieXRlTGVuZ3RoLFEhPW51bGwmJkg+USl0aHJvdyBFcnJvcihgZ3ppcCBkZWNvbXByZXNzZWQgc2l6ZSAoJHtIfSkgZXhjZWVkcyBjYXAgKCR7UX0pYCk7Ry5wdXNoKE0pfWF3YWl0IFk7bGV0IHo9bmV3IFVpbnQ4QXJyYXkoSCkscT0wO2ZvcihsZXQgUCBvZiBHKXouc2V0KFAscSkscSs9UC5ieXRlTGVuZ3RoO3JldHVybiB6fWFzeW5jIGZ1bmN0aW9uIGtXKCQsWil7cmV0dXJuIFZOKCQsbmV3IERlY29tcHJlc3Npb25TdHJlYW0oImd6aXAiKSxaKX1hc3luYyBmdW5jdGlvbiBSTigkLFope3JldHVybiBWTigkLG5ldyBDb21wcmVzc2lvblN0cmVhbSgiZ3ppcCIpKX1mdW5jdGlvbiBLMSgkLFosUSl7cmV0dXJuYCR7UT8ucHJlZml4Pz8iIn0vJHskfS8ke1p9JHtRPy5zdWZmaXg/PyIifWB9ZnVuY3Rpb24gajYoJCxaKXtyZXR1cm5gJHtaPy5wcmVmaXg/PyIifS8keyR9YH1mdW5jdGlvbiBfOCgkLFosUSl7cmV0dXJuYCR7JH0vJHtafSR7UT8uc3VmZml4Pz8iIn1gfWFzeW5jIGZ1bmN0aW9uIHRIKCQsWixRKXtpZighWilyZXR1cm4gJDtsZXQgWD1aLnNwbGl0KCIsIikubWFwKChXKT0+Vy50cmltKCkudG9Mb3dlckNhc2UoKSkuZmlsdGVyKChXKT0+Vy5sZW5ndGg+MCkucmV2ZXJzZSgpLEo9JDtmb3IobGV0IFcgb2YgWClpZihXPT09InpzdGQiKUo9YXdhaXQgQTYoSixRKTtlbHNlIGlmKFc9PT0iZ3ppcCIpSj1hd2FpdCBrVyhKLFEpO3JldHVybiBKfWZ1bmN0aW9uIFFWKCQpe2xldCBaPVtdO2lmKCQuZGVsZXRlKVoucHVzaChgJHskLm5hbWV9PWApLFoucHVzaCgiTWF4LUFnZT0wIik7ZWxzZXtpZihaLnB1c2goYCR7JC5uYW1lfT0keyQudmFsdWV9YCksJC5tYXhBZ2UhPT12b2lkIDApWi5wdXNoKGBNYXgtQWdlPSR7JC5tYXhBZ2V9YCk7aWYoJC5leHBpcmVzKVoucHVzaChgRXhwaXJlcz0keyQuZXhwaXJlcy50b1VUQ1N0cmluZygpfWApfWlmKCQucGF0aClaLnB1c2goYFBhdGg9JHskLnBhdGh9YCk7aWYoJC5kb21haW4pWi5wdXNoKGBEb21haW49JHskLmRvbWFpbn1gKTtpZigkLnNlY3VyZSlaLnB1c2goIlNlY3VyZSIpO2lmKCQuaHR0cE9ubHkpWi5wdXNoKCJIdHRwT25seSIpO2lmKCQuc2FtZVNpdGUpWi5wdXNoKGBTYW1lU2l0ZT0keyQuc2FtZVNpdGV9YCk7aWYoJC5wYXJ0aXRpb25lZClaLnB1c2goIlBhcnRpdGlvbmVkIik7cmV0dXJuIFouam9pbigiOyAiKX1mdW5jdGlvbiBhRygkLFope2ZvcihsZXQgUSBvZiBaKSQuYXBwZW5kKCJTZXQtQ29va2llIixRVihRKSl9ZnVuY3Rpb24gZjAoJCxaKXtsZXQgUT1aLm1hcCgoWCk9PlU2KFgsJCkpO3JldHVybiBONigkLFEpfWZ1bmN0aW9uIGZaKCQsWj0yMDAsUSl7bGV0IFg9UT8/bmV3IEhlYWRlcnM7aWYoWC5zZXQoIkNvbnRlbnQtVHlwZSIsT1opLFo9PT01MDApcmV0dXJuIFguc2V0KEJKLCJ0cnVlIiksbmV3IFJlc3BvbnNlKCQse3N0YXR1czoyMDAsaGVhZGVyczpYfSk7cmV0dXJuIG5ldyBSZXNwb25zZSgkLHtzdGF0dXM6WixoZWFkZXJzOlh9KX1hc3luYyBmdW5jdGlvbiB0RygkKXtsZXQgWj1rUSgkKTtpZihaLnNjaGVtYS5maWVsZHMubGVuZ3RoPT09MCYmWi5udW1Sb3dzPT09MCYmKFoubWV0YWRhdGE/LnNpemU/PzApPT09MCl0aHJvdyBuZXcgdyQoIkVtcHR5IElQQyBzdHJlYW06IG5vIHNjaGVtYSIsNDAwKTtyZXR1cm57c2NoZW1hOlouc2NoZW1hLGJhdGNoOlp9fXZhciBPWj0iYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5zdHJlYW0iLF9RPSJfX3VwbG9hZF91cmxfXyIsSVc9MTAwLFY2LFRKLGZYPSJWR0ktU2Vzc2lvbiIsaUc9IlZHSS1TZXNzaW9uLUFjY2VwdCIsX1c9IlZHSS1TZXNzaW9uLUNsb3NlIixlSD0iVkdJLVN0aWNreS1FbmFibGVkIiwkNz0iVkdJLVN0aWNreS1EZWZhdWx0LVRUTCIsWjc9IlZHSS1TdGlja3ktRWNoby1IZWFkZXJzIixUVz0iVkdJLUVjaG8tIixyRz0iX19zZXNzaW9uX18iLHckO3ZhciBKOD1PKCgpPT57cVooKTtZMSgpO1Y2PUUwKFtPMCgiY291bnQiLFZKKCksITApXSksVEo9RTAoW08wKCJ1cGxvYWRfdXJsIixaJCgpLCExKSxPMCgiZG93bmxvYWRfdXJsIixaJCgpLCExKSxPMCgiZXhwaXJlc19hdCIsVkgoIlVUQyIpLCExKV0pO3ckPWNsYXNzIHckIGV4dGVuZHMgRXJyb3J7c3RhdHVzQ29kZTtjb25zdHJ1Y3RvcigkLFope3N1cGVyKCQpO3RoaXMuc3RhdHVzQ29kZT1aLHRoaXMubmFtZT0iSHR0cFJwY0Vycm9yIn19fSk7ZnVuY3Rpb24gWFYoJCl7aWYoJC5ieXRlTGVuZ3RoPDQpcmV0dXJuITE7aWYoJFswXT09PTQwJiYkWzFdPT09MTgxJiYkWzJdPT09NDcmJiRbM109PT0yNTMpcmV0dXJuITA7cmV0dXJuKCRbMF0mMjQwKT09PTgwJiYkWzFdPT09NDImJiRbMl09PT03NyYmJFszXT09PTI0fWFzeW5jIGZ1bmN0aW9uIGdKKCQsWixRPUpWKXtsZXQgWD1FTigkLmhlYWRlcnMpLEo9JC5oZWFkZXJzLmdldChJSik/LnRyaW0oKS50b0xvd2VyQ2FzZSgpLFc9JC5oZWFkZXJzLmdldChDNik/LnRyaW0oKS50b0xvd2VyQ2FzZSgpLFk9WC5jb2RlYyE9PW51bGwsRz0hSiYmVyE9PXZvaWQgMCYmVyE9PW51bGwmJlsiZ3ppcCIsImRlZmxhdGUiLCJiciJdLmluY2x1ZGVzKFcpLEg9WT9ROlosej0kLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpO2lmKCFHJiZ6IT1udWxsJiYvXlswLTldKyQvLnRlc3Qoeikpe2xldCBEPU51bWJlcih6KTtpZihOdW1iZXIuaXNTYWZlSW50ZWdlcihEKSYmRD5IKXRocm93IGF3YWl0ICQuYm9keT8uY2FuY2VsKCJyZXNwb25zZSBsaW1pdCBleGNlZWRlZCIpLG5ldyBiKCJUcmFuc3BvcnRFcnJvciIsYEhUVFAgcmVzcG9uc2UgZXhjZWVkcyAke1k/InJlcHJlc2VudGF0aW9uIHNhZmV0eSI6ImFjY2VwdGVkIn0gbGltaXQgKCR7RH0gPiAke0h9KWAsIiIpfWlmKCEkLmJvZHkpcmV0dXJuIG5ldyBVaW50OEFycmF5O2xldCBxPSQuYm9keS5nZXRSZWFkZXIoKSxQPVtdLFU9MDt0cnl7d2hpbGUoITApe2xldHt2YWx1ZTpELGRvbmU6Un09YXdhaXQgcS5yZWFkKCk7aWYoUilicmVhaztpZihVKz1ELmJ5dGVMZW5ndGgsVT5IKXRocm93IGF3YWl0IHEuY2FuY2VsKCJyZXNwb25zZSBsaW1pdCBleGNlZWRlZCIpLG5ldyBiKCJUcmFuc3BvcnRFcnJvciIsYEhUVFAgcmVzcG9uc2UgZXhjZWVkcyAke1k/InJlcHJlc2VudGF0aW9uIHNhZmV0eSI6ImFjY2VwdGVkIn0gbGltaXQgKCR7VX0gPiAke0h9KWAsIiIpO1AucHVzaChEKX19ZmluYWxseXtxLnJlbGVhc2VMb2NrKCl9bGV0IE09bmV3IFVpbnQ4QXJyYXkoVSksTD0wO2ZvcihsZXQgRCBvZiBQKU0uc2V0KEQsTCksTCs9RC5ieXRlTGVuZ3RoO3JldHVybiBNfWZ1bmN0aW9uIEVOKCQpe2xldCBaPSQuZ2V0KElKKT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoWiYmWiE9PSJpZGVudGl0eSIpcmV0dXJue2NvZGVjOlosY3VzdG9tOiEwfTtsZXQgUT0kLmdldChDNik/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKFE9PT0ienN0ZCIpcmV0dXJue2NvZGVjOiJ6c3RkIixjdXN0b206ITF9O2lmKFEmJlEhPT0iaWRlbnRpdHkiJiYhWyJnemlwIiwiZGVmbGF0ZSIsImJyIl0uaW5jbHVkZXMoUSkpcmV0dXJue2NvZGVjOlEsY3VzdG9tOiExfTtyZXR1cm57Y29kZWM6bnVsbCxjdXN0b206ITF9fWFzeW5jIGZ1bmN0aW9uIGdXKCQsWixRLFgpe2xldHtjb2RlYzpKLGN1c3RvbTpXfT1FTigkKTtpZighSilyZXR1cm4gWjtpZihKPT09Imd6aXAiKXJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCBrVyhaLFgpKTtpZihKPT09InpzdGQiKXtpZighVyYmIVhWKFopKXJldHVybiBaO2lmKCFRKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiU2VydmVyIHNlbnQgYSB6c3RkLWVuY29kZWQgcmVzcG9uc2UgYnV0IHRoaXMgY2xpZW50IGhhcyBubyB6c3RkIGRlY29kZXIuIEluc3RhbGwgdGhlIG9wdGlvbmFsIHpzdGQgZGVwZW5kZW5jeSwgb3IgY29uZmlndXJlIHRoZSBzZXJ2ZXIgbm90IHRvIG5lZ290aWF0ZSB6c3RkLiIsIiIpO2xldCBZPW5ldyBVaW50OEFycmF5KGF3YWl0IFEoWixYKSk7aWYoWCE9bnVsbCYmWS5ieXRlTGVuZ3RoPlgpdGhyb3cgbmV3IGIoIlRyYW5zcG9ydEVycm9yIixgRGVjb2RlZCBIVFRQIHJlc3BvbnNlIGV4Y2VlZHMgYWNjZXB0ZWQgbGltaXQgKCR7WS5ieXRlTGVuZ3RofSA+ICR7WH0pYCwiIik7cmV0dXJuIFl9dGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLGBVbnN1cHBvcnRlZCByZXNwb25zZSBlbmNvZGluZyAnJHtKfScke1c/YCAoJHtJSn0pYDpgICgke0M2fSlgfS5gLCIiKX12YXIgSlY9MjY4NDM1NDU2O3ZhciBIMT1PKCgpPT57SFooKTtCVygpfSk7ZnVuY3Rpb24geFcoJCxaPSExKXtpZighJCl0aHJvdyBFcnJvcigiQSBwcm90b2NvbCBuYW1lIG1heSBub3QgYmUgZW1wdHkuIik7aWYobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCQpLmxlbmd0aD4yNTUpdGhyb3cgRXJyb3IoYFByb3RvY29sIG5hbWUgZXhjZWVkcyAyNTUgYnl0ZXM6ICR7JC5zbGljZSgwLDY0KX0uLi5gKTtpZighV1YudGVzdCgkKSl0aHJvdyBFcnJvcihgUHJvdG9jb2wgbmFtZSAnJHskfScgaXMgbm90IGFuIGlkZW50aWZpZXIsIG9wdGlvbmFsbHkgZG90LXF1YWxpZmllZC4gRXhwZWN0ZWQgc29tZXRoaW5nIGxpa2UgJ3ZnaS5JZGVudGl0eS52MScuYCk7aWYoIVomJiQuc3RhcnRzV2l0aCgidmdpX3JwYy4iKSl0aHJvdyBFcnJvcihgUHJvdG9jb2wgbmFtZSAnJHskfScgY2xhaW1zIHRoZSByZXNlcnZlZCAndmdpX3JwYy4nIHByZWZpeCwgd2hpY2ggaXMgZm9yIHByb3RvY29scyB0aGUgZnJhbWV3b3JrIGRlZmluZXMuYCl9ZnVuY3Rpb24gUTcoJCl7cmV0dXJuIHR5cGVvZiAkPy5iaW5kaW5ncz09PSJmdW5jdGlvbiJ9dmFyIFdWLHdOPSJ2Z2lfcnBjLiIsdlcsVDg7dmFyIHoxPU8oKCk9PntXVj0vXltBLVphLXpfXVtBLVphLXowLTlfLl0qJC87dlc9Y2xhc3MgdlcgZXh0ZW5kcyBFcnJvcntlcnJvcktpbmQ9InByb3RvY29sX25vdF9zcGVjaWZpZWQiO2NvbnN0cnVjdG9yKCQsWil7c3VwZXIoWj8/YFJlcXVlc3QgY2FycmllcyBubyAndmdpX3JwYy5wcm90b2NvbCcgcm91dGluZyBrZXkuIEV2ZXJ5IHJlcXVlc3QgbXVzdCBuYW1lIHRoZSBwcm90b2NvbCBpdCBhZGRyZXNzZXMuIFRoaXMgc2VydmVyIGhvc3RzOiBbJHskLmpvaW4oIiwgIil9XS5gKTt0aGlzLm5hbWU9IlByb3RvY29sTm90U3BlY2lmaWVkRXJyb3IifXN0YXRpYyBwZXJjZW50RW5jb2RlZCgpe3JldHVybiBuZXcgdlcoW10sIlRoZSBwcm90b2NvbCBwYXRoIHNlZ21lbnQgY29udGFpbnMgYSBwZXJjZW50IHNpZ24uIFRoZSBwcm90b2NvbCBuYW1lIGNoYXJzZXQgbmV2ZXIgcmVxdWlyZXMgcGVyY2VudC1lbmNvZGluZywgc28gdGhpcyBpcyByZWplY3RlZCByYXRoZXIgdGhhbiBkZWNvZGVkLiIpfX07VDg9Y2xhc3MgVDggZXh0ZW5kcyBFcnJvcntlcnJvcktpbmQ9InByb3RvY29sX25vdF9zdXBwb3J0ZWQiO2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMubmFtZT0iUHJvdG9jb2xOb3RTdXBwb3J0ZWRFcnJvciJ9c3RhdGljIG5vdEhvc3RlZCgkLFope3JldHVybiBuZXcgVDgoYFRoaXMgc2VydmVyIGRvZXMgbm90IGhvc3QgcHJvdG9jb2wgJyR7JH0nLiBIb3N0ZWQ6IFske1ouam9pbigiLCAiKX1dLmApfX19KTtmdW5jdGlvbiBTTigkKXtyZXR1cm4gJCE9bnVsbCYmdHlwZW9mICQubmFtZT09PSJzdHJpbmciJiYkLnR5cGUhPW51bGwmJnR5cGVvZiAkLm51bGxhYmxlPT09ImJvb2xlYW4ifWZ1bmN0aW9uIFlWKCQpe3JldHVybiAkIT1udWxsJiZ0eXBlb2YgJC50eXBlSWQ9PT0ibnVtYmVyIn1mdW5jdGlvbiBUUSgkKXtsZXQgWj0kLmZpZWxkcztpZihBcnJheS5pc0FycmF5KFopKXtsZXQgWD1bXTtmb3IobGV0IEogb2YgWilpZihTTihKKSlYLnB1c2goSik7ZWxzZSBYLnB1c2goTzAoSi5uYW1lLEoudHlwZSxKLm51bGxhYmxlPz8hMCxKLm1ldGFkYXRhKSk7cmV0dXJuIEUwKFgpfWxldCBRPVtdO2ZvcihsZXRbWCxKXW9mIE9iamVjdC5lbnRyaWVzKCQpKWlmKFNOKEopKVEucHVzaChKKTtlbHNlIGlmKFlWKEopKVEucHVzaChPMChYLEosITEpKTtlbHNlIHRocm93IFR5cGVFcnJvcihgSW52YWxpZCBzY2hlbWEgdmFsdWUgZm9yICIke1h9IjogZXhwZWN0ZWQgRGF0YVR5cGUgb3IgRmllbGQsIGdvdCAke3R5cGVvZiBKfWApO3JldHVybiBFMChRKX1mdW5jdGlvbiB5VygkKXtsZXQgWj1UUSgkKTtpZihaLmZpZWxkcy5sZW5ndGg9PT0wKXJldHVybjtsZXQgUT17fTtmb3IobGV0IFggb2YgWi5maWVsZHMpe2xldCBKO2lmKEJIKFgudHlwZSkpSj0ic3RyIjtlbHNlIGlmKFNIKFgudHlwZSkpSj0iYnl0ZXMiO2Vsc2UgaWYoX0goWC50eXBlKSlKPSJib29sIjtlbHNlIGlmKHdIKFgudHlwZSkpSj0iZmxvYXQiO2Vsc2UgaWYoWjEoWC50eXBlKSlKPSJpbnQiO2lmKCFKKXJldHVybjtRW1gubmFtZV09Sn1yZXR1cm4gUX12YXIgQk4sa04sSU4sX04sVE4sZ04seE4sdk4seU4saE4sYk4sbU4sZk47dmFyIFg3PU8oKCk9PntxWigpO0JOPVokKCksa049WDgoKSxJTj1WSigpLF9OPUxIKCksVE49TUgoKSxnTj1VSCgpLHhOPUFIKCksdk49REgoKSx5Tj1PSCgpLGhOPUNIKCksYk49dFkoKSxtTj1qSCgpLGZOPWpKKCl9KTtmdW5jdGlvbiBoVygkKXtsZXQgWj1uZXcgVWludDhBcnJheSgkKTtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKSxafWZ1bmN0aW9uIHVOKCQsWil7aWYoJC5sZW5ndGghPT1aLmxlbmd0aClyZXR1cm4hMTtsZXQgUT0wO2ZvcihsZXQgWD0wO1g8JC5sZW5ndGg7WCsrKVF8PSRbWF1eWltYXTtyZXR1cm4gUT09PTB9YXN5bmMgZnVuY3Rpb24gR1YoJCl7bGV0IFo9YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLCQpO3JldHVybiBuZXcgVWludDhBcnJheShaKX1hc3luYyBmdW5jdGlvbiBlRygkKXtsZXQgWj1hd2FpdCBHVigkKSxRPSIiO2ZvcihsZXQgWD0wO1g8Wi5sZW5ndGg7WCsrKVErPVpbWF0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4gUX12YXIgUjY9KCk9Pnt9O2Z1bmN0aW9uIHVYKCQsWil7Zm9yKGxldCBRPTA7UTwkLmxlbmd0aDtRKyspe2xldCBYPSQuY2hhckNvZGVBdChRKTtpZihYPj01NTI5NiYmWDw9NTYzMTkpe2xldCBKPSQuY2hhckNvZGVBdChRKzEpO2lmKCEoSj49NTYzMjAmJko8PTU3MzQzKSl0aHJvdyBUeXBlRXJyb3IoYCR7Wn0gY29udGFpbnMgYW4gdW5wYWlyZWQgc3Vycm9nYXRlYCk7USsrfWVsc2UgaWYoWD49NTYzMjAmJlg8PTU3MzQzKXRocm93IFR5cGVFcnJvcihgJHtafSBjb250YWlucyBhbiB1bnBhaXJlZCBzdXJyb2dhdGVgKX19ZnVuY3Rpb24gVzcoJCxaPSJldmlkZW5jZSIsUT0wLFg9e3ZhbHVlczowLHNvdXJjZUJ5dGVzOjB9KXtpZihRPnFWKXRocm93IFR5cGVFcnJvcihgJHtafSBleGNlZWRzIG1heGltdW0gSlNPTiBkZXB0aGApO2lmKFgudmFsdWVzKyssWC52YWx1ZXM+UFYpdGhyb3cgVHlwZUVycm9yKGAke1p9IGV4Y2VlZHMgbWF4aW11bSBKU09OIHZhbHVlIGNvdW50YCk7aWYoJD09PW51bGx8fHR5cGVvZiAkPT09ImJvb2xlYW4iKXJldHVybiAkO2lmKHR5cGVvZiAkPT09InN0cmluZyIpe2lmKHVYKCQsWiksJC5sZW5ndGg+JDUpdGhyb3cgVHlwZUVycm9yKGAke1p9IGV4Y2VlZHMgbWF4aW11bSBKU09OIGJ5dGUgc2l6ZWApO2lmKFguc291cmNlQnl0ZXMrPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgkKS5sZW5ndGgsWC5zb3VyY2VCeXRlcz4kNSl0aHJvdyBUeXBlRXJyb3IoYCR7Wn0gZXhjZWVkcyBtYXhpbXVtIEpTT04gYnl0ZSBzaXplYCk7cmV0dXJuICR9aWYodHlwZW9mICQ9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSl0aHJvdyBUeXBlRXJyb3IoYCR7Wn0gbnVtYmVycyBtdXN0IGJlIGZpbml0ZWApO3JldHVybiAkfWlmKEFycmF5LmlzQXJyYXkoJCkpcmV0dXJuIE9iamVjdC5mcmVlemUoJC5tYXAoKEosVyk9Plc3KEosYCR7Wn1bJHtXfV1gLFErMSxYKSkpO2lmKHR5cGVvZiAkPT09Im9iamVjdCImJk9iamVjdC5nZXRQcm90b3R5cGVPZigkKT09PU9iamVjdC5wcm90b3R5cGUpe2xldCBKPXt9O2ZvcihsZXRbVyxZXW9mIE9iamVjdC5lbnRyaWVzKCQpKXtpZih1WChXLGAke1p9IGtleWApLFguc291cmNlQnl0ZXMrPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShXKS5sZW5ndGgsWC5zb3VyY2VCeXRlcz4kNSl0aHJvdyBUeXBlRXJyb3IoYCR7Wn0gZXhjZWVkcyBtYXhpbXVtIEpTT04gYnl0ZSBzaXplYCk7aWYoWT09PXZvaWQgMCl0aHJvdyBUeXBlRXJyb3IoYCR7Wn0uJHtXfSBpcyBub3QgSlNPTi1jb21wYXRpYmxlYCk7SltXXT1XNyhZLGAke1p9LiR7V31gLFErMSxYKX1yZXR1cm4gT2JqZWN0LmZyZWV6ZShKKX10aHJvdyBUeXBlRXJyb3IoYCR7Wn0gaXMgbm90IEpTT04tY29tcGF0aWJsZWApfWZ1bmN0aW9uIFk3KCQsWil7bGV0IFE9VzcoJD8/e30sWik7aWYobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHExKFEpKS5sZW5ndGg+JDUpdGhyb3cgVHlwZUVycm9yKGAke1p9IGV4Y2VlZHMgbWF4aW11bSBKU09OIGJ5dGUgc2l6ZWApO3JldHVybiBRfWZ1bmN0aW9uIHExKCQpe2lmKCQ9PT1udWxsfHx0eXBlb2YgJCE9PSJvYmplY3QiKXJldHVybiBKU09OLnN0cmluZ2lmeSgkKTtpZihBcnJheS5pc0FycmF5KCQpKXJldHVybmBbJHskLm1hcChxMSkuam9pbigiLCIpfV1gO2xldCBaPSQ7cmV0dXJuYHske09iamVjdC5rZXlzKFopLnNvcnQoY04pLm1hcCgoUSk9PmAke0pTT04uc3RyaW5naWZ5KFEpfToke3ExKFpbUV0pfWApLmpvaW4oIiwiKX19YH1mdW5jdGlvbiBMVigkKXtmb3IobGV0IFogb2YgJCl7bGV0IFE9Wi5jb2RlUG9pbnRBdCgwKTtpZihRPD0zMXx8UT09PTEyNylyZXR1cm4hMH1yZXR1cm4hMX1jbGFzcyBQMXt0cmFuc3BvcnQ7aW1tZWRpYXRlUGVlcjtzb3VyY2VFbmRwb2ludDthc3NlcnRlZFBlZXI7ZGVzdGluYXRpb25BZGRyZXNzO2F1dGhvcml0eTtzZXJ2aWNlTmFtZTttZXRhZGF0YTtkZWFkbGluZTtidWRnZXRNczsjWjsjUTtjb25zdHJ1Y3RvcigkLFo9e30pe2lmKCEkKXRocm93IFR5cGVFcnJvcigicGVlciB0cmFuc3BvcnQgbXVzdCBub3QgYmUgZW1wdHkiKTt1WCgkLCJwZWVyIHRyYW5zcG9ydCIpLHRoaXMudHJhbnNwb3J0PSQ7Zm9yKGxldFtXLFldb2YgT2JqZWN0LmVudHJpZXMoe2ltbWVkaWF0ZVBlZXI6Wi5pbW1lZGlhdGVQZWVyLHNvdXJjZUVuZHBvaW50Olouc291cmNlRW5kcG9pbnQsYXNzZXJ0ZWRQZWVyOlouYXNzZXJ0ZWRQZWVyLGRlc3RpbmF0aW9uQWRkcmVzczpaLmRlc3RpbmF0aW9uQWRkcmVzcyxhdXRob3JpdHk6Wi5hdXRob3JpdHksc2VydmljZU5hbWU6Wi5zZXJ2aWNlTmFtZX0pKWlmKFkhPT12b2lkIDApdVgoWSxXKTtpZih0aGlzLmltbWVkaWF0ZVBlZXI9Wi5pbW1lZGlhdGVQZWVyLHRoaXMuc291cmNlRW5kcG9pbnQ9Wi5zb3VyY2VFbmRwb2ludCx0aGlzLmFzc2VydGVkUGVlcj1aLmFzc2VydGVkUGVlcix0aGlzLmRlc3RpbmF0aW9uQWRkcmVzcz1aLmRlc3RpbmF0aW9uQWRkcmVzcyx0aGlzLmF1dGhvcml0eT1aLmF1dGhvcml0eSx0aGlzLnNlcnZpY2VOYW1lPVouc2VydmljZU5hbWUsWi5kZWFkbGluZSE9PXZvaWQgMCYmKCFOdW1iZXIuaXNGaW5pdGUoWi5kZWFkbGluZSl8fFouZGVhZGxpbmU8PTApKXRocm93IFR5cGVFcnJvcigicGVlciBkZWFkbGluZSBtdXN0IGJlIGEgcG9zaXRpdmUgZXBvY2ggbWlsbGlzZWNvbmQgdmFsdWUiKTtpZih0aGlzLmRlYWRsaW5lPVouZGVhZGxpbmUsWi5idWRnZXRNcyE9PXZvaWQgMCYmKCFOdW1iZXIuaXNGaW5pdGUoWi5idWRnZXRNcyl8fFouYnVkZ2V0TXM8PTApKXRocm93IFR5cGVFcnJvcigicGVlciBidWRnZXRNcyBtdXN0IGJlIHBvc2l0aXZlIik7dGhpcy5idWRnZXRNcz1aLmJ1ZGdldE1zLHRoaXMuI1o9cGVyZm9ybWFuY2Uubm93KCksdGhpcy5tZXRhZGF0YT1ZNyhaLm1ldGFkYXRhLCJwZWVyIG1ldGFkYXRhIik7bGV0IFE9bmV3IE1hcCxYPVouaGVhZGVycyBpbnN0YW5jZW9mIE1hcD9aLmhlYWRlcnMuZW50cmllcygpOk9iamVjdC5lbnRyaWVzKFouaGVhZGVycz8/e30pLEo9MDtmb3IobGV0W1csWV1vZiBYKXtpZihRLnNpemU+PUZWKXRocm93IG5ldyBBJCgidG9vIG1hbnkgcGVlciBpZGVudGl0eSBoZWFkZXJzIik7aWYodVgoVywicGVlci1yZXNvbHV0aW9uIGhlYWRlciBuYW1lIiksIU1WLnRlc3QoVykpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIHBlZXItcmVzb2x1dGlvbiBoZWFkZXIgbmFtZSIpO2xldCBHPVcudG9Mb3dlckNhc2UoKTtpZihRLmhhcyhHKSl0aHJvdyBuZXcgQSQoImNhc2UtdmFyaWVkIGR1cGxpY2F0ZSBwZWVyIGlkZW50aXR5IGhlYWRlciIpO2lmKCFBcnJheS5pc0FycmF5KFkpKXRocm93IG5ldyBBJChgcGVlciBpZGVudGl0eSBoZWFkZXIgJHtKU09OLnN0cmluZ2lmeShXKX0gZGlkIG5vdCBwcmVzZXJ2ZSBtdWx0aXBsaWNpdHlgKTtsZXQgSD1PYmplY3QuZnJlZXplKFsuLi5ZXSk7aWYoSC5sZW5ndGg+TlYpdGhyb3cgbmV3IEEkKGB0b28gbWFueSB2YWx1ZXMgZm9yIHBlZXIgaWRlbnRpdHkgaGVhZGVyOiAke1d9YCk7aWYoSC5mb3JFYWNoKCh6KT0+e3VYKHosYHBlZXItcmVzb2x1dGlvbiBoZWFkZXIgdmFsdWU6ICR7V31gKX0pLEguc29tZSgoeik9PnR5cGVvZiB6IT09InN0cmluZyJ8fExWKHopKSl0aHJvdyBUeXBlRXJyb3IoYGludmFsaWQgcGVlci1yZXNvbHV0aW9uIGhlYWRlciB2YWx1ZTogJHtXfWApO0orPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShXKS5sZW5ndGg7Zm9yKGxldCB6IG9mIEgpSis9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHopLmxlbmd0aDtpZihKPlVWKXRocm93IG5ldyBBJCgicGVlciBpZGVudGl0eSBoZWFkZXJzIGFyZSB0b28gbGFyZ2UiKTtRLnNldChHLEgpfXRoaXMuI1E9USxPYmplY3QuZnJlZXplKHRoaXMpfWhlYWRlcigkKXt1WCgkLCJwZWVyLXJlc29sdXRpb24gaGVhZGVyIGxvb2t1cCIpO2xldCBaPXRoaXMuI1EuZ2V0KCQudG9Mb3dlckNhc2UoKSk/P1tdO2lmKFoubGVuZ3RoPjEpdGhyb3cgbmV3IEEkKGBkdXBsaWNhdGUgcGVlciBpZGVudGl0eSBoZWFkZXI6ICR7JH1gKTtyZXR1cm4gWlswXX1yZW1haW5pbmdCdWRnZXRNcygpe3JldHVybiB0aGlzLmJ1ZGdldE1zPT09dm9pZCAwP3ZvaWQgMDpNYXRoLm1heCgwLHRoaXMuYnVkZ2V0TXMtKHBlcmZvcm1hbmNlLm5vdygpLXRoaXMuI1opKX19Y2xhc3MgcFh7cHJvdmlkZXI7ZXZpZGVuY2VTb3VyY2U7YXNzdXJhbmNlO2lzc3Vlcjt0cmFuc3BvcnQ7c3ViamVjdEtpbmQ7c3ViamVjdEtleTtzdWJqZWN0U3RhYmlsaXR5O3N1YmplY3RWZXJpZmllZDthdHRyaWJ1dGVzO2NhcGFiaWxpdGllcztjYXBhYmlsaXRpZXNWZXJpZmllZDtzb3VyY2VBZGRyZXNzO3Byb3h5QWRkcmVzcztjb25zdHJ1Y3RvcigkKXtpZighJC5wcm92aWRlcnx8ISQuZXZpZGVuY2VTb3VyY2V8fCEkLmlzc3Vlcnx8ISQudHJhbnNwb3J0KXRocm93IFR5cGVFcnJvcigicHJvdmlkZXIsIGV2aWRlbmNlU291cmNlLCBpc3N1ZXIsIGFuZCB0cmFuc3BvcnQgYXJlIHJlcXVpcmVkIik7Zm9yKGxldFtYLEpdb2YgT2JqZWN0LmVudHJpZXMoe3Byb3ZpZGVyOiQucHJvdmlkZXIsZXZpZGVuY2VTb3VyY2U6JC5ldmlkZW5jZVNvdXJjZSxpc3N1ZXI6JC5pc3N1ZXIsdHJhbnNwb3J0OiQudHJhbnNwb3J0LHN1YmplY3RLZXk6JC5zdWJqZWN0S2V5LHNvdXJjZUFkZHJlc3M6JC5zb3VyY2VBZGRyZXNzLHByb3h5QWRkcmVzczokLnByb3h5QWRkcmVzc30pKWlmKEohPT12b2lkIDApdVgoSixYKTtsZXQgWj0kLnN1YmplY3RTdGFiaWxpdHk/P1c4Lk5PTkUsUT0kLnN1YmplY3RLaW5kPz9IWC5VTktOT1dOO2lmKCFLVi5oYXMoJC5hc3N1cmFuY2UpKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBwZWVyIGlkZW50aXR5IGFzc3VyYW5jZSIpO2lmKCFIVi5oYXMoUSkpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIHBlZXIgc3ViamVjdCBraW5kIik7aWYoIXpWLmhhcyhaKSl0aHJvdyBUeXBlRXJyb3IoImludmFsaWQgcGVlciBzdWJqZWN0IHN0YWJpbGl0eSIpO2lmKCQuc3ViamVjdFZlcmlmaWVkJiYhJC5zdWJqZWN0S2V5KXRocm93IFR5cGVFcnJvcigidmVyaWZpZWQgcGVlciBpZGVudGl0eSByZXF1aXJlcyBzdWJqZWN0S2V5Iik7aWYoISQuc3ViamVjdEtleSYmWiE9PVc4Lk5PTkUpdGhyb3cgVHlwZUVycm9yKCJzdWJqZWN0bGVzcyBwZWVyIGlkZW50aXR5IG11c3QgdXNlIG5vbmUgc3RhYmlsaXR5Iik7dGhpcy5wcm92aWRlcj0kLnByb3ZpZGVyLHRoaXMuZXZpZGVuY2VTb3VyY2U9JC5ldmlkZW5jZVNvdXJjZSx0aGlzLmFzc3VyYW5jZT0kLmFzc3VyYW5jZSx0aGlzLmlzc3Vlcj0kLmlzc3Vlcix0aGlzLnRyYW5zcG9ydD0kLnRyYW5zcG9ydCx0aGlzLnN1YmplY3RLaW5kPVEsdGhpcy5zdWJqZWN0S2V5PSQuc3ViamVjdEtleSx0aGlzLnN1YmplY3RTdGFiaWxpdHk9Wix0aGlzLnN1YmplY3RWZXJpZmllZD0kLnN1YmplY3RWZXJpZmllZD8/ITEsdGhpcy5hdHRyaWJ1dGVzPVk3KCQuYXR0cmlidXRlcywicGVlciBhdHRyaWJ1dGVzIiksdGhpcy5jYXBhYmlsaXRpZXM9WTcoJC5jYXBhYmlsaXRpZXMsInBlZXIgY2FwYWJpbGl0aWVzIiksdGhpcy5jYXBhYmlsaXRpZXNWZXJpZmllZD0kLmNhcGFiaWxpdGllc1ZlcmlmaWVkPz8hMSx0aGlzLnNvdXJjZUFkZHJlc3M9JC5zb3VyY2VBZGRyZXNzLHRoaXMucHJveHlBZGRyZXNzPSQucHJveHlBZGRyZXNzLE9iamVjdC5mcmVlemUodGhpcyl9Z2V0IGNhbm9uaWNhbFByaW5jaXBhbCgpe2lmKCF0aGlzLnN1YmplY3RLZXkpdGhyb3cgVHlwZUVycm9yKCJzdWJqZWN0bGVzcyBwZWVyIGV2aWRlbmNlIGhhcyBubyBjYW5vbmljYWwgcHJpbmNpcGFsIik7cmV0dXJuYHBlZXIvJHtKNyh0aGlzLnByb3ZpZGVyKX0vJHtKNyh0aGlzLmlzc3Vlcil9LyR7SjcodGhpcy5zdWJqZWN0S2V5KX1gfX1mdW5jdGlvbiBKNygkKXtsZXQgWj0iIjtmb3IobGV0IFEgb2YgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCQpKXtsZXQgWD1TdHJpbmcuZnJvbUNoYXJDb2RlKFEpO1orPS9bQS1aYS16MC05Ll9+LV0vLnRlc3QoWCk/WDpgJSR7US50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5wYWRTdGFydCgyLCIwIil9YH1yZXR1cm4gWn1jbGFzcyBQJHtwcm92aWRlcjtzdGF0dXM7aWRlbnRpdGllcztjb25zdHJ1Y3RvcigkLFosUT1bXSl7aWYoISQpdGhyb3cgVHlwZUVycm9yKCJwZWVyIGlkZW50aXR5IHByb3ZpZGVyIGlzIHJlcXVpcmVkIik7aWYodVgoJCwicGVlciBpZGVudGl0eSBwcm92aWRlciIpLCFwTi5oYXMoWikpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIHBlZXIgaWRlbnRpdHkgc3RhdHVzIik7aWYoWj09PUMwLkFWQUlMQUJMRSE9PVEubGVuZ3RoPjApdGhyb3cgVHlwZUVycm9yKCJvbmx5IGFuIGF2YWlsYWJsZSByZXN1bHQgbWF5IGNhcnJ5IGlkZW50aXRpZXMiKTtpZihRLnNvbWUoKFgpPT5YLnByb3ZpZGVyIT09JCkpdGhyb3cgVHlwZUVycm9yKCJwZWVyIHJlc3VsdCBwcm92aWRlciBtaXNtYXRjaCIpO3RoaXMucHJvdmlkZXI9JCx0aGlzLnN0YXR1cz1aLHRoaXMuaWRlbnRpdGllcz1PYmplY3QuZnJlZXplKFsuLi5RXSksT2JqZWN0LmZyZWV6ZSh0aGlzKX1zdGF0aWMgYXZhaWxhYmxlKCQpe3JldHVybiBuZXcgUCQoJC5wcm92aWRlcixDMC5BVkFJTEFCTEUsWyRdKX19ZnVuY3Rpb24gQVYoJCxaKXtmb3IobGV0IFE9MDtRPCQubGVuZ3RoO1ErKyl7bGV0IFg9Y04oJFtRXSxaW1FdKTtpZihYIT09MClyZXR1cm4gWH1yZXR1cm4gMH1mdW5jdGlvbiBjTigkLFope2xldCBRPUFycmF5LmZyb20oJCwoSik9PkouY29kZVBvaW50QXQoMCkpLFg9QXJyYXkuZnJvbShaLChKKT0+Si5jb2RlUG9pbnRBdCgwKSk7Zm9yKGxldCBKPTA7SjxNYXRoLm1pbihRLmxlbmd0aCxYLmxlbmd0aCk7SisrKXtpZihRW0pdPFhbSl0pcmV0dXJuLTE7aWYoUVtKXT5YW0pdKXJldHVybiAxfXJldHVybiBRLmxlbmd0aC1YLmxlbmd0aH1mdW5jdGlvbiBaNSgkLFope3JldHVybiBafWZ1bmN0aW9uIGxOKCQpe3JldHVybiBhc3luYyhaLFEpPT57cmV0dXJuIFoucmVxdWlyZUF2YWlsYWJsZVByb3ZpZGVyKCQpLERWKFEsYXdhaXQgWi5iaW5kaW5nRGlnZXN0KFskXSkpfX1mdW5jdGlvbiBiVygkKXtyZXR1cm4gYXN5bmMoWik9PntsZXQgUT1aLnJlcXVpcmVVc2FibGVQcm92aWRlcigkKTtyZXR1cm4gbmV3IHpaKCQsITAsUS5jYW5vbmljYWxQcmluY2lwYWwse2lzc3VlcjpRLmlzc3VlcixzdWJqZWN0X2tpbmQ6US5zdWJqZWN0S2luZCxhc3N1cmFuY2U6US5hc3N1cmFuY2UsZXZpZGVuY2Vfc291cmNlOlEuZXZpZGVuY2VTb3VyY2Usc3ViamVjdDpRLnN1YmplY3RLZXkscGVlcl9ldmlkZW5jZV9iaW5kaW5nOmF3YWl0IFouYmluZGluZ0RpZ2VzdChbJF0pfSl9fWZ1bmN0aW9uIGROKC4uLiQpe2lmKCQubGVuZ3RoPT09MCl0aHJvdyBUeXBlRXJyb3IoImF0IGxlYXN0IG9uZSBwZWVyIHByb3ZpZGVyIGlzIHJlcXVpcmVkIik7cmV0dXJuIGFzeW5jKFosUSk9Pntmb3IobGV0IFggb2YgJCl7bGV0IEo9Wi5zdGF0dXMoWCk7aWYoSj09PUMwLklOVkFMSUR8fEo9PT1DMC5VTlRSVVNURURfUFJPWFkpdGhyb3cgbmV3IEEkKGBwZWVyIGlkZW50aXR5IHByb3ZpZGVyICR7SlNPTi5zdHJpbmdpZnkoWCl9IHJlamVjdGVkIGV2aWRlbmNlYCk7aWYoWi5lbGlnaWJsZVN1YmplY3RzKFgpLmxlbmd0aD4xKXRocm93IG5ldyBBJChgcGVlciBpZGVudGl0eSBwcm92aWRlciAke0pTT04uc3RyaW5naWZ5KFgpfSBwcm9kdWNlZCBhbWJpZ3VvdXMgc3ViamVjdHNgKX1pZihRLmF1dGhlbnRpY2F0ZWQpcmV0dXJuIFE7Zm9yKGxldCBYIG9mICQpaWYoWi5zdGF0dXMoWCk9PT1DMC5BVkFJTEFCTEUmJlouZWxpZ2libGVTdWJqZWN0cyhYKS5sZW5ndGg9PT0xKXJldHVybiBiVyhYKShaLFEpO2lmKCQuc29tZSgoWCk9Plouc3RhdHVzKFgpPT09QzAuVU5BVkFJTEFCTEV8fFouc3RhdHVzKFgpPT09QzAuUEVSTUlTU0lPTl9ERU5JRUQpKXRocm93IG5ldyBCWigibm8gdXNhYmxlIGF1dGhlbnRpY2F0aW9uIGZhY3RvcjsgYSBwZWVyIHByb3ZpZGVyIGlzIHVuYXZhaWxhYmxlIik7dGhyb3cgbmV3IEEkKCJubyBjb25maWd1cmVkIHByb3ZpZGVyIHByb2R1Y2VkIGEgdmVyaWZpZWQgc3ViamVjdCIpfX1mdW5jdGlvbiBuTigkLFosUT0kWzBdKXtpZigkLmxlbmd0aD09PTB8fCFaKXRocm93IFR5cGVFcnJvcigiYWxsLW9mIHJlcXVpcmVzIHByb3ZpZGVycyBhbmQgYW4gaWRlbnRpdHkgbGlua2VyIik7aWYoISQuaW5jbHVkZXMoUSkpdGhyb3cgVHlwZUVycm9yKCJwcmluY2lwYWxQcm92aWRlciBtdXN0IGJlIG9uZSBvZiBwcm92aWRlcnMiKTtyZXR1cm4gYXN5bmMoWCxKKT0+e2lmKCFKLmF1dGhlbnRpY2F0ZWQpdGhyb3cgbmV3IEEkKCJhbGwtb2YgcmVxdWlyZXMgYXBwbGljYXRpb24gYXV0aGVudGljYXRpb24iKTtsZXQgVz1uZXcgTWFwO2ZvcihsZXQgRyBvZiAkKVcuc2V0KEcsWC5yZXF1aXJlVXNhYmxlUHJvdmlkZXIoRykpO2F3YWl0IFooSixXKTtsZXQgWT1hd2FpdCBiVyhRKShYLEopO3JldHVybiBuZXcgelooWS5kb21haW4sITAsWS5wcmluY2lwYWwsey4uLlkuY2xhaW1zLGFwcGxpY2F0aW9uX2RvbWFpbjpKLmRvbWFpbixhcHBsaWNhdGlvbl9wcmluY2lwYWw6Si5wcmluY2lwYWwscGVlcl9ldmlkZW5jZV9iaW5kaW5nOmF3YWl0IFguYmluZGluZ0RpZ2VzdCgkLEopfSl9fWZ1bmN0aW9uIERWKCQsWil7cmV0dXJuIG5ldyB6WigkLmRvbWFpbiwkLmF1dGhlbnRpY2F0ZWQsJC5wcmluY2lwYWwsey4uLiQuY2xhaW1zLHBlZXJfZXZpZGVuY2VfYmluZGluZzpafSl9dmFyIEMwLHBOLEtYLEtWLEhYLEhWLFc4LHpWLCQ1PTY1NTM2LHFWPTE2LFBWPTQwOTYsRlY9MTI4LE5WPTE2LFVWPTY1NTM2LE1WLGNYLEJaLEEkO3ZhciBtVz1PKCgpPT57cTYoKTtSNigpO0MwPXtPRkY6Im9mZiIsTk9UX0FQUExJQ0FCTEU6Im5vdF9hcHBsaWNhYmxlIixBVkFJTEFCTEU6ImF2YWlsYWJsZSIsVU5BVkFJTEFCTEU6InVuYXZhaWxhYmxlIixQRVJNSVNTSU9OX0RFTklFRDoicGVybWlzc2lvbl9kZW5pZWQiLE5PX01BVENIOiJub19tYXRjaCIsSU5WQUxJRDoiaW52YWxpZCIsVU5UUlVTVEVEX1BST1hZOiJ1bnRydXN0ZWRfcHJveHkifSxwTj1uZXcgU2V0KE9iamVjdC52YWx1ZXMoQzApKSxLWD17Q1JZUFRPR1JBUEhJQ19QRUVSOiJjcnlwdG9ncmFwaGljX3BlZXIiLExPQ0FMX0RBRU1PTjoibG9jYWxfZGFlbW9uIixDT05GSUdVUkVEX1BST1hZOiJjb25maWd1cmVkX3Byb3h5In0sS1Y9bmV3IFNldChPYmplY3QudmFsdWVzKEtYKSksSFg9e1VTRVI6InVzZXIiLFRBR0dFRF9OT0RFOiJ0YWdnZWRfbm9kZSIsV09SS0xPQUQ6Indvcmtsb2FkIixFTkRQT0lOVDoiZW5kcG9pbnQiLFVOS05PV046InVua25vd24ifSxIVj1uZXcgU2V0KE9iamVjdC52YWx1ZXMoSFgpKSxXOD17U1RBQkxFOiJzdGFibGUiLExPR0lOOiJsb2dpbiIsTk9ORToibm9uZSJ9LHpWPW5ldyBTZXQoT2JqZWN0LnZhbHVlcyhXOCkpLE1WPS9eWyEjJCUmJyorXC0uXl9gfH4wLTlBLVphLXpdKyQvO2NYPWNsYXNzIGNYe3N0YXRpYyBFTVBUWT1uZXcgY1g7aWRlbnRpdGllczsjWjtjb25zdHJ1Y3RvcigkPVtdKXtsZXQgWj1uZXcgTWFwLFE9W107Zm9yKGxldCBYIG9mICQpe2lmKCFwTi5oYXMoWC5zdGF0dXMpKXRocm93IFR5cGVFcnJvcihgaW52YWxpZCBwZWVyIGlkZW50aXR5IHN0YXR1czogJHtTdHJpbmcoWC5zdGF0dXMpfWApO2lmKFouaGFzKFgucHJvdmlkZXIpKXRocm93IFR5cGVFcnJvcihgZHVwbGljYXRlIHBlZXIgaWRlbnRpdHkgcHJvdmlkZXI6ICR7WC5wcm92aWRlcn1gKTtaLnNldChYLnByb3ZpZGVyLFguc3RhdHVzKSxRLnB1c2goLi4uWC5pZGVudGl0aWVzKX10aGlzLiNaPVosdGhpcy5pZGVudGl0aWVzPU9iamVjdC5mcmVlemUoUSksT2JqZWN0LmZyZWV6ZSh0aGlzKX1zdGF0dXMoJCl7cmV0dXJuIHRoaXMuI1ouZ2V0KCQpPz9DMC5PRkZ9Zm9yUHJvdmlkZXIoJCl7cmV0dXJuIE9iamVjdC5mcmVlemUodGhpcy5pZGVudGl0aWVzLmZpbHRlcigoWik9PloucHJvdmlkZXI9PT0kKSl9ZWxpZ2libGVTdWJqZWN0cygkKXtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh0aGlzLmZvclByb3ZpZGVyKCQpLmZpbHRlcigoWik9Plouc3ViamVjdFZlcmlmaWVkJiYhIVouc3ViamVjdEtleSYmWi5zdWJqZWN0U3RhYmlsaXR5PT09VzguU1RBQkxFKSl9dW5pcXVlVmVyaWZpZWRTdWJqZWN0KCQpe2xldCBaPXRoaXMuZWxpZ2libGVTdWJqZWN0cygkKTtpZihaLmxlbmd0aCE9PTEpdGhyb3cgbmV3IEEkKGBwcm92aWRlciAke0pTT04uc3RyaW5naWZ5KCQpfSBkaWQgbm90IHByb2R1Y2Ugb25lIHZlcmlmaWVkIHN0YWJsZSBzdWJqZWN0YCk7cmV0dXJuIFpbMF19cmVxdWlyZVVzYWJsZVByb3ZpZGVyKCQpe2xldCBaPXRoaXMuc3RhdHVzKCQpO2lmKFo9PT1DMC5VTkFWQUlMQUJMRXx8Wj09PUMwLlBFUk1JU1NJT05fREVOSUVEKXRocm93IG5ldyBCWihgcGVlciBpZGVudGl0eSBwcm92aWRlciAke0pTT04uc3RyaW5naWZ5KCQpfSBpcyB1bmF2YWlsYWJsZWApO2lmKFo9PT1DMC5JTlZBTElEfHxaPT09QzAuVU5UUlVTVEVEX1BST1hZKXRocm93IG5ldyBBJChgcGVlciBpZGVudGl0eSBwcm92aWRlciAke0pTT04uc3RyaW5naWZ5KCQpfSByZWplY3RlZCBldmlkZW5jZWAsWj09PUMwLlVOVFJVU1RFRF9QUk9YWT8icHJveHlfcmVxdWlyZWQiOiJpbnZhbGlkX2NyZWRlbnRpYWwiKTtyZXR1cm4gdGhpcy51bmlxdWVWZXJpZmllZFN1YmplY3QoJCl9cmVxdWlyZUF2YWlsYWJsZVByb3ZpZGVyKCQpe2xldCBaPXRoaXMuc3RhdHVzKCQpO2lmKFo9PT1DMC5VTkFWQUlMQUJMRXx8Wj09PUMwLlBFUk1JU1NJT05fREVOSUVEKXRocm93IG5ldyBCWihgcGVlciBpZGVudGl0eSBwcm92aWRlciAke0pTT04uc3RyaW5naWZ5KCQpfSBpcyB1bmF2YWlsYWJsZWApO2lmKFo9PT1DMC5JTlZBTElEfHxaPT09QzAuVU5UUlVTVEVEX1BST1hZKXRocm93IG5ldyBBJChgcGVlciBpZGVudGl0eSBwcm92aWRlciAke0pTT04uc3RyaW5naWZ5KCQpfSByZWplY3RlZCBldmlkZW5jZWAsWj09PUMwLlVOVFJVU1RFRF9QUk9YWT8icHJveHlfcmVxdWlyZWQiOiJpbnZhbGlkX2NyZWRlbnRpYWwiKTtsZXQgUT10aGlzLmZvclByb3ZpZGVyKCQpO2lmKFohPT1DMC5BVkFJTEFCTEV8fFEubGVuZ3RoPT09MCl0aHJvdyBuZXcgQSQoYHBlZXIgaWRlbnRpdHkgcHJvdmlkZXIgJHtKU09OLnN0cmluZ2lmeSgkKX0gZGlkIG5vdCBwcm9kdWNlIGV2aWRlbmNlYCk7cmV0dXJuIFF9YXN5bmMgYmluZGluZ0RpZ2VzdCgkLFope2xldCBRPVtdO2ZvcihsZXQgSCBvZlsuLi5uZXcgU2V0KCQpXS5zb3J0KCkpe1EucHVzaChILHRoaXMuc3RhdHVzKEgpKTtsZXQgej10aGlzLmZvclByb3ZpZGVyKEgpLm1hcCgocSk9PltxLnByb3ZpZGVyLHEuaXNzdWVyLHEuc3ViamVjdEtleT8/IiIscS5hc3N1cmFuY2UscS5ldmlkZW5jZVNvdXJjZSxxLnRyYW5zcG9ydCxxLnN1YmplY3RLaW5kLHEuc3ViamVjdFN0YWJpbGl0eSxTdHJpbmcocS5zdWJqZWN0VmVyaWZpZWQpLFN0cmluZyhxLmNhcGFiaWxpdGllc1ZlcmlmaWVkKSwiIiwiIixxMShxLmF0dHJpYnV0ZXMpLHExKHEuY2FwYWJpbGl0aWVzKV0pLnNvcnQoKHEsUCk9PkFWKHEsUCkpO2ZvcihsZXQgcSBvZiB6KVEucHVzaCguLi5xKX1pZihaKVEucHVzaCgiYXBwbGljYXRpb25fYXV0aCIsWi5kb21haW4/PyIiLFoucHJpbmNpcGFsPz8iIik7bGV0IFg9MCxKPVEubWFwKChIKT0+e2xldCB6PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShIKTtyZXR1cm4gWCs9OCt6Lmxlbmd0aCx6fSksVz1uZXcgVWludDhBcnJheShYKSxZPW5ldyBEYXRhVmlldyhXLmJ1ZmZlciksRz0wO2ZvcihsZXQgSCBvZiBKKVkuc2V0QmlnVWludDY0KEcsQmlnSW50KEgubGVuZ3RoKSksRys9OCxXLnNldChILEcpLEcrPUgubGVuZ3RoO3JldHVybiBlRyhXKX19O0JaPWNsYXNzIEJaIGV4dGVuZHMgRXJyb3J7cmV0cnlBZnRlcjtjb25zdHJ1Y3RvcigkPSJwZWVyIGlkZW50aXR5IHByb3ZpZGVyIHVuYXZhaWxhYmxlIixaPTUpe3N1cGVyKCQpO3RoaXMubmFtZT0iUGVlcklkZW50aXR5VW5hdmFpbGFibGVFcnJvciIsdGhpcy5yZXRyeUFmdGVyPVp9fTtBJD1jbGFzcyBBJCBleHRlbmRzIEVycm9ye3ZnaUF1dGhSZWFzb247Y29uc3RydWN0b3IoJCxaPSJpbnZhbGlkX2NyZWRlbnRpYWwiKXtzdXBlcigkKTt0aGlzLm5hbWU9IlBlZXJJZGVudGl0eVJlamVjdGVkRXJyb3IiLHRoaXMudmdpQXV0aFJlYXNvbj1afX19KTtmdW5jdGlvbiBvTigpe3JldHVybiBFcnJvcigic2V0Q29va2llL2RlbGV0ZUNvb2tpZSBpcyBvbmx5IHN1cHBvcnRlZCBpbnNpZGUgdW5hcnkgUlBDIG1ldGhvZHMgc2VydmVkIG92ZXIgSFRUUCIpfWZ1bmN0aW9uIFE1KCQpe3JldHVybiBuZXcgc04oJCl9Y2xhc3MgeFF7X2JhdGNoZXM9W107X2RhdGFCYXRjaElkeD1udWxsO19maW5pc2hlZD0hMTtfcHJvZHVjZXJNb2RlO19vdXRwdXRTY2hlbWE7X3NlcnZlcklkO19yZXF1ZXN0SWQ7X2Nvb2tpZVNpbmtFbmFibGVkPSExO19yZXNwb25zZUNvb2tpZXM9W107X3N0aWNreUNvbnRleHQ9bnVsbDthdXRoO3BlZXJFdmlkZW5jZTtpbnB1dE1ldGFkYXRhO2Nvb2tpZXM7a2luZDtyZW1haW5pbmdSZXNwb25zZUJ5dGVzO3Jlc3BvbnNlTGltaXRCeXRlcztwcmVmZXJyZWRSZXNwb25zZUJ5dGVzO3JlbWFpbmluZ0V4dGVybmFsaXplZFJlc3BvbnNlQnl0ZXM7ZXh0ZXJuYWxpemF0aW9uRW5hYmxlZDtjb25zdHJ1Y3RvcigkLFo9ITAsUT0iIixYPW51bGwsSixXLFksRyl7dGhpcy5fb3V0cHV0U2NoZW1hPSQsdGhpcy5fcHJvZHVjZXJNb2RlPVosdGhpcy5fc2VydmVySWQ9USx0aGlzLl9yZXF1ZXN0SWQ9WCx0aGlzLmF1dGg9Sj8/elouYW5vbnltb3VzKCksdGhpcy5wZWVyRXZpZGVuY2U9Rz8ucGVlckV2aWRlbmNlPz9jWC5FTVBUWSx0aGlzLmlucHV0TWV0YWRhdGE9Rz8uaW5wdXRNZXRhZGF0YSx0aGlzLmNvb2tpZXM9Vz8/T1YsdGhpcy5raW5kPVksdGhpcy5yZW1haW5pbmdSZXNwb25zZUJ5dGVzPUc/LnJlbWFpbmluZ1Jlc3BvbnNlQnl0ZXMsdGhpcy5yZXNwb25zZUxpbWl0Qnl0ZXM9Rz8ucmVzcG9uc2VMaW1pdEJ5dGVzPz9HPy5yZW1haW5pbmdSZXNwb25zZUJ5dGVzLHRoaXMucHJlZmVycmVkUmVzcG9uc2VCeXRlcz1HPy5wcmVmZXJyZWRSZXNwb25zZUJ5dGVzLHRoaXMucmVtYWluaW5nRXh0ZXJuYWxpemVkUmVzcG9uc2VCeXRlcz1HPy5yZW1haW5pbmdFeHRlcm5hbGl6ZWRSZXNwb25zZUJ5dGVzLHRoaXMuZXh0ZXJuYWxpemF0aW9uRW5hYmxlZD1HPy5leHRlcm5hbGl6YXRpb25FbmFibGVkfWVuYWJsZUNvb2tpZVNpbmsoKXt0aGlzLl9jb29raWVTaW5rRW5hYmxlZD0hMH1kcmFpblJlc3BvbnNlQ29va2llcygpe2xldCAkPXRoaXMuX3Jlc3BvbnNlQ29va2llcztyZXR1cm4gdGhpcy5fcmVzcG9uc2VDb29raWVzPVtdLCR9c2V0Q29va2llKCQsWixRKXtpZighdGhpcy5fY29va2llU2lua0VuYWJsZWQpdGhyb3cgb04oKTt0aGlzLl9yZXNwb25zZUNvb2tpZXMucHVzaCh7bmFtZTokLHZhbHVlOlosZGVsZXRlOiExLC4uLlE/P3t9fSl9ZGVsZXRlQ29va2llKCQsWil7aWYoIXRoaXMuX2Nvb2tpZVNpbmtFbmFibGVkKXRocm93IG9OKCk7dGhpcy5fcmVzcG9uc2VDb29raWVzLnB1c2goe25hbWU6JCx2YWx1ZToiIixkZWxldGU6ITAscGF0aDpaPy5wYXRoLGRvbWFpbjpaPy5kb21haW59KX1hdHRhY2hTdGlja3lDb250ZXh0KCQpe3RoaXMuX3N0aWNreUNvbnRleHQ9JH1nZXQgc2Vzc2lvbigpe3JldHVybiB0aGlzLl9zdGlja3lDb250ZXh0Py5zdGF0ZT8/bnVsbH1nZXQgc2Vzc2lvbklkKCl7cmV0dXJuIHRoaXMuX3N0aWNreUNvbnRleHQ/LnNlc3Npb25JZD8/bnVsbH1vcGVuU2Vzc2lvbigkLFope2xldCBRPXRoaXMuX3N0aWNreUNvbnRleHQ7aWYoIVEpdGhyb3cgUTUoInN0aWNreSBzZXNzaW9ucyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgdHJhbnNwb3J0Iik7aWYoIVEuYWNjZXB0T3BlbnMpdGhyb3cgUTUoImNsaWVudCBkaWQgbm90IG9wdCBpbiB0byBzdGlja3kgc2Vzc2lvbnMgIisiKG1pc3NpbmcgVkdJLVNlc3Npb24tQWNjZXB0OiB0cnVlIGhlYWRlciDigJQgb3BlbiB0aGUgY2FsbCBpbnNpZGUgIisiYW4gSHR0cENvbm5lY3Rpb24ud2l0aF9zZXNzaW9uX3Rva2VuKCkgYmxvY2spIik7aWYoUS5zdGF0ZSE9PW51bGwpdGhyb3cgUTUoImEgc3RpY2t5IHNlc3Npb24gaXMgYWxyZWFkeSBhY3RpdmUgZm9yIHRoaXMgcmVxdWVzdCIpO1EuX29wZW4oJCxaKSxRLmFjdGlvbj0ib3BlbiJ9Y2xvc2VTZXNzaW9uKCl7bGV0ICQ9dGhpcy5fc3RpY2t5Q29udGV4dDtpZighJCl0aHJvdyBRNSgic3RpY2t5IHNlc3Npb25zIG5vdCBhdmFpbGFibGUgb24gdGhpcyB0cmFuc3BvcnQiKTskLl9jbG9zZSgpLCQuYWN0aW9uPSJjbG9zZSJ9Z2V0IG91dHB1dFNjaGVtYSgpe3JldHVybiB0aGlzLl9vdXRwdXRTY2hlbWF9Z2V0IGZpbmlzaGVkKCl7cmV0dXJuIHRoaXMuX2ZpbmlzaGVkfWdldCBiYXRjaGVzKCl7cmV0dXJuIHRoaXMuX2JhdGNoZXN9Z2V0IGRhdGFCYXRjaElkeCgpe3JldHVybiB0aGlzLl9kYXRhQmF0Y2hJZHh9ZW1pdCgkLFope2xldCBRO2lmKGZIKCQpKVE9JDtlbHNle2xldCBYPWlIKHRoaXMuX291dHB1dFNjaGVtYSwkKSxKPXt9O2ZvcihsZXQgVyBvZiB0aGlzLl9vdXRwdXRTY2hlbWEuZmllbGRzKXtsZXQgWT1YW1cubmFtZV07SltXLm5hbWVdPUFycmF5LmlzQXJyYXkoWSk/WTpbWV19UT1ZUSh0aGlzLl9vdXRwdXRTY2hlbWEsSil9aWYodGhpcy5fZGF0YUJhdGNoSWR4IT09bnVsbCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsIk9ubHkgb25lIGRhdGEgYmF0Y2ggbWF5IGJlIGVtaXR0ZWQgcGVyIGNhbGwiLCIiKTt0aGlzLl9kYXRhQmF0Y2hJZHg9dGhpcy5fYmF0Y2hlcy5sZW5ndGgsdGhpcy5fYmF0Y2hlcy5wdXNoKHtiYXRjaDpRLG1ldGFkYXRhOlp9KX1lbWl0Um93KCQpe2xldCBaPXt9O2ZvcihsZXRbUSxYXW9mIE9iamVjdC5lbnRyaWVzKCQpKVpbUV09W1hdO3RoaXMuZW1pdChaKX1maW5pc2goKXtpZighdGhpcy5fcHJvZHVjZXJNb2RlKXRocm93IEVycm9yKCJmaW5pc2goKSBpcyBub3QgYWxsb3dlZCBvbiBleGNoYW5nZSBzdHJlYW1zOyBleGNoYW5nZSBzdHJlYW1zIG11c3QgZW1pdCBleGFjdGx5IG9uZSBkYXRhIGJhdGNoIHBlciBjYWxsIik7dGhpcy5fZmluaXNoZWQ9ITB9Y2xpZW50TG9nKCQsWixRKXtsZXQgWD1MTih0aGlzLl9vdXRwdXRTY2hlbWEsJCxaLFEsdGhpcy5fc2VydmVySWQsdGhpcy5fcmVxdWVzdElkKTt0aGlzLl9iYXRjaGVzLnB1c2goe2JhdGNoOlh9KX19dmFyIFMkLGdRLE9WLHNOO3ZhciBsWD1PKCgpPT57cVooKTtxNigpO0haKCk7bVcoKTttWCgpOyhmdW5jdGlvbigkKXskLlVOQVJZPSJ1bmFyeSIsJC5TVFJFQU09InN0cmVhbSJ9KShTJHx8KFMkPXt9KSk7KGZ1bmN0aW9uKCQpeyQuUElQRT0icGlwZSIsJC5IVFRQPSJodHRwIiwkLlVOSVg9InVuaXgiLCQuVENQPSJ0Y3AifSkoZ1F8fChnUT17fSkpO09WPW5ldyBNYXA7c049Y2xhc3Mgc04gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcigkKXtzdXBlcigkKTt0aGlzLm5hbWU9IlJ1bnRpbWVFcnJvciJ9fX0pO2NsYXNzIEU2e25hbWU7cHJvdG9jb2xWZXJzaW9uO3Byb3RvY29sVmVyc2lvblBhcnRzO19tZXRob2RzPW5ldyBNYXA7Y29uc3RydWN0b3IoJCxaKXt0aGlzLm5hbWU9JDtsZXQgUT1aPy5wcm90b2NvbFZlcnNpb247aWYoUT09PXZvaWQgMHx8UT09PSIiKXRoaXMucHJvdG9jb2xWZXJzaW9uPSIiLHRoaXMucHJvdG9jb2xWZXJzaW9uUGFydHM9bnVsbDtlbHNlIHRoaXMucHJvdG9jb2xWZXJzaW9uPVEsdGhpcy5wcm90b2NvbFZlcnNpb25QYXJ0cz1WVyhRKX11bmFyeSgkLFope2xldCBRPVRRKFoucGFyYW1zKTtyZXR1cm4gdGhpcy5fbWV0aG9kcy5zZXQoJCx7bmFtZTokLHR5cGU6UyQuVU5BUlkscGFyYW1zU2NoZW1hOlEscmVzdWx0U2NoZW1hOlRRKFoucmVzdWx0KSxoYW5kbGVyOlouaGFuZGxlcixkb2M6Wi5kb2MsZGVmYXVsdHM6Wi5kZWZhdWx0cyxwYXJhbVR5cGVzOloucGFyYW1UeXBlcz8/eVcoUSl9KSx0aGlzfXByb2R1Y2VyKCQsWil7bGV0IFE9VFEoWi5wYXJhbXMpO3JldHVybiB0aGlzLl9tZXRob2RzLnNldCgkLHtuYW1lOiQsdHlwZTpTJC5TVFJFQU0scGFyYW1zU2NoZW1hOlEscmVzdWx0U2NoZW1hOkc3LG91dHB1dFNjaGVtYTpUUShaLm91dHB1dFNjaGVtYSksaW5wdXRTY2hlbWE6RzcscHJvZHVjZXJJbml0OlouaW5pdCxwcm9kdWNlckZuOloucHJvZHVjZSxvbkNhbmNlbDpaLm9uQ2FuY2VsLGhlYWRlclNjaGVtYTpaLmhlYWRlclNjaGVtYT9UUShaLmhlYWRlclNjaGVtYSk6dm9pZCAwLGhlYWRlckluaXQ6Wi5oZWFkZXJJbml0LGRvYzpaLmRvYyxkZWZhdWx0czpaLmRlZmF1bHRzLHBhcmFtVHlwZXM6Wi5wYXJhbVR5cGVzPz95VyhRKX0pLHRoaXN9ZXhjaGFuZ2UoJCxaKXtsZXQgUT1UUShaLnBhcmFtcyk7cmV0dXJuIHRoaXMuX21ldGhvZHMuc2V0KCQse25hbWU6JCx0eXBlOlMkLlNUUkVBTSxwYXJhbXNTY2hlbWE6USxyZXN1bHRTY2hlbWE6RzcsaW5wdXRTY2hlbWE6VFEoWi5pbnB1dFNjaGVtYSksb3V0cHV0U2NoZW1hOlRRKFoub3V0cHV0U2NoZW1hKSxleGNoYW5nZUluaXQ6Wi5pbml0LGV4Y2hhbmdlRm46Wi5leGNoYW5nZSxvbkNhbmNlbDpaLm9uQ2FuY2VsLGhlYWRlclNjaGVtYTpaLmhlYWRlclNjaGVtYT9UUShaLmhlYWRlclNjaGVtYSk6dm9pZCAwLGhlYWRlckluaXQ6Wi5oZWFkZXJJbml0LGRvYzpaLmRvYyxkZWZhdWx0czpaLmRlZmF1bHRzLHBhcmFtVHlwZXM6Wi5wYXJhbVR5cGVzPz95VyhRKX0pLHRoaXN9Z2V0TWV0aG9kcygpe3JldHVybiBuZXcgTWFwKHRoaXMuX21ldGhvZHMpfWdldE1ldGhvZCgkKXtyZXR1cm4gdGhpcy5fbWV0aG9kcy5nZXQoJCl9bWV0aG9kTmFtZXMoKXtyZXR1cm5bLi4udGhpcy5fbWV0aG9kcy5rZXlzKCldLnNvcnQoKX19dmFyIEc3O3ZhciBYNT1PKCgpPT57cVooKTtIWigpO1g3KCk7bFgoKTtHNz1FMChbXSl9KTtmdW5jdGlvbiBKNSgkKXtpZih0eXBlb2YgJD09PSJudW1iZXIiJiYkPj0wJiYkPEs3Lmxlbmd0aClyZXR1cm4gSzdbJF07aWYodHlwZW9mICQ9PT0ic3RyaW5nIil7bGV0IFo9JC50b0xvd2VyQ2FzZSgpO2lmKFo9PT0ic2Vjb25kIilyZXR1cm4icyI7aWYoWj09PSJtaWxsaXNlY29uZCIpcmV0dXJuIm1zIjtpZihaPT09Im1pY3Jvc2Vjb25kIilyZXR1cm4idXMiO2lmKFo9PT0ibmFub3NlY29uZCIpcmV0dXJuIm5zIjtpZihLNy5pbmNsdWRlcyhaKSlyZXR1cm4gWn10aHJvdyBuZXcgZlcoYHRpbWUgdW5pdCAke1N0cmluZygkKX1gKX1mdW5jdGlvbiBGMSgkLFope3JldHVybmAke1p9JHskLm51bGxhYmxlPyI/IjoiIn06JHtXNSgkLnR5cGUpfWB9ZnVuY3Rpb24gaU4oJCl7cmV0dXJuIEYxKCQsJC5uYW1lKX1mdW5jdGlvbiBXNSgkKXtsZXQgWj0kO3N3aXRjaCgkLnR5cGVJZCl7Y2FzZSBnMC5OdWxsOnJldHVybiJudWxsIjtjYXNlIGcwLkJvb2w6cmV0dXJuImJvb2wiO2Nhc2UgZzAuSW50OntsZXQgUT1OdW1iZXIoWi5iaXRXaWR0aD8/NjQpO3JldHVybmAke1ouaXNTaWduZWQhPT0hMT8iaW50IjoidWludCJ9JHtRfWB9Y2FzZSBnMC5GbG9hdDp7bGV0IFE9TnVtYmVyKFoucHJlY2lzaW9uPz8yKTtyZXR1cm5bImZsb2F0MTYiLCJmbG9hdDMyIiwiZmxvYXQ2NCJdW1FdPz8iZmxvYXQ2NCJ9Y2FzZSBnMC5VdGY4OnJldHVybiJ1dGY4IjtjYXNlIGcwLkxhcmdlVXRmODpyZXR1cm4ibGFyZ2VfdXRmOCI7Y2FzZSBnMC5CaW5hcnk6cmV0dXJuImJpbmFyeSI7Y2FzZSBnMC5MYXJnZUJpbmFyeTpyZXR1cm4ibGFyZ2VfYmluYXJ5IjtjYXNlIGcwLkZpeGVkU2l6ZUJpbmFyeTpyZXR1cm5gZml4ZWRfc2l6ZV9iaW5hcnkoJHtOdW1iZXIoWi5ieXRlV2lkdGgpfSlgO2Nhc2UgZzAuRGF0ZTpyZXR1cm4gTnVtYmVyKFoudW5pdD8/MCk9PT0wPyJkYXRlMzIiOiJkYXRlNjQiO2Nhc2UgZzAuVGltZTpyZXR1cm5gdGltZSR7TnVtYmVyKFouYml0V2lkdGg/PzY0KX0oJHtKNShaLnVuaXQpfSlgO2Nhc2UgZzAuVGltZXN0YW1wOntsZXQgUT1aLnRpbWV6b25lPz9aLnRpbWVab25lPz9udWxsO3JldHVybiBRP2B0aW1lc3RhbXAoJHtKNShaLnVuaXQpfSx0ej0ke1N0cmluZyhRKX0pYDpgdGltZXN0YW1wKCR7SjUoWi51bml0KX0pYH1jYXNlIGcwLkR1cmF0aW9uOnJldHVybmBkdXJhdGlvbigke0o1KFoudW5pdCl9KWA7Y2FzZSBnMC5EZWNpbWFsOnJldHVybmBkZWNpbWFsJHtOdW1iZXIoWi5iaXRXaWR0aD8/MTI4KX0oJHtOdW1iZXIoWi5wcmVjaXNpb24pfSwke051bWJlcihaLnNjYWxlKX0pYDtjYXNlIGcwLkxpc3Q6cmV0dXJuYGxpc3Q8JHtGMShINyhaKSwiaXRlbSIpfT5gO2Nhc2UgZzAuRml4ZWRTaXplTGlzdDpyZXR1cm5gZml4ZWRfc2l6ZV9saXN0KCR7TnVtYmVyKFoubGlzdFNpemUpfSk8JHtGMShINyhaKSwiaXRlbSIpfT5gO2Nhc2UgZzAuU3RydWN0OnJldHVybmBzdHJ1Y3Q8JHt6NyhaKS5tYXAoaU4pLmpvaW4oIiwiKX0+YDtjYXNlIGcwLk1hcDp7bGV0IFE9ejcoSDcoWikudHlwZSk7aWYoUS5sZW5ndGghPT0yKXRocm93IG5ldyBmVygkKTtsZXQgWD1gbWFwPCR7RjEoUVswXSwia2V5Iil9LCR7RjEoUVsxXSwidmFsdWUiKX0+YDtyZXR1cm4gWi5rZXlzU29ydGVkP2Ake1h9LGtleXNfc29ydGVkYDpYfWNhc2UgZzAuRGljdGlvbmFyeTp7bGV0e2luZGljZXM6USxkaWN0aW9uYXJ5Olh9PVo7aWYoIVF8fCFYKXRocm93IG5ldyBmVygkKTtsZXQgSj1gZGljdGlvbmFyeTxpbmRleDoke1c1KFEpfSx2YWx1ZToke1c1KFgpfT5gO3JldHVybiBaLmlzT3JkZXJlZD9gJHtKfSxvcmRlcmVkYDpKfWNhc2UgZzAuVW5pb246e2xldCBRPVoudHlwZUlkcz8/W10sWD16NyhaKS5tYXAoKFcsWSk9PmAke1FbWV0/P1l9PSR7aU4oVyl9YCk7cmV0dXJuYCR7TnVtYmVyKFoubW9kZT8/MCk9PT0wPyJzcGFyc2VfdW5pb24iOiJkZW5zZV91bmlvbiJ9PCR7WC5qb2luKCIsIil9PmB9ZGVmYXVsdDp0aHJvdyBuZXcgZlcoJCl9fWZ1bmN0aW9uIEg3KCQpe2xldCBaPSQuY2hpbGRyZW4/P1tdO2lmKFoubGVuZ3RoIT09MSl0aHJvdyBuZXcgZlcoJCk7cmV0dXJuIFpbMF19ZnVuY3Rpb24gejcoJCl7cmV0dXJuICQuY2hpbGRyZW4/P1tdfWZ1bmN0aW9uIFk1KCQpe2lmKCEkKXJldHVybltdO3JldHVybiAkLm1hcCgoWik9Pih7bmFtZTpaLm5hbWUsbnVsbGFibGU6Wi5udWxsYWJsZSx0eXBlOlc1KFoudHlwZSl9KSl9dmFyIGZXLEs3O3ZhciByTj1PKCgpPT57dUgoKTtmVz1jbGFzcyBmVyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCQpe3N1cGVyKGBBcnJvdyB0eXBlICR7U3RyaW5nKCQpfSBoYXMgbm8gY2Fub25pY2FsIHRva2VuLiBBZGQgb25lIHRvIHNyYy90eXBlLXRva2Vucy50cyBhbmQgdG8gZXZlcnkgb3RoZXIgcG9ydCBhdCB0aGUgc2FtZSB0aW1lOiBhIG9uZS1zaWRlZCBhZGRpdGlvbiBjaGFuZ2VzIG9ubHkgdGhpcyBwb3J0J3MgcHJvdG9jb2wgaGFzaC5gKTt0aGlzLm5hbWU9IlVuc3VwcG9ydGVkQXJyb3dUeXBlRXJyb3IifX07Szc9WyJzIiwibXMiLCJ1cyIsIm5zIl19KTtmdW5jdGlvbiBqVigkLFope2xldCBYPVsuLi5aXS5zb3J0KChKLFcpPT5KLm5hbWU8Vy5uYW1lPy0xOkoubmFtZT5XLm5hbWU/MTowKS5tYXAoKEopPT57bGV0IFc9e25hbWU6Si5uYW1lLHR5cGU6Si5tZXRob2RUeXBlLGhhc19yZXR1cm46Si5oYXNSZXR1cm4saGFzX2hlYWRlcjpKLmhhc0hlYWRlcixwYXJhbXM6WTUoSi5wYXJhbXNGaWVsZHMpfTtpZihKLmhhc1JldHVybiYmSi5yZXN1bHRGaWVsZHMpVy5yZXN1bHQ9WTUoSi5yZXN1bHRGaWVsZHMpO2lmKEouaGFzSGVhZGVyJiZKLmhlYWRlckZpZWxkcylXLmhlYWRlcj1ZNShKLmhlYWRlckZpZWxkcyk7cmV0dXJuIFd9KTtyZXR1cm57cHJvdG9jb2w6JCxtZXRob2RzOlh9fWZ1bmN0aW9uIHE3KCQpe2lmKCQ9PT1udWxsKXJldHVybiJudWxsIjtpZih0eXBlb2YgJD09PSJib29sZWFuIilyZXR1cm4gJD8idHJ1ZSI6ImZhbHNlIjtpZih0eXBlb2YgJD09PSJzdHJpbmciKXJldHVybiBKU09OLnN0cmluZ2lmeSgkKTtpZih0eXBlb2YgJD09PSJudW1iZXIifHx0eXBlb2YgJD09PSJiaWdpbnQiKXRocm93IFR5cGVFcnJvcihgVGhlIHByb3RvY29sLWhhc2ggcHJlaW1hZ2UgY2FycmllcyBubyBudW1iZXJzLCBidXQgZm91bmQgJHtTdHJpbmcoJCl9LiBGb2xkIGl0IGludG8gYSB0eXBlIHRva2VuIChlLmcuICdkZWNpbWFsMTI4KDM4LDkpJykgaW5zdGVhZC5gKTtpZihBcnJheS5pc0FycmF5KCQpKXJldHVybmBbJHskLm1hcChxNykuam9pbigiLCIpfV1gO2lmKHR5cGVvZiAkPT09Im9iamVjdCIpe2xldCBaPSQ7cmV0dXJuYHske09iamVjdC5rZXlzKFopLnNvcnQoKS5tYXAoKFgpPT5gJHtKU09OLnN0cmluZ2lmeShYKX06JHtxNyhaW1hdKX1gKS5qb2luKCIsIil9fWB9dGhyb3cgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCB2YWx1ZSBpbiB0aGUgcHJvdG9jb2wtaGFzaCBwcmVpbWFnZTogJHtTdHJpbmcoJCl9YCl9ZnVuY3Rpb24gVlYoJCxaKXtyZXR1cm4gcTcoalYoJCxaKSl9YXN5bmMgZnVuY3Rpb24gYU4oJCxaKXtsZXQgUT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoQ1YrVlYoJCxaKSksWD1hd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsUSk7cmV0dXJuWy4uLm5ldyBVaW50OEFycmF5KFgpXS5tYXAoKEopPT5KLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpfXZhciBDVj0idmdpX3JwYy5wcm90b2NvbF9oYXNoLnYxfCI7dmFyIHROPU8oKCk9PntyTigpfSk7ZnVuY3Rpb24gVTEoKXtyZXR1cm5gJyR7cFd9JyB3YXMgcmV0aXJlZC4gSW50cm9zcGVjdGlvbiBpcyBub3cgdGhlICcke3VafScgcHJvdG9jb2w6IGNhbGwgJyR7TjF9JyBmb3Igd2hhdCB0aGlzIHNlcnZlciBob3N0cywgdGhlbiAnJHt3Nn0nIGZvciBvbmUgcHJvdG9jb2wncyBtZXRob2RzLmB9ZnVuY3Rpb24gZU4oJCxaKXtsZXQgUT17fTtmb3IobGV0IFggb2YgWi5maWVsZHMpUVtYLm5hbWVdPVskW1gubmFtZV1dO3JldHVybiBtWihZUShaLFEpKX1mdW5jdGlvbiBHNSgkLFope3JldHVybiBFcnJvcihgQ291bGQgbm90IGRlY29kZSBhICcke3VafScgJHskfTogJHtafS4gVGhlIHJlcGx5IGNhbWUgZnJvbSBhIHNlcnZlciB0aGlzIGNsaWVudCBjYW5ub3QgcmVhZDsgY2hlY2sgdGhhdCBpdCBob3N0cyBhIGNvbXBhdGlibGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgcmVmbGVjdGlvbiBwcm90b2NvbC5gKX1mdW5jdGlvbiBnOCgkLFosUSl7bGV0IFg9JFtaXTtpZihYPT09dm9pZCAwfHxYPT09bnVsbCl0aHJvdyBHNShRLGBpdCBjYXJyaWVzIG5vICcke1p9JywgYW5kIHRoYXQgZmllbGQgaGFzIG5vIGRlZmF1bHRgKTtyZXR1cm4gWH1mdW5jdGlvbiB1VygkLFosUSl7bGV0IFg9JFtaXTtyZXR1cm4gWD09PXZvaWQgMHx8WD09PW51bGw/UTpYfWZ1bmN0aW9uIFA3KCQsWil7bGV0IFE9JFtaXTtpZihRPT09dm9pZCAwfHxRPT09bnVsbClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7cmV0dXJuIFF9ZnVuY3Rpb24gWFUoJCxaLFEpe2xldCBYPSQuZ2V0Q2hpbGQoWik7aWYoWD09PW51bGwpdGhyb3cgRzUoUSxgdGhlIHBheWxvYWQgaGFzIG5vICcke1p9JyBjb2x1bW5gKTtsZXQgSj1YLmdldCgwKTtpZihKPT09dm9pZCAwfHxKPT09bnVsbCl0aHJvdyBHNShRLGBpdHMgJyR7Wn0nIGNvbHVtbiBpcyBudWxsYCk7cmV0dXJuWy4uLkpdfWZ1bmN0aW9uIEpVKCQsWil7bGV0IFE9a1EoJCk7aWYoUS5udW1Sb3dzPDEpdGhyb3cgRzUoWiwidGhlIHBheWxvYWQgY2FycmllcyBubyByb3dzIik7cmV0dXJuIFF9ZnVuY3Rpb24gV1UoJCl7cmV0dXJue3Byb3RvY29sOmc4KCQsInByb3RvY29sIiwicHJvdG9jb2wgc3VtbWFyeSIpLHByb3RvY29sX3ZlcnNpb246ZzgoJCwicHJvdG9jb2xfdmVyc2lvbiIsInByb3RvY29sIHN1bW1hcnkiKSxwcm90b2NvbF9oYXNoOmc4KCQsInByb3RvY29sX2hhc2giLCJwcm90b2NvbCBzdW1tYXJ5IiksZGVwcmVjYXRlZDp1VygkLCJkZXByZWNhdGVkIiwhMSksZGVwcmVjYXRpb25fbWVzc2FnZTp1VygkLCJkZXByZWNhdGlvbl9tZXNzYWdlIiwiIiksZmVhdHVyZXM6Wy4uLnVXKCQsImZlYXR1cmVzIixbXSldLm1hcChTdHJpbmcpfX1mdW5jdGlvbiBTVigkKXtyZXR1cm57bmFtZTpnOCgkLCJuYW1lIiwibWV0aG9kIGRlc2NyaXB0aW9uIiksbWV0aG9kX3R5cGU6ZzgoJCwibWV0aG9kX3R5cGUiLCJtZXRob2QgZGVzY3JpcHRpb24iKSxoYXNfcmV0dXJuOmc4KCQsImhhc19yZXR1cm4iLCJtZXRob2QgZGVzY3JpcHRpb24iKSxoYXNfaGVhZGVyOmc4KCQsImhhc19oZWFkZXIiLCJtZXRob2QgZGVzY3JpcHRpb24iKSxzdHJlYW1fa2luZDpnOCgkLCJzdHJlYW1fa2luZCIsIm1ldGhvZCBkZXNjcmlwdGlvbiIpLHBhcmFtc19zY2hlbWFfaXBjOlA3KCQsInBhcmFtc19zY2hlbWFfaXBjIikscmVzdWx0X3NjaGVtYV9pcGM6UDcoJCwicmVzdWx0X3NjaGVtYV9pcGMiKSxoZWFkZXJfc2NoZW1hX2lwYzpQNygkLCJoZWFkZXJfc2NoZW1hX2lwYyIpLGlkZW1wb3RlbmN5OnVXKCQsImlkZW1wb3RlbmN5IiwidW5rbm93biIpLGRlcHJlY2F0ZWQ6dVcoJCwiZGVwcmVjYXRlZCIsITEpLGRlcHJlY2F0aW9uX21lc3NhZ2U6dVcoJCwiZGVwcmVjYXRpb25fbWVzc2FnZSIsIiIpfX1mdW5jdGlvbiBLNSgkKXtsZXQgWj1KVSgkLCJwcm90b2NvbCBsaXN0aW5nIiksUT17c2VydmVyX2lkOlouZ2V0Q2hpbGQoInNlcnZlcl9pZCIpPy5nZXQoMCksc2VydmVyX3ZlcnNpb246Wi5nZXRDaGlsZCgic2VydmVyX3ZlcnNpb24iKT8uZ2V0KDApLHJlcXVlc3RfdmVyc2lvbjpaLmdldENoaWxkKCJyZXF1ZXN0X3ZlcnNpb24iKT8uZ2V0KDApfTtyZXR1cm57c2VydmVyX2lkOmc4KFEsInNlcnZlcl9pZCIsInByb3RvY29sIGxpc3RpbmciKSxzZXJ2ZXJfdmVyc2lvbjpnOChRLCJzZXJ2ZXJfdmVyc2lvbiIsInByb3RvY29sIGxpc3RpbmciKSxyZXF1ZXN0X3ZlcnNpb246ZzgoUSwicmVxdWVzdF92ZXJzaW9uIiwicHJvdG9jb2wgbGlzdGluZyIpLHByb3RvY29sczpYVShaLCJwcm90b2NvbHMiLCJwcm90b2NvbCBsaXN0aW5nIikubWFwKFdVKX19ZnVuY3Rpb24gSDUoJCl7bGV0IFo9SlUoJCwic2VydmljZSBkZXNjcmlwdGlvbiIpLFE9e307Zm9yKGxldCBYIG9mIFouc2NoZW1hLmZpZWxkcylpZihYLm5hbWUhPT0ibWV0aG9kcyIpUVtYLm5hbWVdPVouZ2V0Q2hpbGQoWC5uYW1lKT8uZ2V0KDApO3JldHVybnsuLi5XVShRKSxtZXRob2RzOlhVKFosIm1ldGhvZHMiLCJzZXJ2aWNlIGRlc2NyaXB0aW9uIikubWFwKFNWKX19ZnVuY3Rpb24gRjcoJCl7aWYoISQpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3JldHVybiBlWSgkKX1mdW5jdGlvbiBCVigkKXtpZigkLnR5cGU9PT1TJC5VTkFSWSlyZXR1cm4iIjtpZigkLmV4Y2hhbmdlRm4pcmV0dXJuImV4Y2hhbmdlIjtpZigkLnByb2R1Y2VyRm4pcmV0dXJuInByb2R1Y2VyIjtyZXR1cm4idW5rbm93biJ9ZnVuY3Rpb24gTjcoJCl7cmV0dXJuICQudHlwZT09PVMkLlVOQVJZJiYoJC5yZXN1bHRTY2hlbWE/LmZpZWxkcy5sZW5ndGg/PzApPjB9ZnVuY3Rpb24ga1YoJCl7cmV0dXJue25hbWU6JC5uYW1lLG1ldGhvZF90eXBlOiQudHlwZT09PVMkLlVOQVJZPyJ1bmFyeSI6InN0cmVhbSIsaGFzX3JldHVybjpONygkKSxoYXNfaGVhZGVyOiQuaGVhZGVyU2NoZW1hIT09dm9pZCAwLHN0cmVhbV9raW5kOkJWKCQpLHBhcmFtc19zY2hlbWFfaXBjOkY3KCQucGFyYW1zU2NoZW1hKSxyZXN1bHRfc2NoZW1hX2lwYzpONygkKT9GNygkLnJlc3VsdFNjaGVtYSk6bmV3IFVpbnQ4QXJyYXkoMCksaGVhZGVyX3NjaGVtYV9pcGM6RjcoJC5oZWFkZXJTY2hlbWEpLGlkZW1wb3RlbmN5OiJ1bmtub3duIixkZXByZWNhdGVkOiExLGRlcHJlY2F0aW9uX21lc3NhZ2U6IiJ9fWFzeW5jIGZ1bmN0aW9uIElWKCQsWil7bGV0IFE9W107Zm9yKGxldCBYIG9mIFoudmFsdWVzKCkpe2xldCBKPXtuYW1lOlgubmFtZSxtZXRob2RUeXBlOlgudHlwZT09PVMkLlVOQVJZPyJ1bmFyeSI6InN0cmVhbSIsaGFzUmV0dXJuOk43KFgpLGhhc0hlYWRlcjpYLmhlYWRlclNjaGVtYSE9PXZvaWQgMCxwYXJhbXNGaWVsZHM6WC5wYXJhbXNTY2hlbWE/LmZpZWxkcz8/W119O2lmKEouaGFzUmV0dXJuKUoucmVzdWx0RmllbGRzPVgucmVzdWx0U2NoZW1hPy5maWVsZHM/P1tdO2lmKEouaGFzSGVhZGVyKUouaGVhZGVyRmllbGRzPVguaGVhZGVyU2NoZW1hPy5maWVsZHM/P1tdO1EucHVzaChKKX1yZXR1cm4gYU4oJCxRKX1mdW5jdGlvbiBjVygkKXtsZXQgWj0kVS5nZXQoJC5wcm90b2NvbCk7aWYoIVopWj1uZXcgTWFwLCRVLnNldCgkLnByb3RvY29sLFopO2xldCBRPVouZ2V0KCQubmFtZSk7aWYoIVEpUT1JVigkLm5hbWUsJC5wcm90b2NvbC5nZXRNZXRob2RzKCkpLFouc2V0KCQubmFtZSxRKTtyZXR1cm4gUX1mdW5jdGlvbiB6NSgkKXtsZXQgWj1uZXcgRTYodVopO3JldHVybiBaLnVuYXJ5KCJsaXN0X3Byb3RvY29scyIse3BhcmFtczp7fSxyZXN1bHQ6e3Jlc3VsdDpYOCgpfSxkb2M6IlJldHVybiBldmVyeSBwcm90b2NvbCB0aGlzIHNlcnZlciBob3N0cywgd2l0aCB2ZXJzaW9ucyBhbmQgaGFzaGVzLiIsaGFuZGxlcjphc3luYygpPT57bGV0IFE9JC5saXN0QmluZGluZ3MoKSxYPVsuLi5RLmtleXMoKV0uc29ydCgpLEo9W107Zm9yKGxldCBZIG9mIFgpe2xldCBHPVEuZ2V0KFkpO0oucHVzaCh7cHJvdG9jb2w6Ry5uYW1lLHByb3RvY29sX3ZlcnNpb246Ry5wcm90b2NvbC5wcm90b2NvbFZlcnNpb24/PyIiLHByb3RvY29sX2hhc2g6YXdhaXQgJC5oYXNoRm9yKFkpLGRlcHJlY2F0ZWQ6ITEsZGVwcmVjYXRpb25fbWVzc2FnZToiIixmZWF0dXJlczpbXX0pfWxldCBXPXtzZXJ2ZXJfaWQ6JC5zZXJ2ZXJJZCgpLHNlcnZlcl92ZXJzaW9uOiQuc2VydmVyVmVyc2lvbigpLHJlcXVlc3RfdmVyc2lvbjpJUSxwcm90b2NvbHM6Sn07cmV0dXJue3Jlc3VsdDplTihXLEVWKX19fSksWi51bmFyeSgiZGVzY3JpYmUiLHtwYXJhbXM6e3Byb3RvY29sOlokKCl9LHJlc3VsdDp7cmVzdWx0Olg4KCl9LGRvYzoiUmV0dXJuIG9uZSBwcm90b2NvbCdzIGZ1bGwgZGVzY3JpcHRpb24uIixoYW5kbGVyOmFzeW5jKFEpPT57bGV0IFg9U3RyaW5nKFEucHJvdG9jb2w/PyIiKSxKPSQubGlzdEJpbmRpbmdzKCksVz1KLmdldChYKTtpZighVyl0aHJvdyBUOC5ub3RIb3N0ZWQoWCxbLi4uSi5rZXlzKCldLnNvcnQoKSk7bGV0IFk9Wy4uLlcucHJvdG9jb2wuZ2V0TWV0aG9kcygpLnZhbHVlcygpXS5zb3J0KChILHopPT5ILm5hbWU8ei5uYW1lPy0xOkgubmFtZT56Lm5hbWU/MTowKS5tYXAoa1YpLEc9e3Byb3RvY29sOlcubmFtZSxwcm90b2NvbF92ZXJzaW9uOlcucHJvdG9jb2wucHJvdG9jb2xWZXJzaW9uPz8iIixwcm90b2NvbF9oYXNoOmF3YWl0ICQuaGFzaEZvcihYKSxkZXByZWNhdGVkOiExLGRlcHJlY2F0aW9uX21lc3NhZ2U6IiIsZmVhdHVyZXM6W10sbWV0aG9kczpZfTtyZXR1cm57cmVzdWx0OmVOKEcsd1YpfX19KSxafXZhciB1Wj0idmdpX3JwYy5SZWZsZWN0aW9uLnYxIixOMT0ibGlzdF9wcm90b2NvbHMiLHc2PSJkZXNjcmliZSIsWlUscFc9Il9fZGVzY3JpYmVfXyIsUVUsUlYsRVYsd1YsJFU7dmFyIE0xPU8oKCk9PntxWigpO3oxKCk7WDUoKTt0TigpO2xYKCk7WlU9RTAoW08wKCJwcm90b2NvbCIsWiQoKSwhMSldKTtRVT1bTzAoInByb3RvY29sIixaJCgpLCExKSxPMCgicHJvdG9jb2xfdmVyc2lvbiIsWiQoKSwhMSksTzAoInByb3RvY29sX2hhc2giLFokKCksITEpLE8wKCJkZXByZWNhdGVkIixqSigpLCExKSxPMCgiZGVwcmVjYXRpb25fbWVzc2FnZSIsWiQoKSwhMSksTzAoImZlYXR1cmVzIixQNihPMCgiaXRlbSIsWiQoKSwhMCkpLCExKV0sUlY9W08wKCJuYW1lIixaJCgpLCExKSxPMCgibWV0aG9kX3R5cGUiLFokKCksITEpLE8wKCJoYXNfcmV0dXJuIixqSigpLCExKSxPMCgiaGFzX2hlYWRlciIsakooKSwhMSksTzAoInN0cmVhbV9raW5kIixaJCgpLCExKSxPMCgicGFyYW1zX3NjaGVtYV9pcGMiLFg4KCksITEpLE8wKCJyZXN1bHRfc2NoZW1hX2lwYyIsWDgoKSwhMSksTzAoImhlYWRlcl9zY2hlbWFfaXBjIixYOCgpLCExKSxPMCgiaWRlbXBvdGVuY3kiLFokKCksITEpLE8wKCJkZXByZWNhdGVkIixqSigpLCExKSxPMCgiZGVwcmVjYXRpb25fbWVzc2FnZSIsWiQoKSwhMSldLEVWPUUwKFtPMCgic2VydmVyX2lkIixaJCgpLCExKSxPMCgic2VydmVyX3ZlcnNpb24iLFokKCksITEpLE8wKCJyZXF1ZXN0X3ZlcnNpb24iLFokKCksITEpLE8wKCJwcm90b2NvbHMiLFA2KE8wKCJpdGVtIixwRyhRVSksITApKSwhMSldKSx3Vj1FMChbLi4uUVUsTzAoIm1ldGhvZHMiLFA2KE8wKCJpdGVtIixwRyhSViksITApKSwhMSldKTskVT1uZXcgV2Vha01hcH0pO2Z1bmN0aW9uIFRWKCQpe2xldCBaPSQ7cmV0dXJuIHR5cGVvZiBaPy5yZWFkPT09ImZ1bmN0aW9uIiYmdHlwZW9mIFo/LnBpcGU9PT0iZnVuY3Rpb24ifWZ1bmN0aW9uIGdWKCQpe3JldHVybiBuZXcgUHJveHkoJCx7Z2V0KFosUSl7aWYoUT09PSJyZWFkIilyZXR1cm4oSik9PloucmVhZCh0eXBlb2YgSj09PSJudW1iZXIiP01hdGgubWluKEosX1YpOkopO2xldCBYPVJlZmxlY3QuZ2V0KFosUSxaKTtyZXR1cm4gdHlwZW9mIFg9PT0iZnVuY3Rpb24iP1guYmluZChaKTpYfX0pfWNsYXNzIHhKe3JlYWRlcjtpbml0aWFsaXplZD0hMTtzdHJlYW1FbmRlZD0hMTtjb25zdHJ1Y3RvcigkKXt0aGlzLnJlYWRlcj0kfXN0YXRpYyBhc3luYyBjcmVhdGUoJCl7bGV0IFo9VFYoJCk/Z1YoJCk6JCxRPWF3YWl0IHokLmZyb20oWik7aWYoYXdhaXQgUS5vcGVuKHthdXRvRGVzdHJveTohMX0pLFEuY2xvc2VkKXRocm93IEVycm9yKCJJbnB1dCBzdHJlYW0gY2xvc2VkIGJlZm9yZSBmaXJzdCBJUEMgbWVzc2FnZSIpO3JldHVybiBuZXcgeEooUSl9YXN5bmMgcmVhZFN0cmVhbSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpe2lmKGF3YWl0IHRoaXMucmVhZGVyLnJlc2V0KCkub3BlbigpLHRoaXMucmVhZGVyLmNsb3NlZClyZXR1cm4gbnVsbH10aGlzLmluaXRpYWxpemVkPSEwO2xldCAkPXRoaXMucmVhZGVyLnNjaGVtYTtpZighJClyZXR1cm4gbnVsbDtsZXQgWj1bXTt3aGlsZSghMCl7bGV0IFE9YXdhaXQgdGhpcy5yZWFkZXIubmV4dCgpO2lmKFEuZG9uZSlicmVhaztpZihRLnZhbHVlLmNvbnN0cnVjdG9yLm5hbWU9PT0iX0ludGVybmFsRW1wdHlQbGFjZWhvbGRlclJlY29yZEJhdGNoIilicmVhaztaLnB1c2goUS52YWx1ZSl9cmV0dXJue3NjaGVtYTokLGJhdGNoZXM6Wn19YXN5bmMgb3Blbk5leHRTdHJlYW0oKXtpZih0aGlzLmluaXRpYWxpemVkKXtpZihhd2FpdCB0aGlzLnJlYWRlci5yZXNldCgpLm9wZW4oKSx0aGlzLnJlYWRlci5jbG9zZWQpcmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuaW5pdGlhbGl6ZWQ9ITAsdGhpcy5zdHJlYW1FbmRlZD0hMSx0aGlzLnJlYWRlci5zY2hlbWE/P251bGx9YXN5bmMgcmVhZE5leHRCYXRjaCgpe2lmKHRoaXMuc3RyZWFtRW5kZWQpcmV0dXJuIG51bGw7bGV0ICQ9YXdhaXQgdGhpcy5yZWFkZXIubmV4dCgpO2lmKCQuZG9uZSlyZXR1cm4gdGhpcy5zdHJlYW1FbmRlZD0hMCxudWxsO2lmKCQudmFsdWUuY29uc3RydWN0b3IubmFtZT09PSJfSW50ZXJuYWxFbXB0eVBsYWNlaG9sZGVyUmVjb3JkQmF0Y2giKXJldHVybiB0aGlzLnN0cmVhbUVuZGVkPSEwLG51bGw7cmV0dXJuICQudmFsdWV9YXN5bmMgY2FuY2VsKCl7YXdhaXQgdGhpcy5yZWFkZXIuY2FuY2VsKCl9fXZhciBfVj02NzEwODg2NDt2YXIgcTU9TygoKT0+e0pRKCl9KTtmdW5jdGlvbiBQNSgkKXtpZih0eXBlb2YgJD09PSJzdHJpbmciKXJldHVybiBuZXcgVCQ7aWYodHlwZW9mICQ9PT0iYm9vbGVhbiIpcmV0dXJuIG5ldyBWJDtpZih0eXBlb2YgJD09PSJiaWdpbnQiKXJldHVybiBuZXcgQVo7aWYodHlwZW9mICQ9PT0ibnVtYmVyIilyZXR1cm4gbmV3ICRRO2lmKCQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgeFo7cmV0dXJuIG5ldyBUJH1mdW5jdGlvbiBVNygkLFope2lmKFo9PW51bGwpcmV0dXJuIFo7aWYoay5pc0ludCgkKSYmJC5iaXRXaWR0aD09PTY0KXtpZih0eXBlb2YgWj09PSJudW1iZXIiKXJldHVybiBCaWdJbnQoWik7cmV0dXJuIFp9aWYoay5pc01hcCgkKSl7aWYoWiBpbnN0YW5jZW9mIE1hcCl7bGV0IFg9JC5jaGlsZHJlblswXS50eXBlLmNoaWxkcmVuWzFdLnR5cGUsSj1uZXcgTWFwO2ZvcihsZXRbVyxZXW9mIFopSi5zZXQoVyxVNyhYLFkpKTtyZXR1cm4gSn1yZXR1cm4gWn1pZihrLmlzTGlzdCgkKSl7aWYoQXJyYXkuaXNBcnJheShaKSl7bGV0IFE9JC5jaGlsZHJlblswXS50eXBlO3JldHVybiBaLm1hcCgoWCk9PlU3KFEsWCkpfXJldHVybiBafXJldHVybiBafWZ1bmN0aW9uIHZRKCQsWixRLFgpe2xldCBKPW5ldyBNYXA7aWYoSi5zZXQoeVgsUSksWD8ucHJvdG9jb2wpSi5zZXQoUkosWC5wcm90b2NvbCk7aWYoSi5zZXQoaFgsSVEpLFg/LnByb3RvY29sVmVyc2lvbilKLnNldChTSixYLnByb3RvY29sVmVyc2lvbik7aWYoJC5maWVsZHMubGVuZ3RoPT09MCl7bGV0IEc9R1EoJCxKKTtyZXR1cm4gZjAoJCxbR10pfWxldCBXPXt9O2ZvcihsZXQgRyBvZiAkLmZpZWxkcyl7bGV0IEg9WltHLm5hbWVdO1dbRy5uYW1lXT1IPT09dm9pZCAwP251bGw6VTcoRy50eXBlLEgpfWxldCBZPXZYKCQsVyxKKTtyZXR1cm4gZjAoJCxbWV0pfWFzeW5jIGZ1bmN0aW9uIHpYKCQpe2xldCBaPWF3YWl0IHokLmZyb20oJCk7YXdhaXQgWi5vcGVuKCk7bGV0IFE9Wi5zY2hlbWE7aWYoIVEpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJFbXB0eSBJUEMgc3RyZWFtOiBubyBzY2hlbWEiLCIiKTtsZXQgWD1aLnJlYWRBbGwoKTtyZXR1cm57c2NoZW1hOlEsYmF0Y2hlczpYfX1mdW5jdGlvbiBIUSgkKXtsZXQgWj1bXTtmb3IobGV0IFE9MDtRPCQubnVtUm93cztRKyspe2xldCBYPXt9O2ZvcihsZXQgSj0wO0o8JC5zY2hlbWEuZmllbGRzLmxlbmd0aDtKKyspe2xldCBXPSQuc2NoZW1hLmZpZWxkc1tKXSxZPSQuZ2V0Q2hpbGRBdChKKT8uZ2V0KFEpO2lmKHR5cGVvZiBZPT09ImJpZ2ludCIpe2lmKFk+PUJpZ0ludChOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikmJlk8PUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpWT1OdW1iZXIoWSl9WFtXLm5hbWVdPVl9Wi5wdXNoKFgpfXJldHVybiBafWFzeW5jIGZ1bmN0aW9uIEwxKCQpe2xldCBaPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoUSl7US5lbnF1ZXVlKCQpLFEuY2xvc2UoKX19KTtyZXR1cm4geEouY3JlYXRlKFopfXZhciBTNj1PKCgpPT57SlEoKTtXWCgpO0haKCk7SjgoKTtxNSgpO3BIKCl9KTtmdW5jdGlvbiBNNygkKXtpZigkLmxlbmd0aD09PTApcmV0dXJuIG5ldyBRMChbXSk7cmV0dXJuICQxKCQpfWZ1bmN0aW9uIHhWKCQpe2xldCBaPSQubWV0aG9kX3R5cGU9PT0ic3RyZWFtIj8ic3RyZWFtIjoidW5hcnkiLFE9e25hbWU6JC5uYW1lLHR5cGU6WixoYXNSZXR1cm46JC5oYXNfcmV0dXJuLHBhcmFtc1NjaGVtYTpNNygkLnBhcmFtc19zY2hlbWFfaXBjKSxyZXN1bHRTY2hlbWE6TTcoJC5yZXN1bHRfc2NoZW1hX2lwYyl9O2lmKFo9PT0ic3RyZWFtIilRLnN0cmVhbUtpbmQ9JC5zdHJlYW1fa2luZDtpZigkLmhhc19oZWFkZXIpUS5oZWFkZXJTY2hlbWE9TTcoJC5oZWFkZXJfc2NoZW1hX2lwYyk7cmV0dXJuIFF9ZnVuY3Rpb24gQTEoJCxaKXtyZXR1cm57cHJvdG9jb2xOYW1lOiQucHJvdG9jb2wscHJvdG9jb2xWZXJzaW9uOiQucHJvdG9jb2xfdmVyc2lvbixwcm90b2NvbEhhc2g6JC5wcm90b2NvbF9oYXNoLGhvc3RlZFByb3RvY29sczpaP1oucHJvdG9jb2xzLm1hcCgoUSk9PlEucHJvdG9jb2wpOltdLG1ldGhvZHM6JC5tZXRob2RzLm1hcCh4Viksc2VydmVySWQ6Wj8uc2VydmVyX2lkLHJlcXVlc3RWZXJzaW9uOlo/LnJlcXVlc3RfdmVyc2lvbn19ZnVuY3Rpb24gRDEoJCl7bGV0IFo9JC5wcm90b2NvbHMuZmluZCgoUSk9PiFRLnByb3RvY29sLnN0YXJ0c1dpdGgod04pKTtpZighWil0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYFNlcnZlciAkeyQuc2VydmVyX2lkfSBob3N0cyBubyBhcHBsaWNhdGlvbiBwcm90b2NvbDogaXQgb2ZmZXJzIG9ubHkgWyR7JC5wcm90b2NvbHMubWFwKChRKT0+US5wcm90b2NvbCkuam9pbigiLCAiKX1dLiBOYW1lIGEgcHJvdG9jb2wgZXhwbGljaXRseSB0byBkZXNjcmliZSBvbmUgb2YgdGhvc2UuYCwiIik7cmV0dXJuIFoucHJvdG9jb2x9YXN5bmMgZnVuY3Rpb24gTDcoJCxaLFEpe2xldCBYPW51bGw7Zm9yKGxldCBZIG9mICQpe2lmKFkubnVtUm93cz09PTApe2lmKEYkKFkpKXtYPWF3YWl0IEUkKFksUSxaKTtjb250aW51ZX1PJChZLFopO2NvbnRpbnVlfVg9WX1pZighWCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYEVtcHR5ICcke3VafScgcmVzcG9uc2VgLCIiKTtsZXQgVz0oWC5nZXRDaGlsZCgicmVzdWx0Iik/P1guZ2V0Q2hpbGRBdCgwKSk/LmdldCgwKTtpZighKFcgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYEEgJyR7dVp9JyByZXBseSBjYXJyaWVkIG5vICdyZXN1bHQnIGNvbHVtbiBvZiBieXRlc2AsIiIpO3JldHVybiBXfWZ1bmN0aW9uIEE3KCQsWil7aWYoJD09PXc2KXJldHVybiB2UShaVSx7cHJvdG9jb2w6Wn0sdzYse3Byb3RvY29sOnVafSk7cmV0dXJuIHZRKEUwKFtdKSx7fSwkLHtwcm90b2NvbDp1Wn0pfWFzeW5jIGZ1bmN0aW9uIE8xKCQsWil7bGV0IFE9JC5yZXBsYWNlKC9cLyskLywiIiksWD1aPy5wcmVmaXg/PyIiLEo9eyJDb250ZW50LVR5cGUiOk9afTtpZihaPy5hdXRob3JpemF0aW9uKUouQXV0aG9yaXphdGlvbj1aLmF1dGhvcml6YXRpb247bGV0IFc9Wj8uY29tcHJlc3Npb25MZXZlbCxZPVo/LmNvbXByZXNzRm4sRz1aPy5kZWNvbXByZXNzRm47aWYoVyE9bnVsbCYmWSlKWyJDb250ZW50LUVuY29kaW5nIl09InpzdGQiO2lmKFchPW51bGwmJkcpSlsiQWNjZXB0LUVuY29kaW5nIl09InpzdGQiO0pbX0pdPVNXKEchPW51bGwpO2xldCBIPVo/LmFjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcz8/Slg7V1EoSCwiYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzIik7bGV0IHo9SDtpZighWj8ucmVzcG9uc2VCdWRnZXRWZXJpZmllZCl7bGV0IEw9YXdhaXQgazgoUSxYLFo/LmF1dGhvcml6YXRpb24sSCxaPy5mZXRjaD8/Z2xvYmFsVGhpcy5mZXRjaCk7aWYoIUwuYWNjZXB0TWF4UmVzcG9uc2VCeXRlc1N1cHBvcnQpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJTZXJ2ZXIgbXVzdCBhZHZlcnRpc2UgVkdJLUFjY2VwdC1NYXgtUmVzcG9uc2UtQnl0ZXMtU3VwcG9ydDogdHJ1ZSBiZWZvcmUgUlBDIGRpc3BhdGNoIiwiIik7ej10JChILEwubWF4UmVzcG9uc2VCeXRlcz8/dm9pZCAwKT8/SH1KW2JaXT1TdHJpbmcoSCk7bGV0IHE9Wj8uZmV0Y2g/P2dsb2JhbFRoaXMuZmV0Y2g7YXN5bmMgZnVuY3Rpb24gUChMLEQpe2xldCBSPUE3KEwsRCksVj1XIT1udWxsJiZZP2F3YWl0IFkoUixXKTpSLGc9YXdhaXQgcShRK0sxKHVaLEwse3ByZWZpeDpYfSkse21ldGhvZDoiUE9TVCIsaGVhZGVyczpKLGJvZHk6Vn0pO2lmKGcuc3RhdHVzPT09NDAxKXRocm93IG5ldyBiKCJBdXRoZW50aWNhdGlvbkVycm9yIiwiQXV0aGVudGljYXRpb24gcmVxdWlyZWQiLCIiKTtsZXQgdz1DSihnLmhlYWRlcnMpO3o9dCQoeix3Lm1heFJlc3BvbnNlQnl0ZXM/P3ZvaWQgMCk/P3o7bGV0IFQ9YXdhaXQgZ0ooZyx6KSxFPW5ldyBVaW50OEFycmF5KGF3YWl0IGdXKGcuaGVhZGVycyxULEcseikpLHtiYXRjaGVzOl99PWF3YWl0IHpYKEUpO3JldHVybiBMNyhfLHZvaWQgMCxaPy5leHRlcm5hbExvY2F0aW9uKX1sZXQgVSxNPVo/LnByb3RvY29sO2lmKCFNKVU9SzUoYXdhaXQgUChOMSkpLE09RDEoVSk7cmV0dXJuIEExKEg1KGF3YWl0IFAodzYsTSkpLFUpfXZhciBGNT1PKCgpPT57SlEoKTtXWCgpO3oxKCk7SFooKTtJOCgpO0JXKCk7SjgoKTtPSigpO00xKCk7UlcoKTtIMSgpO1M2KCl9KTtmdW5jdGlvbiBONSgkKXtpZihhWS5uYW1lPT09ImFycm93LWpzIilyZXR1cm4iYWN0aXZlIjtsZXQgWj0kO3JldHVybiBaIT1udWxsJiZ0eXBlb2YgWi5kYXRhPT09Im9iamVjdCImJlouZGF0YSE9PW51bGwmJiFBcnJheS5pc0FycmF5KFouY2hpbGRyZW4pPyJhcnJvdy1qcyI6ImFjdGl2ZSJ9ZnVuY3Rpb24gR1UoJCxaKXtpZihONSgkKT09PVopcmV0dXJuICQ7cmV0dXJuIFo9PT0iYWN0aXZlIj9rUShtWigkKSk6a1EobVooJCkpfWZ1bmN0aW9uIFU1KCQsWil7bGV0IFE9JDtyZXR1cm4gTjUoUSk9PT0iYXJyb3ctanMiP2UkKFEsWik6ZSQoUSxaKX1mdW5jdGlvbiB2SigkLFope2xldCBRPVo7aWYoUS5sZW5ndGg+MCYmUS5ldmVyeSgoWCk9Pk41KFgpPT09ImFycm93LWpzIikpcmV0dXJuIE42KFFbMF0uc2NoZW1hLFEpO3JldHVybiBmMCgkLFEubWFwKChYKT0+R1UoWCwiYWN0aXZlIikpKX1mdW5jdGlvbiBLVSgkKXtsZXQgWj1udWxsLFE9bnVsbCxYPShKLFcpPT57cmV0dXJuIFo9SixRPUo9PT0iYXJyb3ctanMiP0Y2KFcpOkY2KFcpLFEuc3RhcnQoKX07cmV0dXJue3dyaXRlQmF0Y2goSil7bGV0IFc9SixZPW5ldyBVaW50OEFycmF5KDApO2lmKFE9PT1udWxsKXtsZXQgSD1ONShXKTtZPVgoSCxIPT09ImFycm93LWpzIj9XLnNjaGVtYTokKX1sZXQgRz1RLndyaXRlQmF0Y2goR1UoVyxaKSk7cmV0dXJuIFlVKFksRyl9LGZpbmlzaCgpe2xldCBKPVE9PT1udWxsP1goImFjdGl2ZSIsJCk6bmV3IFVpbnQ4QXJyYXkoMCk7cmV0dXJuIFlVKEosUS5maW5pc2goKSl9fX1mdW5jdGlvbiBZVSgkLFope2lmKCQubGVuZ3RoPT09MClyZXR1cm4gWjtpZihaLmxlbmd0aD09PTApcmV0dXJuICQ7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoJC5sZW5ndGgrWi5sZW5ndGgpO3JldHVybiBRLnNldCgkLDApLFEuc2V0KFosJC5sZW5ndGgpLFF9dmFyIEMxPU8oKCk9PntXWCgpO1dYKCk7SjgoKX0pO2Z1bmN0aW9uIHpRKCQpe3JldHVybntiYXRjaDokLG1ldGFkYXRhOm5ldyBNYXAoJC5tZXRhZGF0YT8/W10pfX1mdW5jdGlvbiBkWCgkLFope2xldCBRPW5ldyBNYXAoJC5tZXRhZGF0YSk7aWYoWilmb3IobGV0W1gsSl1vZiBaKVEuc2V0KFgsSik7cmV0dXJuIFU1KCQuYmF0Y2gsUSl9dmFyIE01PU8oKCk9PntDMSgpfSk7ZnVuY3Rpb24gdlYoJCxaKXtyZXR1cm4gWj09PW51bGw/JDpgJHskLmxlbmd0aH06JHskfSR7Wn1gfWZ1bmN0aW9uIEQ3KCQpe2xldCBaPSQuaW5kZXhPZigiOiIpO2lmKFo8MClyZXR1cm57Y3Vyc29yOiQsY2FsbFRva2VuOm51bGx9O2xldCBRPU51bWJlcigkLnNsaWNlKDAsWikpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKFEpfHxRPDApcmV0dXJue2N1cnNvcjokLGNhbGxUb2tlbjpudWxsfTtsZXQgWD0kLnNsaWNlKForMSk7aWYoUT5YLmxlbmd0aClyZXR1cm57Y3Vyc29yOiQsY2FsbFRva2VuOm51bGx9O2xldCBKPVguc2xpY2UoUSk7cmV0dXJue2N1cnNvcjpYLnNsaWNlKDAsUSksY2FsbFRva2VuOko9PT0iIj9udWxsOkp9fXZhciBCNjt2YXIgTzc9TygoKT0+e1dYKCk7SFooKTtJOCgpO0JXKCk7SjgoKTtPSigpO1JXKCk7SDEoKTtTNigpO0MxKCk7TTUoKTtCNj1jbGFzcyBCNntfYmFzZVVybDtfcHJlZml4O19tZXRob2Q7X3N0YXRlVG9rZW47X2NhbGxTdGF0ZVRva2VuO19vdXRwdXRTY2hlbWE7X2lucHV0U2NoZW1hO19vbkxvZztfcGVuZGluZ0JhdGNoZXM7X2ZpbmlzaGVkO19oZWFkZXI7X3Jhd0hlYWRlcjtfY29tcHJlc3Npb25MZXZlbDtfY29tcHJlc3NGbjtfZGVjb21wcmVzc0ZuO19hdXRob3JpemF0aW9uO19leHRlcm5hbENvbmZpZztfcG9zdEZuO19hY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM7X3Jlc3BvbnNlQnVkZ2V0U3VwcG9ydD1udWxsO2NvbnN0cnVjdG9yKCQpe2lmKHRoaXMuX2Jhc2VVcmw9JC5iYXNlVXJsLHRoaXMuX3ByZWZpeD0kLnByZWZpeCx0aGlzLl9tZXRob2Q9JC5tZXRob2QsdGhpcy5fc3RhdGVUb2tlbj0kLnN0YXRlVG9rZW4sdGhpcy5fY2FsbFN0YXRlVG9rZW49JC5jYWxsU3RhdGVUb2tlbj8/bnVsbCx0aGlzLl9vdXRwdXRTY2hlbWE9JC5vdXRwdXRTY2hlbWEsdGhpcy5faW5wdXRTY2hlbWE9JC5pbnB1dFNjaGVtYSx0aGlzLl9vbkxvZz0kLm9uTG9nLHRoaXMuX3BlbmRpbmdCYXRjaGVzPSQucGVuZGluZ0JhdGNoZXMsdGhpcy5fZmluaXNoZWQ9JC5maW5pc2hlZCx0aGlzLl9oZWFkZXI9JC5oZWFkZXIsdGhpcy5fcmF3SGVhZGVyPSQucmF3SGVhZGVyPz9udWxsLHRoaXMuX2NvbXByZXNzaW9uTGV2ZWw9JC5jb21wcmVzc2lvbkxldmVsLHRoaXMuX2NvbXByZXNzRm49JC5jb21wcmVzc0ZuLHRoaXMuX2RlY29tcHJlc3NGbj0kLmRlY29tcHJlc3NGbix0aGlzLl9hdXRob3JpemF0aW9uPSQuYXV0aG9yaXphdGlvbix0aGlzLl9leHRlcm5hbENvbmZpZz0kLmV4dGVybmFsQ29uZmlnLHRoaXMuX3Bvc3RGbj0kLnBvc3RGbix0aGlzLl9hY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM9JC5hY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM/P0pYLFdRKHRoaXMuX2FjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcywiYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzIiksJC5wZW5kaW5nQmF0Y2hlcy5maWx0ZXIoKFEpPT5RLm51bVJvd3M+MHx8RiQoUSkpLmxlbmd0aD4xKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiQSBzdHJlYW0gaW5pdCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGRhdGEgYmF0Y2giLCIiKX1hc3luYyBfcG9zdCgkLFope2lmKHRoaXMuX3Bvc3RGbilyZXR1cm4gdGhpcy5fcG9zdEZuKCQsWik7aWYoIXRoaXMuX3Jlc3BvbnNlQnVkZ2V0U3VwcG9ydCl0aGlzLl9yZXNwb25zZUJ1ZGdldFN1cHBvcnQ9azgodGhpcy5fYmFzZVVybCx0aGlzLl9wcmVmaXgsdGhpcy5fYXV0aG9yaXphdGlvbix0aGlzLl9hY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXMpLnRoZW4oKEopPT57aWYoIUouYWNjZXB0TWF4UmVzcG9uc2VCeXRlc1N1cHBvcnQpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJTZXJ2ZXIgbXVzdCBhZHZlcnRpc2UgVkdJLUFjY2VwdC1NYXgtUmVzcG9uc2UtQnl0ZXMtU3VwcG9ydDogdHJ1ZSBiZWZvcmUgUlBDIGRpc3BhdGNoIiwiIik7dGhpcy5fYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzPXQkKHRoaXMuX2FjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcyxKLm1heFJlc3BvbnNlQnl0ZXM/P3ZvaWQgMCk/P3RoaXMuX2FjY2VwdGVkTWF4UmVzcG9uc2VCeXRlc30pO2F3YWl0IHRoaXMuX3Jlc3BvbnNlQnVkZ2V0U3VwcG9ydDtsZXQgUT1hd2FpdCBmZXRjaCgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5fYnVpbGRIZWFkZXJzKCksYm9keTphd2FpdCB0aGlzLl9wcmVwYXJlQm9keShaKX0pLFg9Q0ooUS5oZWFkZXJzKTtyZXR1cm4gdGhpcy5fYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzPXQkKHRoaXMuX2FjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcyxYLm1heFJlc3BvbnNlQnl0ZXM/P3ZvaWQgMCk/P3RoaXMuX2FjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcyxRfWdldCBoZWFkZXIoKXtyZXR1cm4gdGhpcy5faGVhZGVyfWdldCByYXdIZWFkZXIoKXtyZXR1cm4gdGhpcy5fcmF3SGVhZGVyfV90b2tlbk1ldGFkYXRhKCQsWil7bGV0IFE9bmV3IE1hcDtpZihRLnNldCh5JCwkKSxaPy5jYW5jZWwpUS5zZXQoYlgsIjEiKTtpZih0aGlzLl9jYWxsU3RhdGVUb2tlbiE9PW51bGwpUS5zZXQoWVgsdGhpcy5fY2FsbFN0YXRlVG9rZW4pO3JldHVybiBRfV9yZXN1bWVUb2tlbigpe3JldHVybiB0aGlzLl9zdGF0ZVRva2VuPT09bnVsbD9udWxsOnZWKHRoaXMuX3N0YXRlVG9rZW4sdGhpcy5fY2FsbFN0YXRlVG9rZW4pfV9idWlsZEhlYWRlcnMoKXtsZXQgJD17IkNvbnRlbnQtVHlwZSI6T1p9O2lmKHRoaXMuX2NvbXByZXNzaW9uTGV2ZWwhPW51bGwmJnRoaXMuX2NvbXByZXNzRm4pJFsiQ29udGVudC1FbmNvZGluZyJdPSJ6c3RkIjtpZih0aGlzLl9jb21wcmVzc2lvbkxldmVsIT1udWxsJiZ0aGlzLl9kZWNvbXByZXNzRm4pJFsiQWNjZXB0LUVuY29kaW5nIl09InpzdGQiO2lmKCRbX0pdPVNXKHRoaXMuX2RlY29tcHJlc3NGbiE9bnVsbCksJFtiWl09U3RyaW5nKHRoaXMuX2FjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcyksdGhpcy5fYXV0aG9yaXphdGlvbikkLkF1dGhvcml6YXRpb249dGhpcy5fYXV0aG9yaXphdGlvbjtyZXR1cm4gJH1hc3luYyBfcHJlcGFyZUJvZHkoJCl7aWYodGhpcy5fY29tcHJlc3Npb25MZXZlbCE9bnVsbCYmdGhpcy5fY29tcHJlc3NGbilyZXR1cm4gYXdhaXQgdGhpcy5fY29tcHJlc3NGbigkLHRoaXMuX2NvbXByZXNzaW9uTGV2ZWwpO3JldHVybiAkfWFzeW5jIF9yZWFkUmVzcG9uc2UoJCl7bGV0IFo9YXdhaXQgZ0ooJCx0aGlzLl9hY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXMpLFE9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgZ1coJC5oZWFkZXJzLFosdGhpcy5fZGVjb21wcmVzc0ZuLHRoaXMuX2FjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcykpO2lmKFEuYnl0ZUxlbmd0aD50aGlzLl9hY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXMpdGhyb3cgbmV3IGIoIlRyYW5zcG9ydEVycm9yIixgRGVjb2RlZCBIVFRQIHJlc3BvbnNlIGV4Y2VlZHMgYWNjZXB0ZWQgbGltaXQgKCR7US5ieXRlTGVuZ3RofSA+ICR7dGhpcy5fYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzfSlgLCIiKTtyZXR1cm4gUX1hc3luYyBleGNoYW5nZSgkKXtpZih0aGlzLl9zdGF0ZVRva2VuPT09bnVsbCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsIlN0cmVhbSBoYXMgZmluaXNoZWQg4oCUIG5vIHN0YXRlIHRva2VuIGF2YWlsYWJsZSIsIiIpO2lmKCFBcnJheS5pc0FycmF5KCQpKXtsZXQgSj1uZXcgTWFwKCQubWV0YWRhdGE/P1tdKTtmb3IobGV0W1ksR11vZiB0aGlzLl90b2tlbk1ldGFkYXRhKHRoaXMuX3N0YXRlVG9rZW4pKUouc2V0KFksRyk7bGV0IFc9VTUoJCxKKTtyZXR1cm4gdGhpcy5fcm93c09mRXhjaGFuZ2UoYXdhaXQgdGhpcy5fZG9FeGNoYW5nZShXLnNjaGVtYSxbV10pKX1pZigkLmxlbmd0aD09PTApe2xldCBKPXRoaXMuX2lucHV0U2NoZW1hPz90aGlzLl9vdXRwdXRTY2hlbWEsVz1HUShKLHRoaXMuX3Rva2VuTWV0YWRhdGEodGhpcy5fc3RhdGVUb2tlbikpO3JldHVybiB0aGlzLl9yb3dzT2ZFeGNoYW5nZShhd2FpdCB0aGlzLl9kb0V4Y2hhbmdlKEosW1ddKSl9bGV0IFo9dGhpcy5faW5wdXRTY2hlbWE7aWYoIVope2xldCBXPU9iamVjdC5rZXlzKCRbMF0pLm1hcCgoWSk9PntsZXQgRztmb3IobGV0IHEgb2YgJClpZihxW1ldIT1udWxsKXtHPXFbWV07YnJlYWt9bGV0IEg9UDUoRyksej0kLnNvbWUoKHEpPT5xW1ldPT1udWxsKTtyZXR1cm4gTzAoWSxILHopfSk7Wj1FMChXKX1sZXQgUT17fTtmb3IobGV0IEogb2YgWi5maWVsZHMpUVtKLm5hbWVdPSQubWFwKChXKT0+V1tKLm5hbWVdKTtsZXQgWD1lJChZUShaLFEpLHRoaXMuX3Rva2VuTWV0YWRhdGEodGhpcy5fc3RhdGVUb2tlbikpO3JldHVybiB0aGlzLl9yb3dzT2ZFeGNoYW5nZShhd2FpdCB0aGlzLl9kb0V4Y2hhbmdlKFosW1hdKSl9YXN5bmMgdGljaygkKXtsZXQgWj1hd2FpdCB0aGlzLnRpY2tSYXcoJCk7cmV0dXJuIFo9PT1udWxsP1tdOkhRKFouYmF0Y2gpfWFzeW5jIHRpY2tSYXcoJCl7bGV0IFo9YXdhaXQgdGhpcy5uZXh0V2l0aFRva2VuUmF3KCQpO3JldHVybiBaPT09bnVsbD9udWxsOlouaXRlbX1hc3luYyBleGNoYW5nZVJhdygkKXtpZih0aGlzLl9zdGF0ZVRva2VuPT09bnVsbCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsIlN0cmVhbSBoYXMgZmluaXNoZWQg4oCUIG5vIHN0YXRlIHRva2VuIGF2YWlsYWJsZSIsIiIpO2xldCBaPWRYKCQsdGhpcy5fdG9rZW5NZXRhZGF0YSh0aGlzLl9zdGF0ZVRva2VuKSksUT1hd2FpdCB0aGlzLl9kb0V4Y2hhbmdlKFouc2NoZW1hLFtaXSk7cmV0dXJuIFE9PT1udWxsP251bGw6elEoUSl9YXN5bmMgY2FuY2VsKCl7aWYodGhpcy5fZmluaXNoZWR8fHRoaXMuX3N0YXRlVG9rZW49PT1udWxsKXt0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9zdGF0ZVRva2VuPW51bGw7cmV0dXJufWxldCAkPXRoaXMuX3N0YXRlVG9rZW47dGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fc3RhdGVUb2tlbj1udWxsO2xldCBaPUUwKFtdKSxRPUdRKFosdGhpcy5fdG9rZW5NZXRhZGF0YSgkLHtjYW5jZWw6ITB9KSk7dHJ5e2xldCBYPWF3YWl0IHRoaXMuX3Bvc3QodGhpcy5fYmFzZVVybCtfOCh0aGlzLl9wcmVmaXgsdGhpcy5fbWV0aG9kLHtzdWZmaXg6Ii9leGNoYW5nZSJ9KSxmMChaLFtRXSkpO2F3YWl0IHRoaXMuX3JlYWRSZXNwb25zZShYKX1jYXRjaHt9fWFzeW5jIF9kb0V4Y2hhbmdlKCQsWil7bGV0IFE9dkooJCxaKSxYPWF3YWl0IHRoaXMuX3Bvc3QodGhpcy5fYmFzZVVybCtfOCh0aGlzLl9wcmVmaXgsdGhpcy5fbWV0aG9kLHtzdWZmaXg6Ii9leGNoYW5nZSJ9KSxRKTtpZihYLnN0YXR1cz09PTQwMSl0aHJvdyBuZXcgYigiQXV0aGVudGljYXRpb25FcnJvciIsIkF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIiwiIik7bGV0IEo9YXdhaXQgdGhpcy5fcmVhZFJlc3BvbnNlKFgpLHtiYXRjaGVzOld9PWF3YWl0IHpYKEopLFk9bnVsbDtmb3IobGV0IEcgb2YgVyl7bGV0IEg9RiQoRyk7aWYoRy5udW1Sb3dzPT09MCYmIUgmJk8kKEcsdGhpcy5fb25Mb2cpKWNvbnRpbnVlO2xldCB6PUg/YXdhaXQgRSQoRyx0aGlzLl9leHRlcm5hbENvbmZpZyx0aGlzLl9vbkxvZyk6RyxxPXoubWV0YWRhdGE/LmdldCh5JCk/P0cubWV0YWRhdGE/LmdldCh5JCk7aWYoWSE9PW51bGwpe2lmKHEmJkcubnVtUm93cz09PTAmJiFIKXt0aGlzLl9zdGF0ZVRva2VuPXE7Y29udGludWV9dGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJBbiBleGNoYW5nZSB0dXJuIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgZGF0YSBiYXRjaCIsIiIpfWlmKHEpdGhpcy5fc3RhdGVUb2tlbj1xO1k9en1yZXR1cm4gWX1fcm93c09mRXhjaGFuZ2UoJCl7cmV0dXJuICQ9PT1udWxsP1tdOkhRKCQpfWFzeW5jKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtmb3IobGV0ICQgb2YgdGhpcy5fcGVuZGluZ0JhdGNoZXMpe2lmKCQubnVtUm93cz09PTApaWYoRiQoJCkpJD1hd2FpdCBFJCgkLHRoaXMuX2V4dGVybmFsQ29uZmlnLHRoaXMuX29uTG9nKTtlbHNle08kKCQsdGhpcy5fb25Mb2cpO2NvbnRpbnVlfXlpZWxkIEhRKCQpfWlmKHRoaXMuX3BlbmRpbmdCYXRjaGVzPVtdLHRoaXMuX2ZpbmlzaGVkKXJldHVybjtpZih0aGlzLl9zdGF0ZVRva2VuPT09bnVsbClyZXR1cm47d2hpbGUoITApe2xldCAkPXRoaXMuX3N0YXRlVG9rZW47aWYoJD09PW51bGwpcmV0dXJuO2xldCBaPWF3YWl0IHRoaXMuX3NlbmRDb250aW51YXRpb24oJCkse2JhdGNoZXM6UX09YXdhaXQgelgoWiksWD0hMSxKPW51bGw7Zm9yKGxldCBXIG9mIFEpe2lmKFcubnVtUm93cz09PTApe2xldCBZPVcubWV0YWRhdGE/LmdldCh5JCk7aWYoWSl7dGhpcy5fc3RhdGVUb2tlbj1ZLFg9ITA7Y29udGludWV9aWYoRiQoVykpVz1hd2FpdCBFJChXLHRoaXMuX2V4dGVybmFsQ29uZmlnLHRoaXMuX29uTG9nKTtlbHNle08kKFcsdGhpcy5fb25Mb2cpO2NvbnRpbnVlfX1pZihKIT09bnVsbCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsIkEgcHJvZHVjZXIgdHVybiByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGRhdGEgYmF0Y2giLCIiKTtKPUhRKFcpfWlmKEohPT1udWxsKXlpZWxkIEo7aWYoIVgpYnJlYWt9fWFzeW5jIG5leHRXaXRoVG9rZW4oKXtsZXQgJD1hd2FpdCB0aGlzLm5leHRXaXRoVG9rZW5SYXcoKTtyZXR1cm4gJD09PW51bGw/bnVsbDp7cm93czpIUSgkLml0ZW0uYmF0Y2gpLHRva2VuOiQudG9rZW59fWFzeW5jIG5leHRXaXRoVG9rZW5SYXcoJCl7aWYoJCE9PXZvaWQgMCYmdGhpcy5fcGVuZGluZ0JhdGNoZXMubGVuZ3RoPjApdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJDb25zdW1lIHRoZSBwcm9kdWNlcidzIGluaXQgYmF0Y2ggYmVmb3JlIHNlbmRpbmcgYW4gZXhwbGljaXQgdGljayIsIiIpO3doaWxlKHRoaXMuX3BlbmRpbmdCYXRjaGVzLmxlbmd0aD4wKXtsZXQgWT10aGlzLl9wZW5kaW5nQmF0Y2hlcy5zaGlmdCgpO2lmKFkubnVtUm93cz09PTApaWYoRiQoWSkpWT1hd2FpdCBFJChZLHRoaXMuX2V4dGVybmFsQ29uZmlnLHRoaXMuX29uTG9nKTtlbHNle08kKFksdGhpcy5fb25Mb2cpO2NvbnRpbnVlfWlmKHRoaXMuX3BlbmRpbmdCYXRjaGVzLnNvbWUoKEcpPT5HLm51bVJvd3M+MHx8RiQoRykpKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiQSBwcm9kdWNlciB0dXJuIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgZGF0YSBiYXRjaCIsIiIpO3JldHVybntpdGVtOnpRKFkpLHRva2VuOnRoaXMuX3Jlc3VtZVRva2VuKCl9fWlmKHRoaXMuX2ZpbmlzaGVkfHx0aGlzLl9zdGF0ZVRva2VuPT09bnVsbClyZXR1cm4gdGhpcy5fZmluaXNoZWQ9ITAsbnVsbDtsZXQgUT1hd2FpdCB0aGlzLl9zZW5kQ29udGludWF0aW9uKHRoaXMuX3N0YXRlVG9rZW4sJCkse2JhdGNoZXM6WH09YXdhaXQgelgoUSksSj1udWxsLFc9bnVsbDtmb3IobGV0IFkgb2YgWCl7aWYoWS5udW1Sb3dzPT09MCl7bGV0IEc9WS5tZXRhZGF0YT8uZ2V0KHkkKTtpZihHKXtXPUc7Y29udGludWV9aWYoRiQoWSkpWT1hd2FpdCBFJChZLHRoaXMuX2V4dGVybmFsQ29uZmlnLHRoaXMuX29uTG9nKTtlbHNle08kKFksdGhpcy5fb25Mb2cpO2NvbnRpbnVlfX1pZihKIT09bnVsbCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsIkEgcHJvZHVjZXIgdHVybiByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGRhdGEgYmF0Y2giLCIiKTtKPVl9aWYodGhpcy5fc3RhdGVUb2tlbj1XLEo9PT1udWxsKXJldHVybiB0aGlzLl9maW5pc2hlZD0hMCxudWxsO3JldHVybntpdGVtOnpRKEopLHRva2VuOnRoaXMuX3Jlc3VtZVRva2VuKCl9fXNlZWtUb1Rva2VuKCQpe2xldHtjdXJzb3I6WixjYWxsVG9rZW46UX09RDcoJCk7dGhpcy5fcGVuZGluZ0JhdGNoZXM9W10sdGhpcy5fc3RhdGVUb2tlbj1aLHRoaXMuX2NhbGxTdGF0ZVRva2VuPVEsdGhpcy5fZmluaXNoZWQ9ITF9YXN5bmMgX3NlbmRDb250aW51YXRpb24oJCxaKXtsZXQgUT1FMChbXSksWD1uZXcgTWFwKFo/P1tdKTtmb3IobGV0W0csSF1vZiB0aGlzLl90b2tlbk1ldGFkYXRhKCQpKVguc2V0KEcsSCk7bGV0IEo9dlgoUSx7fSxYKSxXPWYwKFEsW0pdKSxZPWF3YWl0IHRoaXMuX3Bvc3QodGhpcy5fYmFzZVVybCtfOCh0aGlzLl9wcmVmaXgsdGhpcy5fbWV0aG9kLHtzdWZmaXg6Ii9leGNoYW5nZSJ9KSxXKTtpZihZLnN0YXR1cz09PTQwMSl0aHJvdyBuZXcgYigiQXV0aGVudGljYXRpb25FcnJvciIsIkF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIiwiIik7cmV0dXJuIHRoaXMuX3JlYWRSZXNwb25zZShZKX1jbG9zZSgpe319fSk7YXN5bmMgZnVuY3Rpb24gQzcoJCxaLFEsWCxKPWdsb2JhbFRoaXMuZmV0Y2gsVz1KWCxZPSExKXtXUShXLCJhY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXMiKTtsZXQgRz1XO2lmKCFZKXtsZXQgRD1hd2FpdCBrOCgkLFosWCxXLEopO2lmKCFELmFjY2VwdE1heFJlc3BvbnNlQnl0ZXNTdXBwb3J0KXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiU2VydmVyIG11c3QgYWR2ZXJ0aXNlIFZHSS1BY2NlcHQtTWF4LVJlc3BvbnNlLUJ5dGVzLVN1cHBvcnQ6IHRydWUgYmVmb3JlIFJQQyBkaXNwYXRjaCIsIiIpO0c9dCQoVyxELm1heFJlc3BvbnNlQnl0ZXM/P3ZvaWQgMCk/P1d9bGV0IEg9dlEoVjYse2NvdW50OkJpZ0ludChRKX0sX1EpLHo9eyJDb250ZW50LVR5cGUiOk9afTtpZihYKXouQXV0aG9yaXphdGlvbj1YO3pbYlpdPVN0cmluZyhXKTtsZXQgcT1hd2FpdCBKKCQrajYoYCR7X1F9L2luaXRgLHtwcmVmaXg6Wn0pLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eixib2R5Okh9KTtpZihxLnN0YXR1cz09PTQwNCl0aHJvdyBuZXcgYigiTm90U3VwcG9ydGVkIiwiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdXBsb2FkIFVSTHMiLCIiKTtpZihxLnN0YXR1cz09PTQwMSl0aHJvdyBuZXcgYigiQXV0aGVudGljYXRpb25FcnJvciIsIkF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIiwiIik7aWYoIXEub2spdGhyb3cgbmV3IGIoIkh0dHBFcnJvciIsYF9fdXBsb2FkX3VybF9fL2luaXQgZmFpbGVkOiBIVFRQICR7cS5zdGF0dXN9YCwiIik7bGV0IFA9Q0oocS5oZWFkZXJzKTtHPXQkKEcsUC5tYXhSZXNwb25zZUJ5dGVzPz92b2lkIDApPz9HO2xldCBVPWF3YWl0IGdKKHEsRyksTT1hd2FpdCB6JC5mcm9tKFUpO2F3YWl0IE0ub3BlbigpO2xldCBMPVtdO2ZvcihsZXQgRCBvZiBNLnJlYWRBbGwoKSl7aWYoRC5udW1Sb3dzPT09MCljb250aW51ZTtmb3IobGV0IFI9MDtSPEQubnVtUm93cztSKyspe2xldCBWPUQuZ2V0Q2hpbGRBdCgwKT8uZ2V0KFIpLGc9RC5nZXRDaGlsZEF0KDEpPy5nZXQoUiksdz1ELmdldENoaWxkQXQoMik/LmdldChSKSxUO2lmKHcgaW5zdGFuY2VvZiBEYXRlKVQ9dztlbHNlIGlmKHR5cGVvZiB3PT09ImJpZ2ludCIpVD1uZXcgRGF0ZShOdW1iZXIody8xMDAwbikpO2Vsc2UgaWYodHlwZW9mIHc9PT0ibnVtYmVyIilUPW5ldyBEYXRlKHcpO2Vsc2UgVD1uZXcgRGF0ZTtMLnB1c2goe3VwbG9hZFVybDpWLGRvd25sb2FkVXJsOmcsZXhwaXJlc0F0OlR9KX19aWYoTC5sZW5ndGg9PT0wKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiU2VydmVyIHJldHVybmVkIG5vIHVwbG9hZCBVUkxzIiwiIik7cmV0dXJuIEx9YXN5bmMgZnVuY3Rpb24geVYoJCxaKXtsZXQgUT1hd2FpdCB6JC5mcm9tKCQpO2F3YWl0IFEub3BlbigpO2xldCBYPVEuc2NoZW1hO2lmKCFYKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiT3JpZ2luYWwgcmVxdWVzdCBib2R5IGhhcyBubyBzY2hlbWEiLCIiKTtsZXQgSj1RLnJlYWRBbGwoKTtpZihKLmxlbmd0aD09PTApdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJPcmlnaW5hbCByZXF1ZXN0IGJvZHkgaGFzIG5vIGJhdGNoZXMiLCIiKTtsZXQgWT1KWzBdLm1ldGFkYXRhPz9uZXcgTWFwLEc9RzEoWCxaKSxIPW5ldyBNYXAoRy5tZXRhZGF0YT8/bmV3IE1hcCksej1ZLmdldCh5WCkscT1ZLmdldChoWCk/P0lRO2lmKHopSC5zZXQoeVgseik7SC5zZXQoaFgscSk7Zm9yKGxldFtVLE1db2YgWSlpZighSC5oYXMoVSkpSC5zZXQoVSxNKTtsZXQgUD1lJChHLEgpO3JldHVybiBmMChYLFtQXSl9YXN5bmMgZnVuY3Rpb24gajcoJCxaKXtsZXQgUT1aLmZldGNoPz9nbG9iYWxUaGlzLmZldGNoLEo9KGF3YWl0IEM3KFouYmFzZVVybCxaLnByZWZpeCwxLFouYXV0aG9yaXphdGlvbixRLFouYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzLFoucmVzcG9uc2VCdWRnZXRWZXJpZmllZCkpWzBdO2lmKFoudXJsVmFsaWRhdG9yKVoudXJsVmFsaWRhdG9yKEoudXBsb2FkVXJsKSxaLnVybFZhbGlkYXRvcihKLmRvd25sb2FkVXJsKTtsZXQgVz1hd2FpdCBRKEoudXBsb2FkVXJsLHttZXRob2Q6IlBVVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6T1p9LGJvZHk6JH0pO2lmKCFXLm9rKXRocm93IG5ldyBiKCJFeHRlcm5hbFVwbG9hZEZhaWxlZCIsYFBVVCB0byB1cGxvYWQgVVJMIGZhaWxlZDogSFRUUCAke1cuc3RhdHVzfWAsIiIpO3JldHVybiB5VigkLEouZG93bmxvYWRVcmwpfXZhciBIVT1PKCgpPT57SlEoKTtXWCgpO0haKCk7STgoKTtKOCgpO09KKCk7UlcoKTtIMSgpO1M2KCl9KTtmdW5jdGlvbiBWNygkLFope2xldCBRPSQucmVwbGFjZSgvXC8rJC8sIiIpLFg9KFo/LnByZWZpeD8/IiIpLnJlcGxhY2UoL1wvKyQvLCIiKSxKPVo/Lm9uTG9nLFc9Wj8uY29tcHJlc3Npb25MZXZlbCxZPVo/LmF1dGhvcml6YXRpb24sRz1aPy5leHRlcm5hbExvY2F0aW9uLEg9Wj8uZmV0Y2g/P2dsb2JhbFRoaXMuZmV0Y2gsej1aPy5hY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM/P0pYO1dRKHosImFjY2VwdGVkTWF4UmVzcG9uc2VCeXRlcyIpO2xldCBxPVtdO2Z1bmN0aW9uIFAoKXtyZXR1cm4gcS5sZW5ndGg9PT0wP251bGw6cVtxLmxlbmd0aC0xXX1mdW5jdGlvbiBVKFMsZCl7bGV0IGswPW5ldyBIZWFkZXJzKGQ/LmhlYWRlcnMpO2lmKGswLnNldChpRywidHJ1ZSIpLFMudG9rZW4hPT1udWxsKWswLnNldChmWCxTLnRva2VuKTtmb3IobGV0W1gwLGgwXW9mIE9iamVjdC5lbnRyaWVzKFMuZWNobykpaWYoIWswLmhhcyhYMCkpazAuc2V0KFgwLGgwKTtyZXR1cm4gazB9ZnVuY3Rpb24gTShTLGQpe2xldCBrMD1kLmhlYWRlcnMuZ2V0KGZYKTtpZihrMClTLnRva2VuPWswO2xldCBYMD1UVy50b0xvd2VyQ2FzZSgpO2lmKGQuaGVhZGVycy5mb3JFYWNoKChoMCxJMCk9PntpZihJMC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoWDApKVMuZWNob1tJMC5zbGljZShUVy5sZW5ndGgpXT1oMH0pLChkLmhlYWRlcnMuZ2V0KF9XKT8/IiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpPT09InRydWUiKVMudG9rZW49bnVsbCxTLmVjaG89e319bGV0IEw9YXN5bmMoUyxkKT0+e2xldCBrMD1QKCk7aWYoazA9PT1udWxsKXJldHVybiBIKFMsZCk7aWYoISh0eXBlb2YgUz09PSJzdHJpbmciP1M6UyBpbnN0YW5jZW9mIFVSTD9TLmhyZWY6Uy51cmwpLnN0YXJ0c1dpdGgoUSl8fChkPy5tZXRob2Q/PyJHRVQiKS50b1VwcGVyQ2FzZSgpPT09IlBVVCIpcmV0dXJuIEgoUyxkKTtsZXQgaDA9YXdhaXQgSChTLHsuLi5kLGhlYWRlcnM6VShrMCxkKX0pO3JldHVybiBNKGswLGgwKSxoMH0sRD1HP3suLi5HLGZldGNoOkx9OkcsUj1aPy5kZXNjcmlwdGlvbj9uZXcgTWFwKFouZGVzY3JpcHRpb24ubWV0aG9kcy5tYXAoKFMpPT5bUy5uYW1lLFNdKSk6bnVsbCxWPVo/LmRlc2NyaXB0aW9uPy5wcm90b2NvbFZlcnNpb24/PyIiLGc9Wj8uZGVzY3JpcHRpb24/LnByb3RvY29sTmFtZT8/IiI7ZnVuY3Rpb24gdygpe2lmKCFnKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiVGhlIHNlcnZlciBkaWQgbm90IHJlcG9ydCBhIHByb3RvY29sIG5hbWUsIHNvIG5vIFJQQyBwYXRoIGNhbiBiZSBidWlsdC4gRXZlcnkgcmVxdWVzdCBtdXN0IG5hbWUgdGhlIHByb3RvY29sIGl0IGFkZHJlc3Nlcy4iLCIiKTtyZXR1cm5gJHtYfS8ke2d9YH1sZXQgVCxFLF89ITEseT1udWxsLGg9bnVsbDtmdW5jdGlvbiBzKFMpe2xldCBkPUNKKFMuaGVhZGVycyk7aWYoZC5tYXhSZXF1ZXN0Qnl0ZXMhPW51bGx8fGQubWF4UmVzcG9uc2VCeXRlcyE9bnVsbHx8ZC51cGxvYWRVcmxTdXBwb3J0fHxkLmFjY2VwdE1heFJlc3BvbnNlQnl0ZXNTdXBwb3J0KXk9eT97Li4uZCxtYXhSZXF1ZXN0Qnl0ZXM6ZC5tYXhSZXF1ZXN0Qnl0ZXM/P3kubWF4UmVxdWVzdEJ5dGVzLG1heFJlc3BvbnNlQnl0ZXM6ZC5tYXhSZXNwb25zZUJ5dGVzPz95Lm1heFJlc3BvbnNlQnl0ZXMsbWF4VXBsb2FkQnl0ZXM6ZC5tYXhVcGxvYWRCeXRlcz8/eS5tYXhVcGxvYWRCeXRlc306ZH1hc3luYyBmdW5jdGlvbiBmKCl7aWYoIWgpaD1rOChRLFgsWSx6LEwpLnRoZW4oKFMpPT57aWYoIVMuYWNjZXB0TWF4UmVzcG9uc2VCeXRlc1N1cHBvcnQpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJTZXJ2ZXIgbXVzdCBhZHZlcnRpc2UgVkdJLUFjY2VwdC1NYXgtUmVzcG9uc2UtQnl0ZXMtU3VwcG9ydDogdHJ1ZSBiZWZvcmUgUlBDIGRpc3BhdGNoIiwiIik7eT1TfSkuY2F0Y2goKFMpPT57dGhyb3cgaD1udWxsLFN9KTthd2FpdCBofWZ1bmN0aW9uIGMoKXtyZXR1cm4gdCQoeix5Py5tYXhSZXNwb25zZUJ5dGVzPz92b2lkIDApPz96fWFzeW5jIGZ1bmN0aW9uIG8oUyl7bGV0IGQ9dUcoeSk/eTpudWxsO2lmKCFkKXJldHVybiBTO2lmKCFkLnVwbG9hZFVybFN1cHBvcnQpcmV0dXJuIFM7aWYoZC5tYXhSZXF1ZXN0Qnl0ZXM9PW51bGx8fFMuYnl0ZUxlbmd0aDw9ZC5tYXhSZXF1ZXN0Qnl0ZXMpcmV0dXJuIFM7cmV0dXJuIGo3KFMse2Jhc2VVcmw6USxwcmVmaXg6WCxhdXRob3JpemF0aW9uOlksdXJsVmFsaWRhdG9yOkc/LnVybFZhbGlkYXRvcj8/bnVsbCxmZXRjaDpMLGFjY2VwdGVkTWF4UmVzcG9uc2VCeXRlczp6LHJlc3BvbnNlQnVkZ2V0VmVyaWZpZWQ6ITB9KX1hc3luYyBmdW5jdGlvbiBlKFMsZCl7YXdhaXQgZigpO2xldCBrMD1hd2FpdCBvKGQpLFgwPWF3YWl0IEwoUyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnUoKSxib2R5OmF3YWl0IEYwKGswKX0pO2lmKHMoWDApLFgwLnN0YXR1cz09PTQxMyYmeT8udXBsb2FkVXJsU3VwcG9ydCYmZC5ieXRlTGVuZ3RoPjApe2xldCBoMD1hd2FpdCBqNyhkLHtiYXNlVXJsOlEscHJlZml4OlgsYXV0aG9yaXphdGlvbjpZLHVybFZhbGlkYXRvcjpHPy51cmxWYWxpZGF0b3I/P251bGwsZmV0Y2g6TCxhY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM6eixyZXNwb25zZUJ1ZGdldFZlcmlmaWVkOiEwfSk7WDA9YXdhaXQgTChTLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dSgpLGJvZHk6YXdhaXQgRjAoaDApfSkscyhYMCl9cmV0dXJuIFgwfWFzeW5jIGZ1bmN0aW9uIG0oKXtpZihffHxXPT1udWxsKXJldHVybjt0cnl7bGV0IFM9YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoWTEoKSxVTikpO1Q9Uy56c3RkQ29tcHJlc3MsRT1TLnpzdGREZWNvbXByZXNzfWNhdGNoe31fPSEwfWZ1bmN0aW9uIHUoKXtsZXQgUz17IkNvbnRlbnQtVHlwZSI6T1p9O2lmKFchPW51bGwmJlQpU1siQ29udGVudC1FbmNvZGluZyJdPSJ6c3RkIjtpZihXIT1udWxsJiZFKVNbIkFjY2VwdC1FbmNvZGluZyJdPSJ6c3RkIjtpZihTW19KXT1TVyhFIT1udWxsKSxTW2JaXT1TdHJpbmcoeiksWSlTLkF1dGhvcml6YXRpb249WTtyZXR1cm4gU31hc3luYyBmdW5jdGlvbiBGMChTKXtpZihXIT1udWxsJiZUKXJldHVybiBhd2FpdCBUKFMsVyk7cmV0dXJuIFN9ZnVuY3Rpb24gQjAoUyl7aWYoUy5zdGF0dXM9PT00MDEpdGhyb3cgbmV3IGIoIkF1dGhlbnRpY2F0aW9uRXJyb3IiLCJBdXRoZW50aWNhdGlvbiByZXF1aXJlZCIsIiIpfWFzeW5jIGZ1bmN0aW9uIHAoUyl7bGV0IGQ9YygpLGswPWF3YWl0IGdKKFMsZCksWDA9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgZ1coUy5oZWFkZXJzLGswLEUsZCkpO2lmKFgwLmJ5dGVMZW5ndGg+ZCl0aHJvdyBuZXcgYigiVHJhbnNwb3J0RXJyb3IiLGBEZWNvZGVkIEhUVFAgcmVzcG9uc2UgZXhjZWVkcyBhY2NlcHRlZCBsaW1pdCAoJHtYMC5ieXRlTGVuZ3RofSA+ICR7ZH0pYCwiIik7cmV0dXJuIFgwfWFzeW5jIGZ1bmN0aW9uIHgwKCl7aWYoUilyZXR1cm4gUjthd2FpdCBmKCksYXdhaXQgbSgpO2xldCBTPWF3YWl0IE8xKFEse3ByZWZpeDpYLHByb3RvY29sOlo/LnByb3RvY29sLGV4dGVybmFsTG9jYXRpb246RCxhdXRob3JpemF0aW9uOlksY29tcHJlc3Npb25MZXZlbDpXLGNvbXByZXNzRm46VCxkZWNvbXByZXNzRm46RSxhY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM6YygpLGZldGNoOkwscmVzcG9uc2VCdWRnZXRWZXJpZmllZDohMH0pO3JldHVybiBSPW5ldyBNYXAoUy5tZXRob2RzLm1hcCgoZCk9PltkLm5hbWUsZF0pKSxWPVMucHJvdG9jb2xWZXJzaW9uLGc9Uy5wcm90b2NvbE5hbWUsUn1hc3luYyBmdW5jdGlvbiBkMChTKXtsZXQgZD1aPy5wcm90b2NvbD8/Uy5nZXQoUkopO2lmKGQpcmV0dXJuYCR7WH0vJHtkfWA7cmV0dXJuIGF3YWl0IHgwKCksdygpfWFzeW5jIGZ1bmN0aW9uIG4wKFMsZCxrMCxYMCl7bGV0IGgwPWF3YWl0IGUoUStfOChYMD8/dygpLFMse3N1ZmZpeDoiL2luaXQifSksZCk7QjAoaDApO2xldCBJMD1hd2FpdCBwKGgwKSx2MD1udWxsLE4kPW51bGwsbFo9bnVsbCxCJD1bXSxkWj0wLEg4PSh1OCk9PntpZihkWis9MSxkWj4xKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiQSBzdHJlYW0gaW5pdCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGRhdGEgYmF0Y2giLCIiKTtCJC5wdXNoKHU4KX0sUFE9ITEsZjg9bnVsbDtpZihrMCl7bGV0IHU4PWF3YWl0IEwxKEkwKSxmNj1hd2FpdCB1OC5yZWFkU3RyZWFtKCk7aWYoZjYpZm9yKGxldCBJJCBvZiBmNi5iYXRjaGVzKXtpZihJJC5udW1Sb3dzPT09MCl7aWYoRiQoSSQpKXt2MD1hd2FpdCBFJChJJCxELEopO2NvbnRpbnVlfU8kKEkkLEopO2NvbnRpbnVlfXYwPUkkfWxldCBuWj1hd2FpdCB1OC5yZWFkU3RyZWFtKCk7aWYoblopZjg9blouc2NoZW1hO2xldCBrJD1bXTtpZihuWilmb3IobGV0IEkkIG9mIG5aLmJhdGNoZXMpe2lmKEkkLm51bVJvd3M9PT0wKXtsZXQgTFg9SSQubWV0YWRhdGE/LmdldCh5JCk7aWYoTFgpe04kPUxYLGxaPUkkLm1ldGFkYXRhPy5nZXQoWVgpPz9sWjtjb250aW51ZX1pZihGJChJJCkpe0g4KEkkKTtjb250aW51ZX1pZihJJC5tZXRhZGF0YT8uZ2V0KEtRKT09PSJFWENFUFRJT04iKXtrJC5wdXNoKEkkKTtjb250aW51ZX1PJChJJCxKKTtjb250aW51ZX1IOChJJCl9aWYoayQubGVuZ3RoPjApaWYoQiQubGVuZ3RoPjB8fE4kIT09bnVsbClCJC5wdXNoKC4uLmskKTtlbHNlIGZvcihsZXQgSSQgb2YgayQpTyQoSSQsSik7aWYoIW5aJiYhTiQpUFE9ITB9ZWxzZXtsZXR7c2NoZW1hOnU4LGJhdGNoZXM6ZjZ9PWF3YWl0IHpYKEkwKTtmOD11ODtsZXQgblo9W107Zm9yKGxldCBrJCBvZiBmNil7aWYoayQubnVtUm93cz09PTApe2xldCBJJD1rJC5tZXRhZGF0YT8uZ2V0KHkkKTtpZihJJCl7TiQ9SSQsbFo9ayQubWV0YWRhdGE/LmdldChZWCk/P2xaO2NvbnRpbnVlfWlmKEYkKGskKSl7SDgoayQpO2NvbnRpbnVlfWlmKGskLm1ldGFkYXRhPy5nZXQoS1EpPT09IkVYQ0VQVElPTiIpe25aLnB1c2goayQpO2NvbnRpbnVlfU8kKGskLEopO2NvbnRpbnVlfUg4KGskKX1pZihuWi5sZW5ndGg+MClpZihCJC5sZW5ndGg+MHx8TiQhPT1udWxsKUIkLnB1c2goLi4ublopO2Vsc2UgZm9yKGxldCBrJCBvZiBuWilPJChrJCxKKX1pZihCJC5sZW5ndGg9PT0wJiZOJD09PW51bGwpUFE9ITA7bGV0IHpZPShmOCYmZjguZmllbGRzLmxlbmd0aD4wP2Y4Om51bGwpPz8oQiQubGVuZ3RoPjA/QiRbMF0uc2NoZW1hOm51bGwpO3JldHVybntoZWFkZXJCYXRjaDp2MCxzdGF0ZVRva2VuOk4kLGNhbGxTdGF0ZVRva2VuOmxaLHBlbmRpbmdCYXRjaGVzOkIkLGZpbmlzaGVkOlBRLG91dHB1dFNjaGVtYTp6WX19cmV0dXJue2FzeW5jIGNhbGwoUyxkKXthd2FpdCBtKCk7bGV0IFgwPShhd2FpdCB4MCgpKS5nZXQoUyk7aWYoIVgwKXRocm93IEVycm9yKGBVbmtub3duIG1ldGhvZDogJyR7U30nYCk7bGV0IGgwPXsuLi5YMC5kZWZhdWx0cz8/e30sLi4uZD8/e319LEkwPXZRKFgwLnBhcmFtc1NjaGVtYSxoMCxTLHtwcm90b2NvbFZlcnNpb246Vixwcm90b2NvbDpnfSksdjA9YXdhaXQgZShRK184KHcoKSxTKSxJMCk7QjAodjApO2xldCBOJD1hd2FpdCBwKHYwKSx7YmF0Y2hlczpsWn09YXdhaXQgelgoTiQpLEIkPW51bGw7Zm9yKGxldCBQUSBvZiBsWil7aWYoUFEubnVtUm93cz09PTApaWYoRiQoUFEpKVBRPWF3YWl0IEUkKFBRLEQsSik7ZWxzZXtPJChQUSxKKTtjb250aW51ZX1pZihCJCE9PW51bGwpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJBIHVuYXJ5IHJlc3BvbnNlIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgZGF0YSBiYXRjaCIsIiIpO0IkPVBRfWlmKCFCJClyZXR1cm4gbnVsbDtsZXQgZFo9SFEoQiQpO2lmKGRaLmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IEg4PWRaWzBdO2lmKFgwLnJlc3VsdFNjaGVtYS5maWVsZHMubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtyZXR1cm4gSDh9LGFzeW5jIHN0cmVhbShTLGQpe2F3YWl0IG0oKTtsZXQgWDA9KGF3YWl0IHgwKCkpLmdldChTKTtpZighWDApdGhyb3cgRXJyb3IoYFVua25vd24gbWV0aG9kOiAnJHtTfSdgKTtsZXQgaDA9ey4uLlgwLmRlZmF1bHRzPz97fSwuLi5kPz97fX0sSTA9dlEoWDAucGFyYW1zU2NoZW1hLGgwLFMse3Byb3RvY29sVmVyc2lvbjpWLHByb3RvY29sOmd9KSx2MD1hd2FpdCBuMChTLEkwLFgwLmhlYWRlclNjaGVtYSE9bnVsbCksTiQ9djAuaGVhZGVyQmF0Y2g9PT1udWxsP251bGw6SFEodjAuaGVhZGVyQmF0Y2gpWzBdPz9udWxsO3JldHVybiBuZXcgQjYoe2Jhc2VVcmw6USxwcmVmaXg6dygpLG1ldGhvZDpTLHN0YXRlVG9rZW46djAuc3RhdGVUb2tlbixjYWxsU3RhdGVUb2tlbjp2MC5jYWxsU3RhdGVUb2tlbixvdXRwdXRTY2hlbWE6djAub3V0cHV0U2NoZW1hPz9YMC5vdXRwdXRTY2hlbWE/P1gwLnJlc3VsdFNjaGVtYSxpbnB1dFNjaGVtYTpYMC5pbnB1dFNjaGVtYSxvbkxvZzpKLHBlbmRpbmdCYXRjaGVzOnYwLnBlbmRpbmdCYXRjaGVzLGZpbmlzaGVkOnYwLmZpbmlzaGVkLGhlYWRlcjpOJCxyYXdIZWFkZXI6djAuaGVhZGVyQmF0Y2g9PT1udWxsP251bGw6elEodjAuaGVhZGVyQmF0Y2gpLGNvbXByZXNzaW9uTGV2ZWw6Vyxjb21wcmVzc0ZuOlQsZGVjb21wcmVzc0ZuOkUsYXV0aG9yaXphdGlvbjpZLGV4dGVybmFsQ29uZmlnOkQsYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzOmMoKSxwb3N0Rm46ZX0pfSxhc3luYyBjYWxsUmF3KFMsZCl7YXdhaXQgbSgpO2xldCBrMD1kWChkKSxYMD1hd2FpdCBlKFErXzgoYXdhaXQgZDAoZC5tZXRhZGF0YSksUyksdkooazAuc2NoZW1hLFtrMF0pKTtCMChYMCk7bGV0IGgwPWF3YWl0IHAoWDApLHtiYXRjaGVzOkkwfT1hd2FpdCB6WChoMCksdjA9bnVsbDtmb3IobGV0IE4kIG9mIEkwKXtpZihOJC5udW1Sb3dzPT09MClpZihGJChOJCkpTiQ9YXdhaXQgRSQoTiQsRCxKKTtlbHNle08kKE4kLEopO2NvbnRpbnVlfWlmKHYwIT09bnVsbCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsIkEgdW5hcnkgcmVzcG9uc2UgcmV0dXJuZWQgbW9yZSB0aGFuIG9uZSBkYXRhIGJhdGNoIiwiIik7djA9TiR9cmV0dXJuIHYwPT09bnVsbD9udWxsOnpRKHYwKX0sYXN5bmMgc3RyZWFtUmF3KFMsZCxrMCl7YXdhaXQgbSgpO2xldCBYMD1kWChkKSxoMD1hd2FpdCBkMChkLm1ldGFkYXRhKSxJMD1hd2FpdCBuMChTLHZKKFgwLnNjaGVtYSxbWDBdKSxrMC5oYXNIZWFkZXIsaDApO3JldHVybiBuZXcgQjYoe2Jhc2VVcmw6USxwcmVmaXg6aDAsbWV0aG9kOlMsc3RhdGVUb2tlbjpJMC5zdGF0ZVRva2VuLGNhbGxTdGF0ZVRva2VuOkkwLmNhbGxTdGF0ZVRva2VuLG91dHB1dFNjaGVtYTpJMC5vdXRwdXRTY2hlbWE/P0UwKFtdKSxvbkxvZzpKLHBlbmRpbmdCYXRjaGVzOkkwLnBlbmRpbmdCYXRjaGVzLGZpbmlzaGVkOkkwLmZpbmlzaGVkLGhlYWRlcjpudWxsLHJhd0hlYWRlcjpJMC5oZWFkZXJCYXRjaD09PW51bGw/bnVsbDp6UShJMC5oZWFkZXJCYXRjaCksY29tcHJlc3Npb25MZXZlbDpXLGNvbXByZXNzRm46VCxkZWNvbXByZXNzRm46RSxhdXRob3JpemF0aW9uOlksZXh0ZXJuYWxDb25maWc6RCxhY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM6YygpLHBvc3RGbjplfSl9LGFzeW5jIHJlc3VtZVN0cmVhbShTLGQsazApe2F3YWl0IG0oKSxhd2FpdCBmKCksYXdhaXQgeDAoKTtsZXR7Y3Vyc29yOlgwLGNhbGxUb2tlbjpoMH09RDcoZCk7cmV0dXJuIG5ldyBCNih7YmFzZVVybDpRLHByZWZpeDp3KCksbWV0aG9kOlMsc3RhdGVUb2tlbjpYMCxjYWxsU3RhdGVUb2tlbjpoMCxvdXRwdXRTY2hlbWE6azA/P0UwKFtdKSxvbkxvZzpKLHBlbmRpbmdCYXRjaGVzOltdLGZpbmlzaGVkOiExLGhlYWRlcjpudWxsLGNvbXByZXNzaW9uTGV2ZWw6Vyxjb21wcmVzc0ZuOlQsZGVjb21wcmVzc0ZuOkUsYXV0aG9yaXphdGlvbjpZLGV4dGVybmFsQ29uZmlnOkQsYWNjZXB0ZWRNYXhSZXNwb25zZUJ5dGVzOmMoKSxwb3N0Rm46ZX0pfSxhc3luYyBkZXNjcmliZSgpe3JldHVybiBhd2FpdCBtKCksYXdhaXQgZigpLE8xKFEse3ByZWZpeDpYLHByb3RvY29sOlo/LnByb3RvY29sLGV4dGVybmFsTG9jYXRpb246RCxhdXRob3JpemF0aW9uOlksY29tcHJlc3Npb25MZXZlbDpXLGNvbXByZXNzRm46VCxkZWNvbXByZXNzRm46RSxhY2NlcHRlZE1heFJlc3BvbnNlQnl0ZXM6YygpLGZldGNoOkwscmVzcG9uc2VCdWRnZXRWZXJpZmllZDohMH0pfSxhc3luYyBjYXBhYmlsaXRpZXMoKXtsZXQgUz1hd2FpdCBrOChRLFgsWSx6LEwpO3JldHVybiB5PVMsU30sYXN5bmMgcmVxdWVzdFVwbG9hZFVybHMoUz0xKXtyZXR1cm4gQzcoUSxYLFMsWSxMLHopfSxiZWdpblNlc3Npb24oUyl7cS5wdXNoKHt0b2tlbjpTP1M6bnVsbCxlY2hvOnt9fSl9LGN1cnJlbnRTZXNzaW9uVG9rZW4oKXtyZXR1cm4gUCgpPy50b2tlbj8/bnVsbH0sY3VycmVudEVjaG9IZWFkZXJzKCl7cmV0dXJuey4uLlAoKT8uZWNobz8/e319fSxkZXRhY2hTZXNzaW9uKCl7bGV0IFM9UCgpO2lmKFM9PT1udWxsKXJldHVybiBudWxsO2xldCBkPVMudG9rZW47cmV0dXJuIFMudG9rZW49bnVsbCxTLmVjaG89e30sZH0sYXN5bmMgZW5kU2Vzc2lvbigpe2xldCBTPXEucG9wKCk7aWYoUz09PXZvaWQgMClyZXR1cm47bGV0e3Rva2VuOmQsZWNobzprMH09UztpZihkPT09bnVsbClyZXR1cm47bGV0IFgwPXtbZlhdOmR9O2lmKFkpWDAuQXV0aG9yaXphdGlvbj1ZO2ZvcihsZXRbaDAsSTBdb2YgT2JqZWN0LmVudHJpZXMoazApKVgwW2gwXT1JMDt0cnl7YXdhaXQgSChRK2o2KHJHLHtwcmVmaXg6WH0pLHttZXRob2Q6IkRFTEVURSIsaGVhZGVyczpYMH0pfWNhdGNoe319LGNsb3NlKCl7fX19dmFyIFI3PU8oKCk9PntXWCgpO0haKCk7STgoKTtCVygpO0o4KCk7T0ooKTtSVygpO0gxKCk7RjUoKTtTNigpO0MxKCk7TTUoKTtPNygpO0hVKCl9KTtmdW5jdGlvbiBoVigkKXtsZXQgWj17cmVzb3VyY2U6JC5yZXNvdXJjZSxhdXRob3JpemF0aW9uU2VydmVyczokLmF1dGhvcml6YXRpb25fc2VydmVyc307aWYoJC5zY29wZXNfc3VwcG9ydGVkKVouc2NvcGVzU3VwcG9ydGVkPSQuc2NvcGVzX3N1cHBvcnRlZDtpZigkLmJlYXJlcl9tZXRob2RzX3N1cHBvcnRlZClaLmJlYXJlck1ldGhvZHNTdXBwb3J0ZWQ9JC5iZWFyZXJfbWV0aG9kc19zdXBwb3J0ZWQ7aWYoJC5yZXNvdXJjZV9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkKVoucmVzb3VyY2VTaWduaW5nQWxnVmFsdWVzU3VwcG9ydGVkPSQucmVzb3VyY2Vfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZDtpZigkLnJlc291cmNlX25hbWUpWi5yZXNvdXJjZU5hbWU9JC5yZXNvdXJjZV9uYW1lO2lmKCQucmVzb3VyY2VfZG9jdW1lbnRhdGlvbilaLnJlc291cmNlRG9jdW1lbnRhdGlvbj0kLnJlc291cmNlX2RvY3VtZW50YXRpb247aWYoJC5yZXNvdXJjZV9wb2xpY3lfdXJpKVoucmVzb3VyY2VQb2xpY3lVcmk9JC5yZXNvdXJjZV9wb2xpY3lfdXJpO2lmKCQucmVzb3VyY2VfdG9zX3VyaSlaLnJlc291cmNlVG9zVXJpPSQucmVzb3VyY2VfdG9zX3VyaTtpZigkLmNsaWVudF9pZClaLmNsaWVudElkPSQuY2xpZW50X2lkO2lmKCQuY2xpZW50X3NlY3JldClaLmNsaWVudFNlY3JldD0kLmNsaWVudF9zZWNyZXQ7aWYoJC51c2VfaWRfdG9rZW5fYXNfYmVhcmVyKVoudXNlSWRUb2tlbkFzQmVhcmVyPSQudXNlX2lkX3Rva2VuX2FzX2JlYXJlcjtpZigkLmRldmljZV9jb2RlX2NsaWVudF9pZClaLmRldmljZUNvZGVDbGllbnRJZD0kLmRldmljZV9jb2RlX2NsaWVudF9pZDtpZigkLmRldmljZV9jb2RlX2NsaWVudF9zZWNyZXQpWi5kZXZpY2VDb2RlQ2xpZW50U2VjcmV0PSQuZGV2aWNlX2NvZGVfY2xpZW50X3NlY3JldDtyZXR1cm4gWn1hc3luYyBmdW5jdGlvbiB6VSgkLFope2xldCBRPShaPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpLFg9YCR7JC5yZXBsYWNlKC9cLyskLywiIil9Ly53ZWxsLWtub3duL29hdXRoLXByb3RlY3RlZC1yZXNvdXJjZSR7UX1gO3RyeXtyZXR1cm4gYXdhaXQgRTcoWCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWFzeW5jIGZ1bmN0aW9uIEU3KCQpe2xldCBaPWF3YWl0IGZldGNoKCQpO2lmKCFaLm9rKXRocm93IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggT0F1dGggbWV0YWRhdGEgZnJvbSAkeyR9OiAke1ouc3RhdHVzfWApO2xldCBRPWF3YWl0IFouanNvbigpO3JldHVybiBoVihRKX1mdW5jdGlvbiBxVSgkKXtsZXQgWj0kLm1hdGNoKC9eQmVhcmVyXHMrKC4qKS9pKTtpZighWilyZXR1cm4gbnVsbDtsZXQgWD1aWzFdLm1hdGNoKC9yZXNvdXJjZV9tZXRhZGF0YT0iKFteIl0rKSIvKTtpZighWClyZXR1cm4gbnVsbDtyZXR1cm4gWFsxXX1mdW5jdGlvbiBQVSgkKXtsZXQgWj0kLm1hdGNoKC9eQmVhcmVyXHMrKC4qKS9pKTtpZighWilyZXR1cm4gbnVsbDtsZXQgWD1aWzFdLm1hdGNoKC9jbGllbnRfaWQ9IihbXiJdKykiLyk7aWYoIVgpcmV0dXJuIG51bGw7cmV0dXJuIFhbMV19ZnVuY3Rpb24gRlUoJCl7bGV0IFo9JC5tYXRjaCgvXkJlYXJlclxzKyguKikvaSk7aWYoIVopcmV0dXJuIG51bGw7bGV0IFg9WlsxXS5tYXRjaCgvY2xpZW50X3NlY3JldD0iKFteIl0rKSIvKTtpZighWClyZXR1cm4gbnVsbDtyZXR1cm4gWFsxXX1mdW5jdGlvbiBOVSgkKXtsZXQgWj0kLm1hdGNoKC9eQmVhcmVyXHMrKC4qKS9pKTtpZighWilyZXR1cm4hMTtsZXQgWD1aWzFdLm1hdGNoKC91c2VfaWRfdG9rZW5fYXNfYmVhcmVyPSIoW14iXSspIi8pO2lmKCFYKXJldHVybiExO3JldHVybiBYWzFdPT09InRydWUifWZ1bmN0aW9uIFVVKCQpe2xldCBaPSQubWF0Y2goL15CZWFyZXJccysoLiopL2kpO2lmKCFaKXJldHVybiBudWxsO2xldCBYPVpbMV0ubWF0Y2goL2RldmljZV9jb2RlX2NsaWVudF9pZD0iKFteIl0rKSIvKTtpZighWClyZXR1cm4gbnVsbDtyZXR1cm4gWFsxXX1mdW5jdGlvbiBNVSgkKXtsZXQgWj0kLm1hdGNoKC9eQmVhcmVyXHMrKC4qKS9pKTtpZighWilyZXR1cm4gbnVsbDtsZXQgWD1aWzFdLm1hdGNoKC9kZXZpY2VfY29kZV9jbGllbnRfc2VjcmV0PSIoW14iXSspIi8pO2lmKCFYKXJldHVybiBudWxsO3JldHVybiBYWzFdfWZ1bmN0aW9uIGZWKCl7aWYobFcpcmV0dXJuIGxXO2xldCAkPWdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0QnVpbHRpbk1vZHVsZTtpZih0eXBlb2YgJD09PSJmdW5jdGlvbiIpe2xldCBYPSQuY2FsbChnbG9iYWxUaGlzLnByb2Nlc3MsTFUpO2lmKFg/LndyaXRlU3luYylyZXR1cm4gbFc9WC53cml0ZVN5bmMuYmluZChYKSxsV31sZXQgWj1pbXBvcnQubWV0YS5yZXF1aXJlPz9nbG9iYWxUaGlzLnJlcXVpcmU/P251bGw7aWYoIVopdGhyb3cgRXJyb3IoIklwY1N0cmVhbVdyaXRlciBuZWVkcyBzeW5jaHJvbm91cyBub2RlOmZzLndyaXRlU3luYywgcmVhY2hlZCB2aWEgaW1wb3J0Lm1ldGEucmVxdWlyZSAoQnVuKSwgZ2xvYmFsVGhpcy5yZXF1aXJlIChOb2RlIENKUyksIG9yIHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSAoTm9kZSA+PSAyMC4xNikuIFRoaXMgcnVudGltZSBvZmZlcnMgbm9uZSBvZiB0aGVtLCBzbyB0aGUgc3VicHJvY2VzcyB0cmFuc3BvcnQgaXMgdW5hdmFpbGFibGUuIE9uIGFuIG9sZGVyIE5vZGUgRVNNLCBlaXRoZXIgdXBncmFkZSBvciBzZXQgZ2xvYmFsVGhpcy5yZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLiIpO2xldCBRPVooTFUpO3JldHVybiBsVz1RLndyaXRlU3luYy5iaW5kKFEpLGxXfWZ1bmN0aW9uIEFVKCQsWil7bGV0IFE9ZlYoKSxYPTAsSj0wO3doaWxlKFg8Wi5sZW5ndGgpdHJ5e2xldCBXPVEoJCxaLFgsTWF0aC5taW4oWi5sZW5ndGgtWCx1VikpO2lmKFc8PTApdGhyb3cgRXJyb3IoYHdyaXRlU3luYyByZXR1cm5lZCAke1d9YCk7WCs9VyxKPTB9Y2F0Y2goVyl7aWYoVy5jb2RlPT09IkVBR0FJTiIpe2lmKCsrSjw4MTkyKWNvbnRpbnVlO0F0b21pY3Mud2FpdChuZXcgSW50MzJBcnJheShuZXcgU2hhcmVkQXJyYXlCdWZmZXIoNCkpLDAsMCwxKSxKPTA7Y29udGludWV9dGhyb3cgV319YXN5bmMgZnVuY3Rpb24gRFUoJCxaKXtsZXQgUT0wO2Rve2xldCBYPU1hdGgubWluKFErdzcsWi5sZW5ndGgpO2F3YWl0IHBWKCQsWi5zdWJhcnJheShRLFgpKSxRPVh9d2hpbGUoUTxaLmxlbmd0aCl9YXN5bmMgZnVuY3Rpb24gcFYoJCxaKXtpZigkLmRlc3Ryb3llZHx8JC53cml0YWJsZUVuZGVkKXRocm93IEVycm9yKCJzb2NrZXRXcml0ZUFsbDogc29ja2V0IGlzIGFscmVhZHkgY2xvc2VkIik7aWYoJC53cml0ZShaKSlyZXR1cm47YXdhaXQgbmV3IFByb21pc2UoKFgsSik9PntsZXQgVz0oKT0+eyQub2ZmKCJkcmFpbiIsWSksJC5vZmYoImVycm9yIixHKSwkLm9mZigiY2xvc2UiLEgpfSxZPSgpPT57VygpLFgoKX0sRz0oeik9PntXKCksSih6KX0sSD0oKT0+e1coKSxYKCl9OyQub25jZSgiZHJhaW4iLFkpLCQub25jZSgiZXJyb3IiLEcpLCQub25jZSgiY2xvc2UiLEgpfSl9Y2xhc3MgUzd7dGFyZ2V0O2NvbnN0cnVjdG9yKCQ9YlYpe2lmKHR5cGVvZiAkPT09Im51bWJlciIpdGhpcy50YXJnZXQ9e2tpbmQ6ImZkIixmZDokfTtlbHNlIGlmKHR5cGVvZiAkLndyaXRlPT09ImZ1bmN0aW9uIiYmISgid3JpdGFibGUiaW4gJCkpdGhpcy50YXJnZXQ9e2tpbmQ6InNpbmsiLHNpbms6JH07ZWxzZSB0aGlzLnRhcmdldD17a2luZDoic29ja2V0Iixzb2NrZXQ6JH19YXN5bmMgd3JpdGVTdHJlYW0oJCxaKXtsZXQgUT1ONigkLFopO2lmKHRoaXMudGFyZ2V0LmtpbmQ9PT0iZmQiKUFVKHRoaXMudGFyZ2V0LmZkLFEpO2Vsc2UgaWYodGhpcy50YXJnZXQua2luZD09PSJzaW5rIilhd2FpdCB0aGlzLnRhcmdldC5zaW5rLndyaXRlKFEpO2Vsc2UgYXdhaXQgRFUodGhpcy50YXJnZXQuc29ja2V0LFEpfW9wZW5TdHJlYW0oJCl7cmV0dXJuIG5ldyBPVSh0aGlzLnRhcmdldCwkKX19Y2xhc3MgT1V7ZW5jb2Rlcjt0YXJnZXQ7Y2xvc2VkPSExO3dyaXRlQ2hhaW49UHJvbWlzZS5yZXNvbHZlKCk7Y29uc3RydWN0b3IoJCxaKXt0aGlzLnRhcmdldD0kLHRoaXMuZW5jb2Rlcj1GNihaKSx0aGlzLmVucXVldWUodGhpcy5lbmNvZGVyLnN0YXJ0KCkpfWFzeW5jIHdyaXRlKCQpe2lmKHRoaXMuY2xvc2VkKXRocm93IEVycm9yKCJTdHJlYW0gYWxyZWFkeSBjbG9zZWQiKTtyZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMuZW5jb2Rlci53cml0ZUJhdGNoKCQpKX1hc3luYyBjbG9zZSgpe2lmKHRoaXMuY2xvc2VkKXJldHVybjtyZXR1cm4gdGhpcy5jbG9zZWQ9ITAsdGhpcy5lbnF1ZXVlKHRoaXMuZW5jb2Rlci5maW5pc2goKSl9ZW5xdWV1ZSgkKXtsZXQgWj10aGlzLnRhcmdldDtpZihaLmtpbmQ9PT0iZmQiKXJldHVybiBBVShaLmZkLCQpLG1WO2xldCBRPXRoaXMud3JpdGVDaGFpbi50aGVuKCgpPT57aWYoWi5raW5kPT09InNpbmsiKXJldHVybiBaLnNpbmsud3JpdGUoJCk7cmV0dXJuIERVKFouc29ja2V0LCQpfSk7cmV0dXJuIHRoaXMud3JpdGVDaGFpbj1RLmNhdGNoKCgpPT57cmV0dXJufSksUX19dmFyIGJWPTEsbVYsTFU9Im5vZGU6ZnMiLGxXPW51bGwsdVY9MTA3Mzc0MTgyNCx3Nz0xMzEwNzI7dmFyIEI3PU8oKCk9PntxWigpO21WPVByb21pc2UucmVzb2x2ZSgpfSk7ZnVuY3Rpb24galUoJCxaKXtpZigkLm5hbWUhPT1aLm5hbWV8fCQubnVsbGFibGUhPT1aLm51bGxhYmxlfHxTdHJpbmcoJC50eXBlKSE9PVN0cmluZyhaLnR5cGUpKXJldHVybiExO2xldCBRPSQudHlwZS5jaGlsZHJlbj8/W10sWD1aLnR5cGUuY2hpbGRyZW4/P1tdO3JldHVybiBRLmxlbmd0aD09PVgubGVuZ3RoJiZRLmV2ZXJ5KChKLFcpPT5qVShKLFhbV10pKX1mdW5jdGlvbiBDVSgkLFope3JldHVybiAkLmZpZWxkcy5sZW5ndGg9PT1aLmZpZWxkcy5sZW5ndGgmJiQuZmllbGRzLmV2ZXJ5KChRLFgpPT5qVShRLFouZmllbGRzW1hdKSl9Y2xhc3MgZFd7ZW5jb2Rlcjt3cml0ZUZuO2Nsb3NlZD0hMTtjb25zdHJ1Y3RvcigkLFope3RoaXMud3JpdGVGbj0kLHRoaXMuZW5jb2Rlcj1LVShaKX13cml0ZSgkKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBFcnJvcigiUGlwZUluY3JlbWVudGFsV3JpdGVyIGFscmVhZHkgY2xvc2VkIik7dGhpcy5lbWl0KHRoaXMuZW5jb2Rlci53cml0ZUJhdGNoKCQpKX1jbG9zZSgpe2lmKHRoaXMuY2xvc2VkKXJldHVybjt0aGlzLmNsb3NlZD0hMCx0aGlzLmVtaXQodGhpcy5lbmNvZGVyLmZpbmlzaCgpKX1lbWl0KCQpe2lmKCQubGVuZ3RoPjApdGhpcy53cml0ZUZuKCQpfX1mdW5jdGlvbiBrNygkLFosUSl7bGV0IFg9UT8ub25Mb2csSj1RPy5leHRlcm5hbExvY2F0aW9uLFc9bnVsbCxZPW51bGwsRz1udWxsLEg9IiIsej0iIixxPSIiLFA9W10sVSxNLEw9UT8ucHJvdG9jb2wsRD0hMSxSPW51bGwsVj0hMSxnPShoKT0+e2xldCBzPTA7ZG97bGV0IGY9TWF0aC5taW4ocyt3NyxoLmxlbmd0aCk7Wi53cml0ZShoLnN1YmFycmF5KHMsZikpLHM9Zn13aGlsZShzPGgubGVuZ3RoKTtaLmZsdXNoPy4oKX07YXN5bmMgZnVuY3Rpb24gdygpe2lmKFcpcmV0dXJuIFc7aWYoIVkpWT14Si5jcmVhdGUoJCk7cmV0dXJuIFc9YXdhaXQgWSxXfWFzeW5jIGZ1bmN0aW9uIFQoKXtpZihSKWF3YWl0IFIsUj1udWxsO2lmKEQpdGhyb3cgRXJyb3IoIlBpcGUgdHJhbnNwb3J0IGlzIGJ1c3kg4oCUIGFub3RoZXIgY2FsbCBvciBzdHJlYW0gaXMgaW4gcHJvZ3Jlc3MuICIrIlBpcGUgY29ubmVjdGlvbnMgYXJlIHNpbmdsZS10aHJlYWRlZDsgd2FpdCBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiIpO0Q9ITB9ZnVuY3Rpb24gRSgpe0Q9ITF9ZnVuY3Rpb24gXyhoKXtSPWh9YXN5bmMgZnVuY3Rpb24geSgpe2lmKEcpcmV0dXJuIEc7YXdhaXQgVCgpO3RyeXtsZXQgaD1hc3luYyhvLGUpPT57ZyhBNyhvLGUpKTtsZXQgdT1hd2FpdChhd2FpdCB3KCkpLnJlYWRTdHJlYW0oKTtpZighdSl0aHJvdyBuZXcgYigiVHJhbnNwb3J0RXJyb3IiLGBFT0YgcmVhZGluZyB0aGUgJyR7b30nIHJlZmxlY3Rpb24gcmVzcG9uc2VgLCIiKTtyZXR1cm4gTDcodS5iYXRjaGVzLFgsSil9LHMsZj1MO2lmKCFmKXM9SzUoYXdhaXQgaChOMSkpLGY9RDEocyk7bGV0IGM9QTEoSDUoYXdhaXQgaCh3NixmKSkscyk7cmV0dXJuIEg9Yy5wcm90b2NvbE5hbWUsej1jLnByb3RvY29sVmVyc2lvbixxPWMucHJvdG9jb2xIYXNoLFA9Yy5ob3N0ZWRQcm90b2NvbHMsVT1jLnNlcnZlcklkLE09Yy5yZXF1ZXN0VmVyc2lvbixHPW5ldyBNYXAoYy5tZXRob2RzLm1hcCgobyk9PltvLm5hbWUsb10pKSxHfWZpbmFsbHl7RSgpfX1yZXR1cm57YXN5bmMgY2FsbChoLHMpe2xldCBmPWF3YWl0IHkoKTthd2FpdCBUKCk7dHJ5e2xldCBjPWYuZ2V0KGgpO2lmKCFjKXRocm93IEVycm9yKGBVbmtub3duIG1ldGhvZDogJyR7aH0nYCk7bGV0IG89YXdhaXQgdygpLGU9ey4uLmMuZGVmYXVsdHM/P3t9LC4uLnM/P3t9fSxtPXZRKGMucGFyYW1zU2NoZW1hLGUsaCx7cHJvdG9jb2xWZXJzaW9uOnoscHJvdG9jb2w6SH0pO2cobSk7bGV0IHU9YXdhaXQgby5yZWFkU3RyZWFtKCk7aWYoIXUpdGhyb3cgRXJyb3IoIkVPRiByZWFkaW5nIHJlc3BvbnNlIik7bGV0IEYwPW51bGw7Zm9yKGxldCBwIG9mIHUuYmF0Y2hlcyl7aWYocC5udW1Sb3dzPT09MClpZihGJChwKSlwPWF3YWl0IEUkKHAsSixYKTtlbHNle08kKHAsWCk7Y29udGludWV9aWYoRjAhPT1udWxsKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiQSB1bmFyeSByZXNwb25zZSByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGRhdGEgYmF0Y2giLCIiKTtGMD1wfWlmKCFGMClyZXR1cm4gbnVsbDtsZXQgQjA9SFEoRjApO2lmKEIwLmxlbmd0aD09PTApcmV0dXJuIG51bGw7aWYoYy5yZXN1bHRTY2hlbWEuZmllbGRzLmxlbmd0aD09PTApcmV0dXJuIG51bGw7cmV0dXJuIEIwWzBdfWZpbmFsbHl7RSgpfX0sYXN5bmMgY2FsbFJhdyhoLHMpe2F3YWl0IFQoKTt0cnl7bGV0IGY9ZFgocyk7Zyh2SihmLnNjaGVtYSxbZl0pKTtsZXQgbz1hd2FpdChhd2FpdCB3KCkpLnJlYWRTdHJlYW0oKTtpZighbyl0aHJvdyBuZXcgYigiVHJhbnNwb3J0RXJyb3IiLCJFT0YgcmVhZGluZyByZXNwb25zZSIsIiIpO2xldCBlPW51bGw7Zm9yKGxldCBtIG9mIG8uYmF0Y2hlcyl7aWYobS5udW1Sb3dzPT09MClpZihGJChtKSltPWF3YWl0IEUkKG0sSixYKTtlbHNle08kKG0sWCk7Y29udGludWV9aWYoZSE9PW51bGwpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJBIHVuYXJ5IHJlc3BvbnNlIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgZGF0YSBiYXRjaCIsIiIpO2U9bX1yZXR1cm4gZT09PW51bGw/bnVsbDp6UShlKX1maW5hbGx5e0UoKX19LGFzeW5jIHN0cmVhbVJhdyhoLHMsZil7YXdhaXQgVCgpO3RyeXtsZXQgYz1kWChzKTtnKHZKKGMuc2NoZW1hLFtjXSkpO2xldCBvPW51bGw7aWYoZi5oYXNIZWFkZXIpe2xldCBlPWF3YWl0KGF3YWl0IHcoKSkucmVhZFN0cmVhbSgpO2lmKGUpZm9yKGxldCBtIG9mIGUuYmF0Y2hlcyl7aWYobS5udW1Sb3dzPT09MCl7aWYoRiQobSkpe28/Pz16UShhd2FpdCBFJChtLEosWCkpO2NvbnRpbnVlfU8kKG0sWCk7Y29udGludWV9bz8/PXpRKG0pfX1yZXR1cm4gbmV3IGoxKHtyZWFkZXI6dyx3cml0ZUZuOmcsb25Mb2c6WCxoZWFkZXI6bnVsbCxyYXdIZWFkZXI6byxvdXRwdXRTY2hlbWE6RTAoW10pLHJlbGVhc2VCdXN5OkUsc2V0RHJhaW5Qcm9taXNlOl8sZXh0ZXJuYWxDb25maWc6Sn0pfWNhdGNoKGMpe3RyeXtsZXQgbz1hd2FpdCB3KCk7ZyhmMChFMChbXSksW10pKSxhd2FpdCBvLnJlYWRTdHJlYW0oKX1jYXRjaHt9dGhyb3cgRSgpLGN9fSxhc3luYyBzdHJlYW0oaCxzKXtsZXQgZj1hd2FpdCB5KCk7YXdhaXQgVCgpO3RyeXtsZXQgYz1mLmdldChoKTtpZighYyl0aHJvdyBFcnJvcihgVW5rbm93biBtZXRob2Q6ICcke2h9J2ApO2xldCBvPWF3YWl0IHcoKSxlPXsuLi5jLmRlZmF1bHRzPz97fSwuLi5zPz97fX0sbT12UShjLnBhcmFtc1NjaGVtYSxlLGgse3Byb3RvY29sVmVyc2lvbjp6LHByb3RvY29sOkh9KTtnKG0pO2xldCB1PW51bGw7aWYoYy5oZWFkZXJTY2hlbWEpe2xldCBCMD1hd2FpdCBvLnJlYWRTdHJlYW0oKTtpZihCMClmb3IobGV0IHAgb2YgQjAuYmF0Y2hlcyl7aWYocC5udW1Sb3dzPT09MClpZihGJChwKSlwPWF3YWl0IEUkKHAsSixYKTtlbHNle08kKHAsWCk7Y29udGludWV9bGV0IHgwPUhRKHApO2lmKHgwLmxlbmd0aD4wKXU9eDBbMF19fWxldCBGMD1jLm91dHB1dFNjaGVtYT8/Yy5yZXN1bHRTY2hlbWE7cmV0dXJuIG5ldyBqMSh7cmVhZGVyOm8sd3JpdGVGbjpnLG9uTG9nOlgsaGVhZGVyOnUsb3V0cHV0U2NoZW1hOkYwLHJlbGVhc2VCdXN5OkUsc2V0RHJhaW5Qcm9taXNlOl8sZXh0ZXJuYWxDb25maWc6Sn0pfWNhdGNoKGMpe3RyeXtsZXQgbz1hd2FpdCB3KCksZT1FMChbXSksbT1mMChlLFtdKTtnKG0pO2xldCB1PWF3YWl0IG8ucmVhZFN0cmVhbSgpfWNhdGNoe310aHJvdyBFKCksY319LGFzeW5jIGRlc2NyaWJlKCl7bGV0IGg9YXdhaXQgeSgpO3JldHVybntwcm90b2NvbE5hbWU6SCxwcm90b2NvbFZlcnNpb246eixwcm90b2NvbEhhc2g6cSxob3N0ZWRQcm90b2NvbHM6UCxtZXRob2RzOlsuLi5oLnZhbHVlcygpXSxzZXJ2ZXJJZDpVLHJlcXVlc3RWZXJzaW9uOk19fSxjbG9zZSgpe2lmKFYpcmV0dXJuO1Y9ITAsWi5lbmQoKX19fWZ1bmN0aW9uIFZVKCQsWil7bGV0IFE9QnVuLnNwYXduKCQse3N0ZGluOiJwaXBlIixzdGRvdXQ6InBpcGUiLHN0ZGVycjpaPy5zdGRlcnI/PyJpZ25vcmUiLGN3ZDpaPy5jd2QsZW52Olo/LmVudj97Li4ucHJvY2Vzcy5lbnYsLi4uWi5lbnZ9OnZvaWQgMH0pLFg9US5zdGRvdXQsVz1rNyhYLHt3cml0ZShHKXtRLnN0ZGluLndyaXRlKEcpfSxmbHVzaCgpe1Euc3RkaW4uZmx1c2goKX0sZW5kKCl7US5zdGRpbi5lbmQoKX19LHtvbkxvZzpaPy5vbkxvZyxleHRlcm5hbExvY2F0aW9uOlo/LmV4dGVybmFsTG9jYXRpb259KSxZPVcuY2xvc2U7cmV0dXJuIFcuY2xvc2U9KCk9PntZLmNhbGwoVyk7dHJ5e1Eua2lsbCgpfWNhdGNoe319LFd9dmFyIGoxO3ZhciBSVT1PKCgpPT57V1goKTtIWigpO0k4KCk7SjgoKTtNMSgpO3E1KCk7QjcoKTtGNSgpO1M2KCk7QzEoKTtNNSgpO2oxPWNsYXNzIGoxe19vcGVuUmVhZGVyO19yZWFkZXJDYWNoZTtfd3JpdGVGbjtfb25Mb2c7X2hlYWRlcjtfcmF3SGVhZGVyO19pbnB1dFdyaXRlcj1udWxsO19pbnB1dFNjaGVtYT1udWxsO19vdXRwdXRTdHJlYW1PcGVuZWQ9ITE7X2Nsb3NlZD0hMTtfb3V0cHV0U2NoZW1hO19yZWxlYXNlQnVzeTtfc2V0RHJhaW5Qcm9taXNlO19leHRlcm5hbENvbmZpZztjb25zdHJ1Y3RvcigkKXt0aGlzLl9vcGVuUmVhZGVyPXR5cGVvZiAkLnJlYWRlcj09PSJmdW5jdGlvbiI/JC5yZWFkZXI6YXN5bmMoKT0+JC5yZWFkZXIsdGhpcy5fcmVhZGVyQ2FjaGU9dHlwZW9mICQucmVhZGVyPT09ImZ1bmN0aW9uIj9udWxsOiQucmVhZGVyLHRoaXMuX3dyaXRlRm49JC53cml0ZUZuLHRoaXMuX29uTG9nPSQub25Mb2csdGhpcy5faGVhZGVyPSQuaGVhZGVyLHRoaXMuX3Jhd0hlYWRlcj0kLnJhd0hlYWRlcj8/bnVsbCx0aGlzLl9vdXRwdXRTY2hlbWE9JC5vdXRwdXRTY2hlbWEsdGhpcy5fcmVsZWFzZUJ1c3k9JC5yZWxlYXNlQnVzeSx0aGlzLl9zZXREcmFpblByb21pc2U9JC5zZXREcmFpblByb21pc2UsdGhpcy5fZXh0ZXJuYWxDb25maWc9JC5leHRlcm5hbENvbmZpZ31nZXQgaGVhZGVyKCl7cmV0dXJuIHRoaXMuX2hlYWRlcn1nZXQgcmF3SGVhZGVyKCl7cmV0dXJuIHRoaXMuX3Jhd0hlYWRlcn1hc3luYyBfcmVhZGVyKCl7cmV0dXJuIHRoaXMuX3JlYWRlckNhY2hlPz89YXdhaXQgdGhpcy5fb3BlblJlYWRlcigpLHRoaXMuX3JlYWRlckNhY2hlfWFzeW5jIF9yZWFkT3V0cHV0QmF0Y2goKXt3aGlsZSghMCl7bGV0ICQ9YXdhaXQoYXdhaXQgdGhpcy5fcmVhZGVyKCkpLnJlYWROZXh0QmF0Y2goKTtpZigkPT09bnVsbClyZXR1cm4gbnVsbDtpZigkLm51bVJvd3M9PT0wKXtpZihGJCgkKSlyZXR1cm4gYXdhaXQgRSQoJCx0aGlzLl9leHRlcm5hbENvbmZpZyx0aGlzLl9vbkxvZyk7aWYoTyQoJCx0aGlzLl9vbkxvZykpY29udGludWV9cmV0dXJuICR9fWFzeW5jIF9lbnN1cmVPdXRwdXRTdHJlYW0oKXtpZih0aGlzLl9vdXRwdXRTdHJlYW1PcGVuZWQpcmV0dXJuO2lmKHRoaXMuX291dHB1dFN0cmVhbU9wZW5lZD0hMCwhYXdhaXQoYXdhaXQgdGhpcy5fcmVhZGVyKCkpLm9wZW5OZXh0U3RyZWFtKCkpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJFeHBlY3RlZCBvdXRwdXQgc3RyZWFtIGJ1dCBnb3QgRU9GIiwiIil9YXN5bmMgdGljaygkKXtsZXQgWj1hd2FpdCB0aGlzLl90aWNrQmF0Y2goJCk7cmV0dXJuIFo9PT1udWxsP1tdOkhRKFopfWFzeW5jIHRpY2tSYXcoJCl7bGV0IFo9YXdhaXQgdGhpcy5fdGlja0JhdGNoKCQpO3JldHVybiBaPT09bnVsbD9udWxsOnpRKFopfWFzeW5jIG5leHRXaXRoVG9rZW5SYXcoKXtsZXQgJD1hd2FpdCB0aGlzLnRpY2tSYXcoKTtyZXR1cm4gJD09PW51bGw/bnVsbDp7aXRlbTokLHRva2VuOm51bGx9fWFzeW5jIF90aWNrQmF0Y2goJCl7aWYodGhpcy5fY2xvc2VkKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiU3RyZWFtIHNlc3Npb24gaXMgY2xvc2VkIiwiIik7bGV0IFo9RTAoW10pO2lmKCF0aGlzLl9pbnB1dFdyaXRlcil0aGlzLl9pbnB1dFdyaXRlcj1uZXcgZFcodGhpcy5fd3JpdGVGbixaKTtsZXQgUT1HUShaLCQ/bmV3IE1hcCgkKTp2b2lkIDApO3RoaXMuX2lucHV0V3JpdGVyLndyaXRlKFEpLGF3YWl0IHRoaXMuX2Vuc3VyZU91dHB1dFN0cmVhbSgpO2xldCBYO3RyeXtYPWF3YWl0IHRoaXMuX3JlYWRPdXRwdXRCYXRjaCgpfWNhdGNoKEope3Rocm93IGF3YWl0IHRoaXMuX2NsZWFudXAoKSxKfWlmKFg9PT1udWxsKXJldHVybiB0aGlzLl9jbG9zZWQ9ITAsdGhpcy5faW5wdXRXcml0ZXIuY2xvc2UoKSx0aGlzLl9pbnB1dFdyaXRlcj1udWxsLHRoaXMuX3JlbGVhc2VCdXN5KCksbnVsbDtyZXR1cm4gWH1hc3luYyBleGNoYW5nZVJhdygkKXtpZih0aGlzLl9jbG9zZWQpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLCJTdHJlYW0gc2Vzc2lvbiBpcyBjbG9zZWQiLCIiKTtsZXQgWj1kWCgkKSxRPVouc2NoZW1hO2lmKHRoaXMuX2lucHV0U2NoZW1hJiYhQ1UodGhpcy5faW5wdXRTY2hlbWEsUSkpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLGBFeGNoYW5nZSBpbnB1dCBzY2hlbWEgY2hhbmdlZDogZXhwZWN0ZWQgJHt0aGlzLl9pbnB1dFNjaGVtYX0sIGdvdCAke1F9YCwiIik7aWYodGhpcy5faW5wdXRTY2hlbWE/Pz1RLCF0aGlzLl9pbnB1dFdyaXRlcil0aGlzLl9pbnB1dFdyaXRlcj1uZXcgZFcodGhpcy5fd3JpdGVGbixRKTt0aGlzLl9pbnB1dFdyaXRlci53cml0ZShaKSxhd2FpdCB0aGlzLl9lbnN1cmVPdXRwdXRTdHJlYW0oKTt0cnl7bGV0IFg9YXdhaXQgdGhpcy5fcmVhZE91dHB1dEJhdGNoKCk7cmV0dXJuIFg9PT1udWxsP251bGw6elEoWCl9Y2F0Y2goWCl7dGhyb3cgYXdhaXQgdGhpcy5fY2xlYW51cCgpLFh9fWFzeW5jIGNhbmNlbCgpe2lmKHRoaXMuX2Nsb3NlZClyZXR1cm47dGhpcy5fY2xvc2VkPSEwO2xldCAkPW5ldyBNYXAoW1tiWCwiMSJdXSk7dHJ5e2xldCBaPXRoaXMuX2lucHV0U2NoZW1hPz9FMChbXSk7aWYoIXRoaXMuX2lucHV0V3JpdGVyKXRoaXMuX2lucHV0V3JpdGVyPW5ldyBkVyh0aGlzLl93cml0ZUZuLFopO3RoaXMuX2lucHV0V3JpdGVyLndyaXRlKEdRKFosJCkpLHRoaXMuX2lucHV0V3JpdGVyLmNsb3NlKCksdGhpcy5faW5wdXRXcml0ZXI9bnVsbH1jYXRjaHt0aGlzLl9yZWxlYXNlQnVzeSgpO3JldHVybn10cnl7aWYoIXRoaXMuX291dHB1dFN0cmVhbU9wZW5lZCl7aWYodGhpcy5fb3V0cHV0U3RyZWFtT3BlbmVkPSEwLCFhd2FpdChhd2FpdCB0aGlzLl9yZWFkZXIoKSkub3Blbk5leHRTdHJlYW0oKSl7dGhpcy5fcmVsZWFzZUJ1c3koKTtyZXR1cm59fXdoaWxlKGF3YWl0KGF3YWl0IHRoaXMuX3JlYWRlcigpKS5yZWFkTmV4dEJhdGNoKCkhPT1udWxsKTt9Y2F0Y2h7fXRoaXMuX3JlbGVhc2VCdXN5KCl9YXN5bmMgZXhjaGFuZ2UoJCl7aWYodGhpcy5fY2xvc2VkKXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIiwiU3RyZWFtIHNlc3Npb24gaXMgY2xvc2VkIiwiIik7bGV0IFosUTtpZighQXJyYXkuaXNBcnJheSgkKSl7aWYoWj0kLnNjaGVtYSxRPSQsdGhpcy5faW5wdXRTY2hlbWEmJiFDVSh0aGlzLl9pbnB1dFNjaGVtYSxaKSl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYEV4Y2hhbmdlIGlucHV0IHNjaGVtYSBjaGFuZ2VkOiBleHBlY3RlZCAke3RoaXMuX2lucHV0U2NoZW1hfSwgZ290ICR7Wn1gLCIiKTt0aGlzLl9pbnB1dFNjaGVtYT8/PVp9ZWxzZSBpZigkLmxlbmd0aD09PTApWj10aGlzLl9pbnB1dFNjaGVtYT8/dGhpcy5fb3V0cHV0U2NoZW1hLFE9R1EoWik7ZWxzZXtsZXQgSj1PYmplY3Qua2V5cygkWzBdKS5tYXAoKFkpPT57bGV0IEc7Zm9yKGxldCB6IG9mICQpaWYoeltZXSE9bnVsbCl7Rz16W1ldO2JyZWFrfWxldCBIPVA1KEcpO3JldHVybiBPMChZLEgsITApfSk7aWYoWj1FMChKKSx0aGlzLl9pbnB1dFNjaGVtYSl7bGV0IFk9dGhpcy5faW5wdXRTY2hlbWE7aWYoWS5maWVsZHMubGVuZ3RoIT09Wi5maWVsZHMubGVuZ3RofHxZLmZpZWxkcy5zb21lKChHLEgpPT5HLm5hbWUhPT1aLmZpZWxkc1tIXS5uYW1lKSl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYEV4Y2hhbmdlIGlucHV0IHNjaGVtYSBjaGFuZ2VkOiBleHBlY3RlZCBbJHtZLmZpZWxkcy5tYXAoKEcpPT5HLm5hbWUpLmpvaW4oIiwgIil9XSBidXQgZ290IFske1ouZmllbGRzLm1hcCgoRyk9PkcubmFtZSkuam9pbigiLCAiKX1dYCwiIil9ZWxzZSB0aGlzLl9pbnB1dFNjaGVtYT1aO2xldCBXPXt9O2ZvcihsZXQgWSBvZiBaLmZpZWxkcylXW1kubmFtZV09JC5tYXAoKEcpPT5HW1kubmFtZV0pO1E9WVEoWixXKX1pZighdGhpcy5faW5wdXRXcml0ZXIpdGhpcy5faW5wdXRXcml0ZXI9bmV3IGRXKHRoaXMuX3dyaXRlRm4sWik7dGhpcy5faW5wdXRXcml0ZXIud3JpdGUoUSksYXdhaXQgdGhpcy5fZW5zdXJlT3V0cHV0U3RyZWFtKCk7dHJ5e2xldCBYPWF3YWl0IHRoaXMuX3JlYWRPdXRwdXRCYXRjaCgpO2lmKFg9PT1udWxsKXJldHVybltdO3JldHVybiBIUShYKX1jYXRjaChYKXt0aHJvdyBhd2FpdCB0aGlzLl9jbGVhbnVwKCksWH19YXN5bmMgX2NsZWFudXAoKXtpZih0aGlzLl9jbG9zZWQpcmV0dXJuO2lmKHRoaXMuX2Nsb3NlZD0hMCx0aGlzLl9pbnB1dFdyaXRlcil0aGlzLl9pbnB1dFdyaXRlci5jbG9zZSgpLHRoaXMuX2lucHV0V3JpdGVyPW51bGw7dHJ5e2lmKHRoaXMuX291dHB1dFN0cmVhbU9wZW5lZCl3aGlsZShhd2FpdChhd2FpdCB0aGlzLl9yZWFkZXIoKSkucmVhZE5leHRCYXRjaCgpIT09bnVsbCk7fWNhdGNoe310aGlzLl9yZWxlYXNlQnVzeSgpfWFzeW5jKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtpZih0aGlzLl9jbG9zZWQpcmV0dXJuO3RyeXtsZXQgJD1FMChbXSk7dGhpcy5faW5wdXRXcml0ZXI9bmV3IGRXKHRoaXMuX3dyaXRlRm4sJCk7d2hpbGUoITApe2xldCBaPWF3YWl0IHRoaXMudGljaygpO2lmKHRoaXMuX2Nsb3NlZClicmVhazt5aWVsZCBafX1maW5hbGx5e2lmKHRoaXMuX2lucHV0V3JpdGVyKXRoaXMuX2lucHV0V3JpdGVyLmNsb3NlKCksdGhpcy5faW5wdXRXcml0ZXI9bnVsbDt0cnl7aWYodGhpcy5fb3V0cHV0U3RyZWFtT3BlbmVkKXdoaWxlKGF3YWl0KGF3YWl0IHRoaXMuX3JlYWRlcigpKS5yZWFkTmV4dEJhdGNoKCkhPT1udWxsKTt9Y2F0Y2h7fXRoaXMuX2Nsb3NlZD0hMCx0aGlzLl9yZWxlYXNlQnVzeSgpfX1jbG9zZSgpe2lmKHRoaXMuX2Nsb3NlZClyZXR1cm47aWYodGhpcy5fY2xvc2VkPSEwLHRoaXMuX2lucHV0V3JpdGVyKXRoaXMuX2lucHV0V3JpdGVyLmNsb3NlKCksdGhpcy5faW5wdXRXcml0ZXI9bnVsbDtlbHNle2xldCBaPUUwKFtdKSxRPWYwKFosW10pO3RoaXMuX3dyaXRlRm4oUSl9bGV0ICQ9KGFzeW5jKCk9Pnt0cnl7aWYoIXRoaXMuX291dHB1dFN0cmVhbU9wZW5lZCl7aWYoYXdhaXQoYXdhaXQgdGhpcy5fcmVhZGVyKCkpLm9wZW5OZXh0U3RyZWFtKCkpd2hpbGUoYXdhaXQoYXdhaXQgdGhpcy5fcmVhZGVyKCkpLnJlYWROZXh0QmF0Y2goKSE9PW51bGwpO31lbHNlIHdoaWxlKGF3YWl0KGF3YWl0IHRoaXMuX3JlYWRlcigpKS5yZWFkTmV4dEJhdGNoKCkhPT1udWxsKTt9Y2F0Y2h7fWZpbmFsbHl7dGhpcy5fcmVsZWFzZUJ1c3koKX19KSgpO3RoaXMuX3NldERyYWluUHJvbWlzZSgkKX19fSk7dmFyIEVVPU8oKCk9PntSVygpO1I3KCk7RjUoKTtSVSgpO083KCl9KTtmdW5jdGlvbiBWMSgkKXtsZXQgWj17cmVzb3VyY2U6JC5yZXNvdXJjZSxhdXRob3JpemF0aW9uX3NlcnZlcnM6JC5hdXRob3JpemF0aW9uU2VydmVyc307aWYoJC5zY29wZXNTdXBwb3J0ZWQpWi5zY29wZXNfc3VwcG9ydGVkPSQuc2NvcGVzU3VwcG9ydGVkO2lmKCQuYmVhcmVyTWV0aG9kc1N1cHBvcnRlZClaLmJlYXJlcl9tZXRob2RzX3N1cHBvcnRlZD0kLmJlYXJlck1ldGhvZHNTdXBwb3J0ZWQ7aWYoJC5yZXNvdXJjZVNpZ25pbmdBbGdWYWx1ZXNTdXBwb3J0ZWQpWi5yZXNvdXJjZV9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPSQucmVzb3VyY2VTaWduaW5nQWxnVmFsdWVzU3VwcG9ydGVkO2lmKCQucmVzb3VyY2VOYW1lKVoucmVzb3VyY2VfbmFtZT0kLnJlc291cmNlTmFtZTtpZigkLnJlc291cmNlRG9jdW1lbnRhdGlvbilaLnJlc291cmNlX2RvY3VtZW50YXRpb249JC5yZXNvdXJjZURvY3VtZW50YXRpb247aWYoJC5yZXNvdXJjZVBvbGljeVVyaSlaLnJlc291cmNlX3BvbGljeV91cmk9JC5yZXNvdXJjZVBvbGljeVVyaTtpZigkLnJlc291cmNlVG9zVXJpKVoucmVzb3VyY2VfdG9zX3VyaT0kLnJlc291cmNlVG9zVXJpO2lmKCQuY2xpZW50SWQpe2lmKCEvXltBLVphLXowLTlcLS5ffl0rJC8udGVzdCgkLmNsaWVudElkKSl0aHJvdyBFcnJvcigiSW52YWxpZCBjbGllbnRfaWQ6IG11c3QgY29udGFpbiBvbmx5IFVSTC1zYWZlIGNoYXJhY3RlcnMgW0EtWmEtejAtOVxcLS5ffl0iKTtaLmNsaWVudF9pZD0kLmNsaWVudElkfWlmKCQuY2xpZW50U2VjcmV0KXtpZighL15bQS1aYS16MC05XC0uX35dKyQvLnRlc3QoJC5jbGllbnRTZWNyZXQpKXRocm93IEVycm9yKCJJbnZhbGlkIGNsaWVudF9zZWNyZXQ6IG11c3QgY29udGFpbiBvbmx5IFVSTC1zYWZlIGNoYXJhY3RlcnMgW0EtWmEtejAtOVxcLS5ffl0iKTtaLmNsaWVudF9zZWNyZXQ9JC5jbGllbnRTZWNyZXR9aWYoJC5kZXZpY2VDb2RlQ2xpZW50SWQpe2lmKCEvXltBLVphLXowLTlcLS5ffl0rJC8udGVzdCgkLmRldmljZUNvZGVDbGllbnRJZCkpdGhyb3cgRXJyb3IoIkludmFsaWQgZGV2aWNlX2NvZGVfY2xpZW50X2lkOiBtdXN0IGNvbnRhaW4gb25seSBVUkwtc2FmZSBjaGFyYWN0ZXJzIFtBLVphLXowLTlcXC0uX35dIik7Wi5kZXZpY2VfY29kZV9jbGllbnRfaWQ9JC5kZXZpY2VDb2RlQ2xpZW50SWR9aWYoJC5kZXZpY2VDb2RlQ2xpZW50U2VjcmV0KXtpZighL15bQS1aYS16MC05XC0uX35dKyQvLnRlc3QoJC5kZXZpY2VDb2RlQ2xpZW50U2VjcmV0KSl0aHJvdyBFcnJvcigiSW52YWxpZCBkZXZpY2VfY29kZV9jbGllbnRfc2VjcmV0OiBtdXN0IGNvbnRhaW4gb25seSBVUkwtc2FmZSBjaGFyYWN0ZXJzIFtBLVphLXowLTlcXC0uX35dIik7Wi5kZXZpY2VfY29kZV9jbGllbnRfc2VjcmV0PSQuZGV2aWNlQ29kZUNsaWVudFNlY3JldH1pZigkLnVzZUlkVG9rZW5Bc0JlYXJlcilaLnVzZV9pZF90b2tlbl9hc19iZWFyZXI9ITA7cmV0dXJuIFp9ZnVuY3Rpb24gSTcoJCl7cmV0dXJuYC8ud2VsbC1rbm93bi9vYXV0aC1wcm90ZWN0ZWQtcmVzb3VyY2UkeyR9YH1mdW5jdGlvbiB3VSgkLFosUSxYLEosVyl7bGV0IFk9IkJlYXJlciI7aWYoJClZKz1gIHJlc291cmNlX21ldGFkYXRhPSIkeyR9ImA7aWYoWilZKz1gLCBjbGllbnRfaWQ9IiR7Wn0iYDtpZihRKVkrPWAsIGNsaWVudF9zZWNyZXQ9IiR7UX0iYDtpZihKKVkrPWAsIGRldmljZV9jb2RlX2NsaWVudF9pZD0iJHtKfSJgO2lmKFcpWSs9YCwgZGV2aWNlX2NvZGVfY2xpZW50X3NlY3JldD0iJHtXfSJgO2lmKFgpWSs9JywgdXNlX2lkX3Rva2VuX2FzX2JlYXJlcj0idHJ1ZSInO3JldHVybiBZfWZ1bmN0aW9uIF83KCQpe2xldCBaPSQ/LnZnaUF1dGhSZWFzb24sUT0kIGluc3RhbmNlb2YgRXJyb3I/JC5tZXNzYWdlOiIiO2lmKHR5cGVvZiBaPT09InN0cmluZyImJmNWLmhhcyhaKSlyZXR1cm57cmVhc29uOlosZGV0YWlsOiQgaW5zdGFuY2VvZiBxUT8kLmRldGFpbDpRfTtpZigkIGluc3RhbmNlb2YgRXJyb3ImJiQubmFtZT09PSJQZXJtaXNzaW9uRXJyb3IiKXJldHVybntyZWFzb246Q1ouSW5zdWZmaWNpZW50U2NvcGUsZGV0YWlsOlF9O3JldHVybntyZWFzb246Q1ouVW5hdXRob3JpemVkLGRldGFpbDpRfX1mdW5jdGlvbiBUNygkKXtsZXQgWj1bLi4ubmV3IFNldCgkKV07aWYoWi5sZW5ndGg9PT0wKXJldHVybiIiO3JldHVybmBUaGlzIHNlcnZpY2Ugb25seSBhY2NlcHRzIHJlcXVlc3RzIHRoYXQgYXJyaXZlIHRocm91Z2ggaXRzIGNvbmZpZ3VyZWQgcmV2ZXJzZSBwcm94eSwgd2hpY2ggbXVzdCBzZXQgdGhlICR7Wi5qb2luKCIsICIpfSBoZWFkZXIocykuIEEgcmVqZWN0aW9uIGhlcmUgaXMgYXQgbGVhc3QgYXMgbGlrZWx5IGArInRvIGJlIGEgcHJveHkgbWlzY29uZmlndXJhdGlvbiBhcyBhIGJhZCBjcmVkZW50aWFsIOKAlCBjaGVjayB0aGF0IHRoZSBwcm94eSBpcyBmb3J3YXJkaW5nICIrInRoZW0gYmVmb3JlIHJlLWlzc3VpbmcgY3JlZGVudGlhbHMuIn1mdW5jdGlvbiBnNygkLFosUT0iIil7bGV0IFg9e2Vycm9yOiJ1bmF1dGhvcml6ZWQiLHJlYXNvbjokLGRldGFpbDpafTtpZihRKVgucHJveHlfaGludD1RO3JldHVybiBKU09OLnN0cmluZ2lmeShYKX12YXIgblc9IlZHSS1BdXRoLVJlYXNvbiIsb1c9IlZHSS1BdXRoLVByb3h5LVJlcXVpcmVkIixDWixjVixxUSxxWDt2YXIgUjE9TygoKT0+e0NaPXtNaXNzaW5nQ3JlZGVudGlhbDoibWlzc2luZ19jcmVkZW50aWFsIixJbnZhbGlkQ3JlZGVudGlhbDoiaW52YWxpZF9jcmVkZW50aWFsIixFeHBpcmVkQ3JlZGVudGlhbDoiZXhwaXJlZF9jcmVkZW50aWFsIixJbnN1ZmZpY2llbnRTY29wZToiaW5zdWZmaWNpZW50X3Njb3BlIixQcm94eVJlcXVpcmVkOiJwcm94eV9yZXF1aXJlZCIsVW5hdXRob3JpemVkOiJ1bmF1dGhvcml6ZWQifSxjVj1uZXcgU2V0KE9iamVjdC52YWx1ZXMoQ1opKTtxUT1jbGFzcyBxUSBleHRlbmRzIEVycm9ye3JlYXNvbjtkZXRhaWw7dmdpQXV0aFJlYXNvbjtjb25zdHJ1Y3RvcigkLFo9IiIpe3N1cGVyKFp8fCQpO3RoaXMubmFtZT0iQXV0aEZhaWx1cmUiLHRoaXMucmVhc29uPSQsdGhpcy5kZXRhaWw9Wix0aGlzLnZnaUF1dGhSZWFzb249JH19O3FYPWNsYXNzIHFYIGV4dGVuZHMgRXJyb3J7cmV0cnlBZnRlcjtkZXRhaWw7Y29uc3RydWN0b3IoJD0iIixaPTUpe3N1cGVyKCR8fCJhdXRoZW50aWNhdGlvbiBzZXJ2aWNlIHVuYXZhaWxhYmxlIik7dGhpcy5uYW1lPSJBdXRoVW5hdmFpbGFibGVFcnJvciIsdGhpcy5kZXRhaWw9JCx0aGlzLnJldHJ5QWZ0ZXI9Wn19fSk7ZnVuY3Rpb24gTDUoJCl7bGV0e3ZhbGlkYXRlOlp9PSQ7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKFgpe2xldCBKPVguaGVhZGVycy5nZXQoIkF1dGhvcml6YXRpb24iKT8/IiI7aWYoIUopdGhyb3cgbmV3IHFRKENaLk1pc3NpbmdDcmVkZW50aWFsLCJNaXNzaW5nIEF1dGhvcml6YXRpb24gaGVhZGVyIik7aWYoIUouc3RhcnRzV2l0aCgiQmVhcmVyICIpKXRocm93IG5ldyBxUShDWi5JbnZhbGlkQ3JlZGVudGlhbCwiQXV0aG9yaXphdGlvbiBoZWFkZXIgaXMgbm90IGEgQmVhcmVyIGNyZWRlbnRpYWwiKTtsZXQgVz1KLnNsaWNlKDcpO3JldHVybiBaKFcpfX1mdW5jdGlvbiBsVigkLFope2xldCBRPW5ldyBUZXh0RW5jb2RlcjtyZXR1cm4gdU4oUS5lbmNvZGUoJCksUS5lbmNvZGUoWikpfWZ1bmN0aW9uIHg3KCQpe2xldCBaPSQudG9rZW5zIGluc3RhbmNlb2YgTWFwP1suLi4kLnRva2Vucy5lbnRyaWVzKCldOk9iamVjdC5lbnRyaWVzKCQudG9rZW5zKTtmdW5jdGlvbiBRKFgpe2ZvcihsZXRbSixXXW9mIFopaWYobFYoWCxKKSlyZXR1cm4gVzt0aHJvdyBuZXcgcVEoQ1ouSW52YWxpZENyZWRlbnRpYWwsIlVua25vd24gYmVhcmVyIHRva2VuIil9cmV0dXJuIEw1KHt2YWxpZGF0ZTpRfSl9ZnVuY3Rpb24gZFYoJCl7aWYoJCBpbnN0YW5jZW9mIHFYKXJldHVybiExO2lmKCQgaW5zdGFuY2VvZiBxUSlyZXR1cm4hMDtyZXR1cm4gJCBpbnN0YW5jZW9mIEVycm9yJiYkLmNvbnN0cnVjdG9yPT09RXJyb3ImJiQubmFtZSE9PSJQZXJtaXNzaW9uRXJyb3IifWZ1bmN0aW9uIG5WKCQpe2lmKCQubGVuZ3RoPT09MClyZXR1cm4gQ1ouVW5hdXRob3JpemVkO3JldHVybiAkLmZpbmQoKFEpPT5RIT09Q1ouTWlzc2luZ0NyZWRlbnRpYWwpPz9DWi5NaXNzaW5nQ3JlZGVudGlhbH1mdW5jdGlvbiBFMSguLi4kKXtpZigkLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoImNoYWluQXV0aGVudGljYXRlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhdXRoZW50aWNhdG9yIik7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKFEpe2xldCBYPW51bGwsSj1bXTtmb3IobGV0IFkgb2YgJCl0cnl7cmV0dXJuIGF3YWl0IFkoUSl9Y2F0Y2goRyl7aWYoZFYoRykpe1g9RyxKLnB1c2goRyBpbnN0YW5jZW9mIHFRP0cucmVhc29uOkNaLlVuYXV0aG9yaXplZCk7Y29udGludWV9dGhyb3cgR31sZXQgVz1uZXcgcVEoblYoSiksIk5vIGF1dGhlbnRpY2F0b3IgYWNjZXB0ZWQgdGhlIHJlcXVlc3QiKTtpZihYKVcuY2F1c2U9WDt0aHJvdyBXfX12YXIgdjc9TygoKT0+e1I2KCk7UjEoKX0pO2Z1bmN0aW9uIFNVKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50PT09IkNsb3VkZmxhcmUtV29ya2VycyJ9ZnVuY3Rpb24gQTUoJCl7cmV0dXJuIGdIKCQpfHx4SCgkKXx8dkgoJCl8fHlIKCQpfHxUSCgkKXx8a0goJCl8fElIKCQpfHxiSCgkKXx8bUgoJCl9dmFyIEJVPU8oKCk9PntxWigpfSk7ZnVuY3Rpb24gazYoJCxaLFEpe2xldCBYPSQuZmllbGRzLEo9Wi5maWVsZHM7aWYoWC5sZW5ndGghPT1KLmxlbmd0aCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYFBhcmFtZXRlciBzY2hlbWEgbWlzbWF0Y2ggZm9yIG1ldGhvZCAnJHtRfSc6IGV4cGVjdGVkICR7Si5sZW5ndGh9IGZpZWxkcywgZ290ICR7WC5sZW5ndGh9LmAsIiIpO2ZvcihsZXQgVz0wO1c8Si5sZW5ndGg7VysrKXtsZXQgWT1YW1ddLEc9SltXXTtpZihZLm5hbWUhPT1HLm5hbWUpdGhyb3cgbmV3IGIoIlByb3RvY29sRXJyb3IiLGBQYXJhbWV0ZXIgc2NoZW1hIG1pc21hdGNoIGZvciBtZXRob2QgJyR7UX0nIGF0IGZpZWxkICR7V306IGV4cGVjdGVkIG5hbWUgJyR7Ry5uYW1lfScsIGdvdCAnJHtZLm5hbWV9Jy5gLCIiKTtsZXQgSD1TdHJpbmcoWS50eXBlKSx6PVN0cmluZyhHLnR5cGUpO2lmKEghPT16KXRocm93IG5ldyBiKCJQcm90b2NvbEVycm9yIixgUGFyYW1ldGVyIHNjaGVtYSBtaXNtYXRjaCBmb3IgbWV0aG9kICcke1F9JyBmaWVsZCAnJHtHLm5hbWV9JzogZXhwZWN0ZWQgdHlwZSAke3p9LCBnb3QgJHtIfS5gLCIiKTtpZihZLm51bGxhYmxlIT09Ry5udWxsYWJsZSl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYFBhcmFtZXRlciBzY2hlbWEgbWlzbWF0Y2ggZm9yIG1ldGhvZCAnJHtRfScgZmllbGQgJyR7Ry5uYW1lfSc6IGV4cGVjdGVkIG51bGxhYmxlPSR7Ry5udWxsYWJsZX0sIGdvdCBudWxsYWJsZT0ke1kubnVsbGFibGV9LmAsIiIpfX1mdW5jdGlvbiB5SigkLFope2xldCBRPVoubWV0YWRhdGE/P25ldyBNYXAsWD1RLmdldCh5WCk7aWYoWD09PXZvaWQgMCl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsIk1pc3NpbmcgJ3ZnaV9ycGMubWV0aG9kJyBpbiByZXF1ZXN0IGJhdGNoIGN1c3RvbV9tZXRhZGF0YS4gRWFjaCByZXF1ZXN0IGJhdGNoIG11c3QgY2FycnkgYSAndmdpX3JwYy5tZXRob2QnIGtleSBpbiBpdHMgQXJyb3cgSVBDIGN1c3RvbV9tZXRhZGF0YSB3aXRoIHRoZSBtZXRob2QgbmFtZSBhcyBhIFVURi04IHN0cmluZy4iLCIiKTtsZXQgSj1RLmdldChoWCk7aWYoSj09PXZvaWQgMCl0aHJvdyBuZXcgZ1goYE1pc3NpbmcgJ3ZnaV9ycGMucmVxdWVzdF92ZXJzaW9uJyBpbiByZXF1ZXN0IGJhdGNoIGN1c3RvbV9tZXRhZGF0YS4gU2V0IHRoZSAndmdpX3JwYy5yZXF1ZXN0X3ZlcnNpb24nIGN1c3RvbV9tZXRhZGF0YSB2YWx1ZSB0byAnJHtJUX0nLmApO2lmKEohPT1JUSl0aHJvdyBuZXcgZ1goYFVuc3VwcG9ydGVkIHJlcXVlc3QgdmVyc2lvbiAnJHtKfScsIGV4cGVjdGVkICcke0lRfScuIFNldCB0aGUgJ3ZnaV9ycGMucmVxdWVzdF92ZXJzaW9uJyBjdXN0b21fbWV0YWRhdGEgdmFsdWUgdG8gJyR7SVF9Jy5gKTtsZXQgVz1RLmdldCh3Sik/P251bGwsWT17fTtpZigkLmZpZWxkcy5sZW5ndGg+MCYmWi5udW1Sb3dzIT09MSl0aHJvdyBuZXcgYigiUHJvdG9jb2xFcnJvciIsYEV4cGVjdGVkIDEgcm93IGluIHJlcXVlc3QgYmF0Y2gsIGdvdCAke1oubnVtUm93c30uIEVhY2ggcGFyYW1ldGVyIGlzIGEgY29sdW1uIChub3QgYSByb3cpLiBUaGUgYmF0Y2ggc2hvdWxkIGhhdmUgZXhhY3RseSAxIHJvdy5gLCIiKTtsZXQgRz1hWS5vcGFxdWVQYXNzdGhyb3VnaDtmb3IobGV0IEg9MDtIPCQuZmllbGRzLmxlbmd0aDtIKyspe2xldCB6PSQuZmllbGRzW0hdO2lmKEcmJihoSCh6LnR5cGUpfHxBNSh6LnR5cGUpKSl7bGV0IFA9Wi5nZXRDaGlsZEF0KEgpO1lbei5uYW1lXT1QLmRhdGE/LlswXT8/UC5nZXQoMCk7Y29udGludWV9bGV0IHE9Wi5nZXRDaGlsZEF0KEgpPy5nZXQoMCk7aWYocSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5JiZBNSh6LnR5cGUpKXRyeXtxPUJpZ0ludChxLnRvU3RyaW5nKCkpfWNhdGNoe31pZih0eXBlb2YgcT09PSJiaWdpbnQiJiYhQTUoei50eXBlKSl7aWYocT49b1YmJnE8PXNWKXE9TnVtYmVyKHEpfVlbei5uYW1lXT1xfXJldHVybnttZXRob2ROYW1lOlgscHJvdG9jb2w6US5nZXQoUkopPz8iIixyZXF1ZXN0VmVyc2lvbjpKLHJlcXVlc3RJZDpXLHNjaGVtYTokLHBhcmFtczpZLHJhd01ldGFkYXRhOlF9fWZ1bmN0aW9uIHcxKCQsWil7aWYoIVopcmV0dXJuICQ7Zm9yKGxldCBRIG9mIE9iamVjdC5rZXlzKFopKWlmKCRbUV09PW51bGwpJFtRXT1aW1FdO3JldHVybiAkfXZhciBvVixzVjt2YXIgUzE9TygoKT0+e3FaKCk7SFooKTtCVSgpO29WPUJpZ0ludChOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiksc1Y9QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX0pO2Z1bmN0aW9uIEk2KCQpe3JldHVybiBlWSgkKX12YXIga1U9TygoKT0+e3FaKCl9KTtmdW5jdGlvbiB5NygkKXtyZXR1cm4gJCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEFycmF5QnVmZmVyLmlzVmlldygkKSYmJC5jb25zdHJ1Y3Rvci5uYW1lPT09IlVpbnQ4QXJyYXkiJiYiQllURVNfUEVSX0VMRU1FTlQiaW4gJCYmJC5CWVRFU19QRVJfRUxFTUVOVD09PTF9ZnVuY3Rpb24gTzUoJCxaPSIiKXtpZih0eXBlb2YgJCE9PSJib29sZWFuIil0aHJvdyBUeXBlRXJyb3IoRDUoWikrImV4cGVjdGVkIGJvb2xlYW4sIGdvdCB0eXBlPSIrdHlwZW9mICQpO3JldHVybiAkfWZ1bmN0aW9uIF82KCQsWj0iIil7aWYodHlwZW9mICQhPT0ibnVtYmVyIil0aHJvdyBUeXBlRXJyb3IoRDUoWikrImV4cGVjdGVkIG51bWJlciwgZ290ICIrdHlwZW9mICQpO2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcigkKXx8JDwwKXRocm93IFJhbmdlRXJyb3IoRDUoWikrImV4cGVjdGVkIGludGVnZXIgPj0gMCwgZ290ICIrJCk7cmV0dXJuICR9ZnVuY3Rpb24gYiQoJCxaLFE9IiIpe2lmKHk3KCQpJiYoWj09PXZvaWQgMHx8JC5sZW5ndGg9PT1aKSlyZXR1cm4gJDtpZihaIT09dm9pZCAwKV82KFosImxlbmd0aCIpO2xldCBYPXk3KCQpLEo9WiE9PXZvaWQgMD9gIG9mIGxlbmd0aCAke1p9YDoiIixXPVg/YGxlbmd0aD0keyQubGVuZ3RofWA6YHR5cGU9JHt0eXBlb2YgJH1gLFk9RDUoUSkrImV4cGVjdGVkIFVpbnQ4QXJyYXkiK0orIiwgZ290ICIrVztpZighWCl0aHJvdyBUeXBlRXJyb3IoWSk7dGhyb3cgUmFuZ2VFcnJvcihZKX1mdW5jdGlvbiBoNygkLFo9ITApe2lmKCQuZGVzdHJveWVkKXRocm93IEVycm9yKCJoYXNoIHdhcyBkZXN0cm95ZWQiKTtpZihaJiYkLmZpbmlzaGVkKXRocm93IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKX1mdW5jdGlvbiBfVSgkLFope2IkKCQsdm9pZCAwLCJvdXRwdXQiKTtsZXQgUT1aLm91dHB1dExlbjtpZighKCQubGVuZ3RoPj1RKSl0aHJvdyBSYW5nZUVycm9yKCcib3V0cHV0IiBleHBlY3RlZCBsZW5ndGggPj0gJytRKX1mdW5jdGlvbiBQWCgkKXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KCQuYnVmZmVyLCQuYnl0ZU9mZnNldCxNYXRoLmZsb29yKCQuYnl0ZUxlbmd0aC80KSl9ZnVuY3Rpb24geVEoLi4uJCl7Zm9yKGxldCBaPTA7WjwkLmxlbmd0aDtaKyspJFtaXS5maWxsKDApfWZ1bmN0aW9uIGlWKCQpe3JldHVybiBuZXcgRGF0YVZpZXcoJC5idWZmZXIsJC5ieXRlT2Zmc2V0LCQuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gclYoJCl7cmV0dXJuICQ8PDI0JjQyNzgxOTAwODB8JDw8OCYxNjcxMTY4MHwkPj4+OCY2NTI4MHwkPj4+MjQmMjU1fWZ1bmN0aW9uIGFWKCQpe2ZvcihsZXQgWj0wO1o8JC5sZW5ndGg7WisrKSRbWl09clYoJFtaXSk7cmV0dXJuICR9ZnVuY3Rpb24gVFUoJCxaKXtyZXR1cm4gSVUoJCwiZGVmYXVsdHMiKSxJVShaLCJvcHRzIiksT2JqZWN0LmFzc2lnbigkLFopfWZ1bmN0aW9uIGdVKCQsWil7aWYoJD1iJCgkKSxaPWIkKFopLCQubGVuZ3RoIT09Wi5sZW5ndGgpcmV0dXJuITE7bGV0IFE9MDtmb3IobGV0IFg9MDtYPCQubGVuZ3RoO1grKylRfD0kW1hdXlpbWF07cmV0dXJuIFE9PT0wfWZ1bmN0aW9uIHhVKCQsWixRKXtsZXQgWD1aLEo9UXx8KCgpPT5bXSksVz0oRyxIKT0+WChILC4uLkooRykpLnVwZGF0ZShHKS5kaWdlc3QoKSxZPVgobmV3IFVpbnQ4QXJyYXkoJCksLi4uSihuZXcgVWludDhBcnJheSgwKSkpO3JldHVybiBXLm91dHB1dExlbj1ZLm91dHB1dExlbixXLmJsb2NrTGVuPVkuYmxvY2tMZW4sVy5jcmVhdGU9KEcsLi4uSCk9PlgoRywuLi5IKSxXfWZ1bmN0aW9uIEIxKCQsWixRPSEwKXtpZihaPT09dm9pZCAwKXJldHVybiBuZXcgVWludDhBcnJheSgkKTtpZihiJChaLCQsIm91dHB1dCIpLFEmJiFrMShaKSl0aHJvdyBFcnJvcigiaW52YWxpZCBvdXRwdXQsIG11c3QgYmUgYWxpZ25lZCIpO3JldHVybiBafWZ1bmN0aW9uIHlVKCQsWixRKXtfNigkKSxfNihaKSxPNShRKTtsZXQgWD1uZXcgVWludDhBcnJheSgxNiksSj1pVihYKTtyZXR1cm4gSi5zZXRCaWdVaW50NjQoMCxCaWdJbnQoWiksUSksSi5zZXRCaWdVaW50NjQoOCxCaWdJbnQoJCksUSksWH1mdW5jdGlvbiBrMSgkKXtyZXR1cm4gJC5ieXRlT2Zmc2V0JTQ9PT0wfWZ1bmN0aW9uIHNXKCQpe3JldHVybiBVaW50OEFycmF5LmZyb20oYiQoJCkpfXZhciBENT0oJCk9PiQ/YCIkeyR9IiBgOiIiLElVPSgkLFopPT57aWYoJD09PW51bGx8fHR5cGVvZiAkIT09Im9iamVjdCJ8fEFycmF5LmlzQXJyYXkoJCkpdGhyb3cgVHlwZUVycm9yKFo9PT0ib2JqZWN0Ij8iZXhwZWN0ZWQgdmFsaWQgb3B0aW9ucyBvYmplY3QiOmAiJHtafSIgZXhwZWN0ZWQgb2JqZWN0LCBnb3QgdHlwZT0ke3R5cGVvZiAkfWApfSxZOCxoUSx2VT0oJCxaKT0+e2Z1bmN0aW9uIFEoWCwuLi5KKXtpZihiJChYLHZvaWQgMCwia2V5IiksJC5ub25jZUxlbmd0aCE9PXZvaWQgMCl7bGV0IFA9SlswXTtiJChQLCQudmFyU2l6ZU5vbmNlP3ZvaWQgMDokLm5vbmNlTGVuZ3RoLCJub25jZSIpfWxldCBXPSQudGFnTGVuZ3RoLFk9JC5ub25jZUxlbmd0aCE9PXZvaWQgMD8xOjA7aWYoISQud2l0aEFBRCl7Zm9yKGxldCBQPVk7UDxKLmxlbmd0aDtQKyspaWYoeTcoSltQXSkpdGhyb3cgRXJyb3IoIkFBRCBub3Qgc3VwcG9ydGVkIil9aWYoJC53aXRoQUFEJiZKW1ldIT09dm9pZCAwKWIkKEpbWV0sdm9pZCAwLCJBQUQiKTtsZXQgRz1aKFgsLi4uSiksSD0oUCxVKT0+e2lmKFUhPT12b2lkIDApe2lmKFAhPT0yKXRocm93IEVycm9yKCJjaXBoZXIgb3V0cHV0IG5vdCBzdXBwb3J0ZWQiKTtiJChVLHZvaWQgMCwib3V0cHV0Iil9fSx6PSExO3JldHVybntlbmNyeXB0KFAsVSl7aWYoeil0aHJvdyBFcnJvcigiY2Fubm90IGVuY3J5cHQoKSB0d2ljZSB3aXRoIHNhbWUga2V5ICsgbm9uY2UiKTtyZXR1cm4gej0hMCxiJChQLHZvaWQgMCwiZGF0YSIpLEgoRy5lbmNyeXB0Lmxlbmd0aCxVKSxHLmVuY3J5cHQoUCxVKX0sZGVjcnlwdChQLFUpe2lmKGIkKFAsdm9pZCAwLCJkYXRhIiksVyYmUC5sZW5ndGg8Vyl0aHJvdyBFcnJvcignImNpcGhlcnRleHQiIGV4cGVjdGVkIGxlbmd0aCA+PSB0YWdMZW5ndGg9JytXKTtyZXR1cm4gSChHLmRlY3J5cHQubGVuZ3RoLFUpLEcuZGVjcnlwdChQLFUpfX19cmV0dXJuIE9iamVjdC5hc3NpZ24oUSwkKSxRfTt2YXIgQzU9TygoKT0+ey8qISBub2JsZS1jaXBoZXJzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjMgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovWTg9KCgpPT5uZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF09PT02OCkoKTtoUT1ZOD8oJCk9PiQ6YVZ9KTtmdW5jdGlvbiBsMCgkLFope3JldHVybiAkPDxafCQ+Pj4zMi1afWZ1bmN0aW9uIFpSKCQsWixRLFgsSixXLFksRyl7bGV0IEg9Si5sZW5ndGgsej1uZXcgVWludDhBcnJheShJMSkscT1QWCh6KSxQPVk4JiZrMShKKSYmazEoVyksVT1QP1BYKEopOmhVLE09UD9QWChXKTpoVTtpZighWTgpe2ZvcihsZXQgTD0wO0w8SDtZKyspe2lmKCQoWixRLFgscSxZLEcpLGhRKHEpLFk+PWI3KXRocm93IEVycm9yKCJhcng6IGNvdW50ZXIgb3ZlcmZsb3ciKTtsZXQgRD1NYXRoLm1pbihJMSxILUwpO2ZvcihsZXQgUj0wLFY7UjxEO1IrKylWPUwrUixXW1ZdPUpbVl1eeltSXTtMKz1EfXJldHVybn1mb3IobGV0IEw9MDtMPEg7WSsrKXtpZigkKFosUSxYLHEsWSxHKSxZPj1iNyl0aHJvdyBFcnJvcigiYXJ4OiBjb3VudGVyIG92ZXJmbG93Iik7bGV0IEQ9TWF0aC5taW4oSTEsSC1MKTtpZihQJiZEPT09STEpe2xldCBSPUwvNDtpZihMJTQhPT0wKXRocm93IEVycm9yKCJhcng6IGludmFsaWQgYmxvY2sgcG9zaXRpb24iKTtmb3IobGV0IFY9MCxnO1Y8JFI7VisrKWc9UitWLE1bZ109VVtnXV5xW1ZdO0wrPUkxO2NvbnRpbnVlfWZvcihsZXQgUj0wLFY7UjxEO1IrKylWPUwrUixXW1ZdPUpbVl1eeltSXTtMKz1EfX1mdW5jdGlvbiBtVSgkLFope2xldHthbGxvd1Nob3J0S2V5czpRLGV4dGVuZE5vbmNlRm46WCxjb3VudGVyTGVuZ3RoOkosY291bnRlclJpZ2h0Olcscm91bmRzOll9PVRVKHthbGxvd1Nob3J0S2V5czohMSxjb3VudGVyTGVuZ3RoOjgsY291bnRlclJpZ2h0OiExLHJvdW5kczoyMH0sWik7aWYodHlwZW9mICQhPT0iZnVuY3Rpb24iKXRocm93IEVycm9yKCJjb3JlIG11c3QgYmUgYSBmdW5jdGlvbiIpO3JldHVybiBfNihKKSxfNihZKSxPNShXKSxPNShRKSwoRyxILHoscSxQPTApPT57YiQoRyx2b2lkIDAsImtleSIpLGIkKEgsdm9pZCAwLCJub25jZSIpLGIkKHosdm9pZCAwLCJkYXRhIik7bGV0IFU9ei5sZW5ndGg7aWYocT1CMShVLHEsITEpLF82KFApLFA8MHx8UD49YjcpdGhyb3cgRXJyb3IoImFyeDogY291bnRlciBvdmVyZmxvdyIpO2xldCBNPVtdLEw9Ry5sZW5ndGgsRCxSO2lmKEw9PT0zMilNLnB1c2goRD1zVyhHKSksUj1lVjtlbHNlIGlmKEw9PT0xNiYmUSlEPW5ldyBVaW50OEFycmF5KDMyKSxELnNldChHKSxELnNldChHLDE2KSxSPXRWLE0ucHVzaChEKTtlbHNlIHRocm93IGIkKEcsMzIsImFyeCBrZXkiKSxFcnJvcigiaW52YWxpZCBrZXkgc2l6ZSIpO2lmKCFZOHx8IWsxKEgpKU0ucHVzaChIPXNXKEgpKTtsZXQgVj1QWChEKTtpZihYKXtpZihILmxlbmd0aCE9PTI0KXRocm93IEVycm9yKCJhcng6IGV4dGVuZGVkIG5vbmNlIG11c3QgYmUgMjQgYnl0ZXMiKTtsZXQgVD1ILnN1YmFycmF5KDAsMTYpO2lmKFk4KVgoUixWLFBYKFQpLFYpO2Vsc2V7bGV0IEU9aFEoVWludDMyQXJyYXkuZnJvbShSKSk7WChFLFYsUFgoVCksVikseVEoRSksaFEoVil9SD1ILnN1YmFycmF5KDE2KX1lbHNlIGlmKCFZOCloUShWKTtsZXQgZz0xNi1KO2lmKGchPT1ILmxlbmd0aCl0aHJvdyBFcnJvcihgYXJ4OiBub25jZSBtdXN0IGJlICR7Z30gb3IgMTYgYnl0ZXNgKTtpZihnIT09MTIpe2xldCBUPW5ldyBVaW50OEFycmF5KDEyKTtULnNldChILFc/MDoxMi1ILmxlbmd0aCksSD1ULE0ucHVzaChIKX1sZXQgdz1oUShQWChIKSk7dHJ5e3JldHVybiBaUigkLFIsVix3LHoscSxQLFkpLHF9ZmluYWxseXt5USguLi5NKX19fXZhciBiVT0oJCk9PlVpbnQ4QXJyYXkuZnJvbSgkLnNwbGl0KCIiKSwoWik9PlouY2hhckNvZGVBdCgwKSksdFYsZVYsSTE9NjQsJFI9MTYsYjcsaFU7dmFyIGZVPU8oKCk9PntDNSgpO3RWPSgoKT0+aFEoUFgoYlUoImV4cGFuZCAxNi1ieXRlIGsiKSkpKSgpLGVWPSgoKT0+aFEoUFgoYlUoImV4cGFuZCAzMi1ieXRlIGsiKSkpKSgpO2I3PSgoKT0+NDI5NDk2NzI5NSkoKSxoVT1VaW50MzJBcnJheS5vZigpfSk7ZnVuY3Rpb24galooJCxaKXtyZXR1cm4gJFtaKytdJjI1NXwoJFtaKytdJjI1NSk8PDh9Y2xhc3MgdVV7YmxvY2tMZW49MTY7b3V0cHV0TGVuPTE2O2J1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7cj1uZXcgVWludDE2QXJyYXkoMTApO2g9bmV3IFVpbnQxNkFycmF5KDEwKTtwYWQ9bmV3IFVpbnQxNkFycmF5KDgpO3Bvcz0wO2ZpbmlzaGVkPSExO2Rlc3Ryb3llZD0hMTtjb25zdHJ1Y3RvcigkKXskPXNXKGIkKCQsMzIsImtleSIpKTtsZXQgWj1qWigkLDApLFE9alooJCwyKSxYPWpaKCQsNCksSj1qWigkLDYpLFc9alooJCw4KSxZPWpaKCQsMTApLEc9alooJCwxMiksSD1qWigkLDE0KTt0aGlzLnJbMF09WiY4MTkxLHRoaXMuclsxXT0oWj4+PjEzfFE8PDMpJjgxOTEsdGhpcy5yWzJdPShRPj4+MTB8WDw8NikmNzkzOSx0aGlzLnJbM109KFg+Pj43fEo8PDkpJjgxOTEsdGhpcy5yWzRdPShKPj4+NHxXPDwxMikmMjU1LHRoaXMucls1XT1XPj4+MSY4MTkwLHRoaXMucls2XT0oVz4+PjE0fFk8PDIpJjgxOTEsdGhpcy5yWzddPShZPj4+MTF8Rzw8NSkmODA2NSx0aGlzLnJbOF09KEc+Pj44fEg8PDgpJjgxOTEsdGhpcy5yWzldPUg+Pj41JjEyNztmb3IobGV0IHo9MDt6PDg7eisrKXRoaXMucGFkW3pdPWpaKCQsMTYrMip6KX1wcm9jZXNzKCQsWixRPSExKXtsZXQgWD1RPzA6MjA0OCx7aDpKLHI6V309dGhpcyxZPVdbMF0sRz1XWzFdLEg9V1syXSx6PVdbM10scT1XWzRdLFA9V1s1XSxVPVdbNl0sTT1XWzddLEw9V1s4XSxEPVdbOV0sUj1qWigkLForMCksVj1qWigkLForMiksZz1qWigkLForNCksdz1qWigkLForNiksVD1qWigkLForOCksRT1qWigkLForMTApLF89alooJCxaKzEyKSx5PWpaKCQsWisxNCksaD1KWzBdKyhSJjgxOTEpLHM9SlsxXSsoKFI+Pj4xM3xWPDwzKSY4MTkxKSxmPUpbMl0rKChWPj4+MTB8Zzw8NikmODE5MSksYz1KWzNdKygoZz4+Pjd8dzw8OSkmODE5MSksbz1KWzRdKygodz4+PjR8VDw8MTIpJjgxOTEpLGU9Sls1XSsoVD4+PjEmODE5MSksbT1KWzZdKygoVD4+PjE0fEU8PDIpJjgxOTEpLHU9Sls3XSsoKEU+Pj4xMXxfPDw1KSY4MTkxKSxGMD1KWzhdKygoXz4+Pjh8eTw8OCkmODE5MSksQjA9Sls5XSsoeT4+PjV8WCkscD0wLHgwPXAraCpZK3MqKDUqRCkrZiooNSpMKStjKig1Kk0pK28qKDUqVSk7cD14MD4+PjEzLHgwJj04MTkxLHgwKz1lKig1KlApK20qKDUqcSkrdSooNSp6KStGMCooNSpIKStCMCooNSpHKSxwKz14MD4+PjEzLHgwJj04MTkxO2xldCBkMD1wK2gqRytzKlkrZiooNSpEKStjKig1KkwpK28qKDUqTSk7cD1kMD4+PjEzLGQwJj04MTkxLGQwKz1lKig1KlUpK20qKDUqUCkrdSooNSpxKStGMCooNSp6KStCMCooNSpIKSxwKz1kMD4+PjEzLGQwJj04MTkxO2xldCBuMD1wK2gqSCtzKkcrZipZK2MqKDUqRCkrbyooNSpMKTtwPW4wPj4+MTMsbjAmPTgxOTEsbjArPWUqKDUqTSkrbSooNSpVKSt1Kig1KlApK0YwKig1KnEpK0IwKig1KnopLHArPW4wPj4+MTMsbjAmPTgxOTE7bGV0IFM9cCtoKnorcypIK2YqRytjKlkrbyooNSpEKTtwPVM+Pj4xMyxTJj04MTkxLFMrPWUqKDUqTCkrbSooNSpNKSt1Kig1KlUpK0YwKig1KlApK0IwKig1KnEpLHArPVM+Pj4xMyxTJj04MTkxO2xldCBkPXAraCpxK3MqeitmKkgrYypHK28qWTtwPWQ+Pj4xMyxkJj04MTkxLGQrPWUqKDUqRCkrbSooNSpMKSt1Kig1Kk0pK0YwKig1KlUpK0IwKig1KlApLHArPWQ+Pj4xMyxkJj04MTkxO2xldCBrMD1wK2gqUCtzKnErZip6K2MqSCtvKkc7cD1rMD4+PjEzLGswJj04MTkxLGswKz1lKlkrbSooNSpEKSt1Kig1KkwpK0YwKig1Kk0pK0IwKig1KlUpLHArPWswPj4+MTMsazAmPTgxOTE7bGV0IFgwPXAraCpVK3MqUCtmKnErYyp6K28qSDtwPVgwPj4+MTMsWDAmPTgxOTEsWDArPWUqRyttKlkrdSooNSpEKStGMCooNSpMKStCMCooNSpNKSxwKz1YMD4+PjEzLFgwJj04MTkxO2xldCBoMD1wK2gqTStzKlUrZipQK2MqcStvKno7cD1oMD4+PjEzLGgwJj04MTkxLGgwKz1lKkgrbSpHK3UqWStGMCooNSpEKStCMCooNSpMKSxwKz1oMD4+PjEzLGgwJj04MTkxO2xldCBJMD1wK2gqTCtzKk0rZipVK2MqUCtvKnE7cD1JMD4+PjEzLEkwJj04MTkxLEkwKz1lKnorbSpIK3UqRytGMCpZK0IwKig1KkQpLHArPUkwPj4+MTMsSTAmPTgxOTE7bGV0IHYwPXAraCpEK3MqTCtmKk0rYypVK28qUDtwPXYwPj4+MTMsdjAmPTgxOTEsdjArPWUqcSttKnordSpIK0YwKkcrQjAqWSxwKz12MD4+PjEzLHYwJj04MTkxLHA9KHA8PDIpK3B8MCxwPXAreDB8MCx4MD1wJjgxOTEscD1wPj4+MTMsZDArPXAsSlswXT14MCxKWzFdPWQwLEpbMl09bjAsSlszXT1TLEpbNF09ZCxKWzVdPWswLEpbNl09WDAsSls3XT1oMCxKWzhdPUkwLEpbOV09djB9ZmluYWxpemUoKXtsZXR7aDokLHBhZDpafT10aGlzLFE9bmV3IFVpbnQxNkFycmF5KDEwKSxYPSRbMV0+Pj4xMzskWzFdJj04MTkxO2ZvcihsZXQgWT0yO1k8MTA7WSsrKSRbWV0rPVgsWD0kW1ldPj4+MTMsJFtZXSY9ODE5MTskWzBdKz1YKjUsWD0kWzBdPj4+MTMsJFswXSY9ODE5MSwkWzFdKz1YLFg9JFsxXT4+PjEzLCRbMV0mPTgxOTEsJFsyXSs9WCxRWzBdPSRbMF0rNSxYPVFbMF0+Pj4xMyxRWzBdJj04MTkxO2ZvcihsZXQgWT0xO1k8MTA7WSsrKVFbWV09JFtZXStYLFg9UVtZXT4+PjEzLFFbWV0mPTgxOTE7UVs5XS09ODE5MjtsZXQgSj0oWF4xKS0xO2ZvcihsZXQgWT0wO1k8MTA7WSsrKVFbWV0mPUo7Sj1+Sjtmb3IobGV0IFk9MDtZPDEwO1krKykkW1ldPSRbWV0mSnxRW1ldOyRbMF09KCRbMF18JFsxXTw8MTMpJjY1NTM1LCRbMV09KCRbMV0+Pj4zfCRbMl08PDEwKSY2NTUzNSwkWzJdPSgkWzJdPj4+NnwkWzNdPDw3KSY2NTUzNSwkWzNdPSgkWzNdPj4+OXwkWzRdPDw0KSY2NTUzNSwkWzRdPSgkWzRdPj4+MTJ8JFs1XTw8MXwkWzZdPDwxNCkmNjU1MzUsJFs1XT0oJFs2XT4+PjJ8JFs3XTw8MTEpJjY1NTM1LCRbNl09KCRbN10+Pj41fCRbOF08PDgpJjY1NTM1LCRbN109KCRbOF0+Pj44fCRbOV08PDUpJjY1NTM1O2xldCBXPSRbMF0rWlswXTskWzBdPVcmNjU1MzU7Zm9yKGxldCBZPTE7WTw4O1krKylXPSgkW1ldK1pbWV18MCkrKFc+Pj4xNil8MCwkW1ldPVcmNjU1MzU7eVEoUSl9dXBkYXRlKCQpe2g3KHRoaXMpLGIkKCQpLCQ9c1coJCk7bGV0e2J1ZmZlcjpaLGJsb2NrTGVuOlF9PXRoaXMsWD0kLmxlbmd0aDtmb3IobGV0IEo9MDtKPFg7KXtsZXQgVz1NYXRoLm1pbihRLXRoaXMucG9zLFgtSik7aWYoVz09PVEpe2Zvcig7UTw9WC1KO0orPVEpdGhpcy5wcm9jZXNzKCQsSik7Y29udGludWV9aWYoWi5zZXQoJC5zdWJhcnJheShKLEorVyksdGhpcy5wb3MpLHRoaXMucG9zKz1XLEorPVcsdGhpcy5wb3M9PT1RKXRoaXMucHJvY2VzcyhaLDAsITEpLHRoaXMucG9zPTB9cmV0dXJuIHRoaXN9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHlRKHRoaXMuaCx0aGlzLnIsdGhpcy5idWZmZXIsdGhpcy5wYWQpfWRpZ2VzdEludG8oJCl7aDcodGhpcyksX1UoJCx0aGlzKSx0aGlzLmZpbmlzaGVkPSEwO2xldHtidWZmZXI6WixoOlF9PXRoaXMse3BvczpYfT10aGlzO2lmKFgpe1pbWCsrXT0xO2Zvcig7WDwxNjtYKyspWltYXT0wO3RoaXMucHJvY2VzcyhaLDAsITApfXRoaXMuZmluYWxpemUoKTtsZXQgSj0wO2ZvcihsZXQgVz0wO1c8ODtXKyspJFtKKytdPVFbV10+Pj4wLCRbSisrXT1RW1ddPj4+OH1kaWdlc3QoKXtsZXR7YnVmZmVyOiQsb3V0cHV0TGVuOlp9PXRoaXM7dGhpcy5kaWdlc3RJbnRvKCQpO2xldCBRPSQuc2xpY2UoMCxaKTtyZXR1cm4gdGhpcy5kZXN0cm95KCksUX19dmFyIHBVO3ZhciBjVT1PKCgpPT57QzUoKTtwVT14VSgzMiwoJCk9Pm5ldyB1VSgkKSl9KTtmdW5jdGlvbiBuVSgkLFosUSxYLEosVz0yMCl7bGV0IFk9JFswXSxHPSRbMV0sSD0kWzJdLHo9JFszXSxxPVpbMF0sUD1aWzFdLFU9WlsyXSxNPVpbM10sTD1aWzRdLEQ9Wls1XSxSPVpbNl0sVj1aWzddLGc9Six3PVFbMF0sVD1RWzFdLEU9UVsyXSxfPVkseT1HLGg9SCxzPXosZj1xLGM9UCxvPVUsZT1NLG09TCx1PUQsRjA9UixCMD1WLHA9Zyx4MD13LGQwPVQsbjA9RTtmb3IobGV0IGQ9MDtkPFc7ZCs9MilfPV8rZnwwLHA9bDAocF5fLDE2KSxtPW0rcHwwLGY9bDAoZl5tLDEyKSxfPV8rZnwwLHA9bDAocF5fLDgpLG09bStwfDAsZj1sMChmXm0sNykseT15K2N8MCx4MD1sMCh4MF55LDE2KSx1PXUreDB8MCxjPWwwKGNedSwxMikseT15K2N8MCx4MD1sMCh4MF55LDgpLHU9dSt4MHwwLGM9bDAoY151LDcpLGg9aCtvfDAsZDA9bDAoZDBeaCwxNiksRjA9RjArZDB8MCxvPWwwKG9eRjAsMTIpLGg9aCtvfDAsZDA9bDAoZDBeaCw4KSxGMD1GMCtkMHwwLG89bDAob15GMCw3KSxzPXMrZXwwLG4wPWwwKG4wXnMsMTYpLEIwPUIwK24wfDAsZT1sMChlXkIwLDEyKSxzPXMrZXwwLG4wPWwwKG4wXnMsOCksQjA9QjArbjB8MCxlPWwwKGVeQjAsNyksXz1fK2N8MCxuMD1sMChuMF5fLDE2KSxGMD1GMCtuMHwwLGM9bDAoY15GMCwxMiksXz1fK2N8MCxuMD1sMChuMF5fLDgpLEYwPUYwK24wfDAsYz1sMChjXkYwLDcpLHk9eStvfDAscD1sMChwXnksMTYpLEIwPUIwK3B8MCxvPWwwKG9eQjAsMTIpLHk9eStvfDAscD1sMChwXnksOCksQjA9QjArcHwwLG89bDAob15CMCw3KSxoPWgrZXwwLHgwPWwwKHgwXmgsMTYpLG09bSt4MHwwLGU9bDAoZV5tLDEyKSxoPWgrZXwwLHgwPWwwKHgwXmgsOCksbT1tK3gwfDAsZT1sMChlXm0sNykscz1zK2Z8MCxkMD1sMChkMF5zLDE2KSx1PXUrZDB8MCxmPWwwKGZedSwxMikscz1zK2Z8MCxkMD1sMChkMF5zLDgpLHU9dStkMHwwLGY9bDAoZl51LDcpO2xldCBTPTA7WFtTKytdPVkrX3wwLFhbUysrXT1HK3l8MCxYW1MrK109SCtofDAsWFtTKytdPXorc3wwLFhbUysrXT1xK2Z8MCxYW1MrK109UCtjfDAsWFtTKytdPVUrb3wwLFhbUysrXT1NK2V8MCxYW1MrK109TCttfDAsWFtTKytdPUQrdXwwLFhbUysrXT1SK0YwfDAsWFtTKytdPVYrQjB8MCxYW1MrK109ZytwfDAsWFtTKytdPXcreDB8MCxYW1MrK109VCtkMHwwLFhbUysrXT1FK24wfDB9ZnVuY3Rpb24gUVIoJCxaLFEsWCl7bGV0IEo9WTg/JDpoUSgkLnNsaWNlKDAsNCkpLFc9WTg/WjpoUShaLnNsaWNlKDAsOCkpLFk9WTg/UTpoUShRLnNsaWNlKDAsNCkpLEc9bmV3IFVpbnQzMkFycmF5KDE2KTtuVShKLFcsWS5zdWJhcnJheSgxKSxHLFlbMF0pO2xldCBIPTA7aWYoWFtIKytdPUdbMF0tSlswXXwwLFhbSCsrXT1HWzFdLUpbMV18MCxYW0grK109R1syXS1KWzJdfDAsWFtIKytdPUdbM10tSlszXXwwLFhbSCsrXT1HWzEyXS1ZWzBdfDAsWFtIKytdPUdbMTNdLVlbMV18MCxYW0grK109R1sxNF0tWVsyXXwwLFhbSCsrXT1HWzE1XS1ZWzNdfDAsaFEoWCksIVk4KXlRKEosVyxZKTt5UShHKX1mdW5jdGlvbiBkVSgkLFosUSxYLEope2lmKEohPT12b2lkIDApYiQoSix2b2lkIDAsIkFBRCIpO2xldCBXPSQoWixRLFdSKSxZPXlVKFgubGVuZ3RoLEo/Si5sZW5ndGg6MCwhMCksRz1wVS5jcmVhdGUoVyk7aWYoSilsVShHLEopO2xVKEcsWCksRy51cGRhdGUoWSk7bGV0IEg9Ry5kaWdlc3QoKTtyZXR1cm4geVEoVyxZKSxIfXZhciBYUixKUixsVT0oJCxaKT0+eyQudXBkYXRlKFopO2xldCBRPVoubGVuZ3RoJTE2O2lmKFEpJC51cGRhdGUoSlIuc3ViYXJyYXkoUSkpfSxXUixZUj0oJCk9PihaLFEsWCk9PntyZXR1cm57ZW5jcnlwdChXLFkpe2xldCBHPVcubGVuZ3RoO1k9QjEoRysxNixZLCExKSxZLnNldChXKTtsZXQgSD1ZLnN1YmFycmF5KDAsLTE2KTskKFosUSxILEgsMSk7bGV0IHo9ZFUoJCxaLFEsSCxYKTtyZXR1cm4gWS5zZXQoeixHKSx5USh6KSxZfSxkZWNyeXB0KFcsWSl7WT1CMShXLmxlbmd0aC0xNixZLCExKTtsZXQgRz1XLnN1YmFycmF5KDAsLTE2KSxIPVcuc3ViYXJyYXkoLTE2KSx6PWRVKCQsWixRLEcsWCk7aWYoIWdVKEgseikpdGhyb3cgeVEoeiksRXJyb3IoImludmFsaWQgdGFnIik7cmV0dXJuIFkuc2V0KFcuc3ViYXJyYXkoMCwtMTYpKSwkKFosUSxZLFksMSkseVEoeiksWX19fSxtNzt2YXIgb1U9TygoKT0+e2ZVKCk7Y1UoKTtDNSgpO1hSPW1VKG5VLHtjb3VudGVyUmlnaHQ6ITEsY291bnRlckxlbmd0aDo4LGV4dGVuZE5vbmNlRm46UVIsYWxsb3dTaG9ydEtleXM6ITF9KSxKUj1uZXcgVWludDhBcnJheSgxNiksV1I9bmV3IFVpbnQ4QXJyYXkoMzIpO203PXZVKHtibG9ja1NpemU6NjQsbm9uY2VMZW5ndGg6MjQsdGFnTGVuZ3RoOjE2LHdpdGhBQUQ6ITB9LFlSKFhSKSl9KTtmdW5jdGlvbiBfMSgkLFosUSl7aWYoWi5sZW5ndGghPT0zMil0aHJvdyBFcnJvcigiQUVBRCBrZXkgbXVzdCBiZSAzMiBieXRlcyDigJQgY2FsbCBub3JtYWxpemVLZXkoKSBmaXJzdCIpO2xldCBYPVEudmVyc2lvbj8/MTtpZihYPDF8fFg+MjU1KXRocm93IEVycm9yKGBBRUFEIGVudmVsb3BlIHZlcnNpb24gbXVzdCBmaXQgaW4gb25lIGJ5dGU7IGdvdCAke1h9YCk7bGV0IEo9aFcoaVcpLFc9bTcoWixKLFEuYWFkKS5lbmNyeXB0KCQpLFk9bmV3IFVpbnQ4QXJyYXkoVDYraVcrVy5sZW5ndGgpO3JldHVybiBZWzBdPVgsWS5zZXQoSixUNiksWS5zZXQoVyxUNitpVyksWX1mdW5jdGlvbiBUMSgkLFosUSl7aWYoWi5sZW5ndGghPT0zMil0aHJvdyBFcnJvcigiQUVBRCBrZXkgbXVzdCBiZSAzMiBieXRlcyDigJQgY2FsbCBub3JtYWxpemVLZXkoKSBmaXJzdCIpO2lmKCQubGVuZ3RoPEtSKXRocm93IG5ldyBuWCgiZW52ZWxvcGUgdHJ1bmNhdGVkIik7bGV0IFg9US52ZXJzaW9uPz8xO2lmKCRbMF0hPT1YKXRocm93IG5ldyBuWChgdW5zdXBwb3J0ZWQgZW52ZWxvcGUgdmVyc2lvbjogJHskWzBdfWApO2xldCBKPSQuc3ViYXJyYXkoVDYsVDYraVcpLFc9JC5zdWJhcnJheShUNitpVyk7dHJ5e3JldHVybiBtNyhaLEosUS5hYWQpLmRlY3J5cHQoVyl9Y2F0Y2h7dGhyb3cgbmV3IG5YKCJlbnZlbG9wZSB2ZXJpZmljYXRpb24gZmFpbGVkIil9fXZhciBpVz0yNCxHUj0xNixUNj0xLEtSLG5YO3ZhciBmNz1PKCgpPT57b1UoKTtSNigpO0tSPVQ2K2lXK0dSO25YPWNsYXNzIG5YIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJTZWFsRXJyb3IifX19KTtmdW5jdGlvbiBnMSgkKXtyZXR1cm4gJC5ldmlkZW5jZUJpbmRpbmc/clUoelIsJCwkLmV2aWRlbmNlQmluZGluZyk6YVUoSFIsJCl9ZnVuY3Rpb24gc1UoJCl7cmV0dXJuICQuZXZpZGVuY2VCaW5kaW5nP3JVKFBSLCQsJC5ldmlkZW5jZUJpbmRpbmcpOmFVKHFSLCQpfWZ1bmN0aW9uIGlVKCQpe3JldHVybiB4OC5lbmNvZGUoYFx4MDAkeyR9YCl9ZnVuY3Rpb24gclUoJCxaLFEpe2xldCBYPXg4LmVuY29kZShRKSxKPWlVKFoucHJvdG9jb2wpO2lmKFoucHJpbmNpcGFsPT09bnVsbHx8Wi5wcmluY2lwYWw9PT12b2lkIDApcmV0dXJuIFI1KCQseDguZW5jb2RlKCJceDAwYW5vbnltb3VzXHgwMCIpLFgsSik7cmV0dXJuIFI1KCQsbmV3IFVpbnQ4QXJyYXkoWzFdKSx4OC5lbmNvZGUoWi5kb21haW4/PyIiKSxuZXcgVWludDhBcnJheShbMF0pLHg4LmVuY29kZShaLnByaW5jaXBhbCksbmV3IFVpbnQ4QXJyYXkoWzBdKSxYLEopfWZ1bmN0aW9uIGFVKCQsWil7bGV0IFE9aVUoWi5wcm90b2NvbCk7aWYoIVoucHJpbmNpcGFsKXJldHVybiBSNSgkLHg4LmVuY29kZSgiXHgwMGFub255bW91cyIpLFEpO2xldCBYPXg4LmVuY29kZShaLnByaW5jaXBhbCksSj1uZXcgVWludDhBcnJheSgxK1gubGVuZ3RoKTtyZXR1cm4gSlswXT0xLEouc2V0KFgsMSksUjUoJCxKLFEpfWZ1bmN0aW9uIHRVKCQpe2xldCBaPSIiO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7USs9MzI3NjgpWis9U3RyaW5nLmZyb21DaGFyQ29kZSguLi4kLnN1YmFycmF5KFEsUSszMjc2OCkpO3JldHVybiBidG9hKFopfWZ1bmN0aW9uIGVVKCQpe2xldCBaPWF0b2IoJCksUT1uZXcgVWludDhBcnJheShaLmxlbmd0aCk7Zm9yKGxldCBYPTA7WDxaLmxlbmd0aDtYKyspUVtYXT1aLmNoYXJDb2RlQXQoWCk7cmV0dXJuIFF9ZnVuY3Rpb24gYzcoJCxaLFEpeyQuc2V0VWludDMyKFosUSwhMCl9ZnVuY3Rpb24gajUoJCxaLFEpeyQuc2V0QmlnVWludDY0KFosUSwhMCl9ZnVuY3Rpb24gbDcoJCxaKXtyZXR1cm4gJC5nZXRVaW50MzIoWiwhMCl9ZnVuY3Rpb24gVjUoJCxaKXtyZXR1cm4gJC5nZXRCaWdVaW50NjQoWiwhMCl9ZnVuY3Rpb24gUjUoLi4uJCl7bGV0IFo9MDtmb3IobGV0IEogb2YgJClaKz1KLmxlbmd0aDtsZXQgUT1uZXcgVWludDhBcnJheShaKSxYPTA7Zm9yKGxldCBKIG9mICQpUS5zZXQoSixYKSxYKz1KLmxlbmd0aDtyZXR1cm4gUX1mdW5jdGlvbiBFNSgkLFosUSxYLEope2lmKFEubGVuZ3RoIT09MzIpdGhyb3cgRXJyb3IoIlhDaGFDaGEyMC1Qb2x5MTMwNSB0b2tlbiBrZXkgbXVzdCBiZSAzMiBieXRlcyIpO2xldCBXPUo/P01hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKSxZPW5ldyBVaW50OEFycmF5KDgrRzgrNCskLmxlbmd0aCksRz1uZXcgRGF0YVZpZXcoWS5idWZmZXIpLEg9MDtqNShHLEgsQmlnSW50KFcpKSxIKz04LFkuc2V0KFosSCksSCs9RzgsYzcoRyxILCQubGVuZ3RoKSxIKz00LFkuc2V0KCQsSCk7bGV0IHo9XzEoWSxRLHthYWQ6ZzEoWCksdmVyc2lvbjp1N30pO3JldHVybiB0VSh6KX1mdW5jdGlvbiBkNygkLFosUSxYLEosVyxZKXtpZihYLmxlbmd0aCE9PTMyKXRocm93IEVycm9yKCJYQ2hhQ2hhMjAtUG9seTEzMDUgdG9rZW4ga2V5IG11c3QgYmUgMzIgYnl0ZXMiKTtsZXQgRz1XPz9NYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCksSD1uZXcgVWludDhBcnJheSg4K0c4KzQrWi5sZW5ndGgrNCtRLmxlbmd0aCsxNiksej1uZXcgRGF0YVZpZXcoSC5idWZmZXIpLHE9MDtqNSh6LHEsQmlnSW50KEcpKSxxKz04LEguc2V0KCQscSkscSs9RzgsYzcoeixxLFoubGVuZ3RoKSxxKz00LEguc2V0KFoscSkscSs9Wi5sZW5ndGgsYzcoeixxLFEubGVuZ3RoKSxxKz00LEguc2V0KFEscSkscSs9US5sZW5ndGgsajUoeixxLEJpZ0ludChZPy5yZXNwb25zZUxpbWl0Qnl0ZXM/PzApKSxxKz04LGo1KHoscSxCaWdJbnQoWT8ucHJlZmVycmVkUmVzcG9uc2VCeXRlcz8/MCkpO2xldCBQPV8xKEgsWCx7YWFkOnNVKEopLHZlcnNpb246cDd9KTtyZXR1cm4gdFUoUCl9ZnVuY3Rpb24geDEoJCxaLFEsWCl7bGV0IEo7dHJ5e0o9ZVUoJCl9Y2F0Y2h7dGhyb3cgRXJyb3IoIk1hbGZvcm1lZCBzdGF0ZSB0b2tlbiIpfWlmKEoubGVuZ3RoPj0xJiZKWzBdIT09dTcpdGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIHN0YXRlIHRva2VuIHZlcnNpb246ICR7SlswXX1gKTtsZXQgVzt0cnl7Vz1UMShKLFose2FhZDpnMShYKSx2ZXJzaW9uOnU3fSl9Y2F0Y2goTSl7aWYoTSBpbnN0YW5jZW9mIG5YKXRocm93IEVycm9yKCJTdGF0ZSB0b2tlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCIpO3Rocm93IE19aWYoVy5sZW5ndGg8OCtHOCl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gdHJ1bmNhdGVkIik7bGV0IFk9bmV3IERhdGFWaWV3KFcuYnVmZmVyLFcuYnl0ZU9mZnNldCxXLmJ5dGVMZW5ndGgpLEc9MCxIPShNLEwpPT57bGV0IEQ9bmV3IFVpbnQ4QXJyYXkoTCk7cmV0dXJuIEQuc2V0KFcuc3ViYXJyYXkoTSxNK0wpKSxEfSx6PU51bWJlcihWNShZLEcpKTtpZihHKz04LFE+MCl7aWYoTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApLXo+USl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gZXhwaXJlZCIpfWxldCBxPUgoRyxHOCk7Rys9Rzg7bGV0IFA9bDcoWSxHKTtpZihHKz00LEcrUD5XLmxlbmd0aCl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gdHJ1bmNhdGVkIChzdGF0ZSkiKTtyZXR1cm57c3RhdGVCeXRlczpIKEcsUCksY2FsbElkOnEsY3JlYXRlZEF0Onp9fWZ1bmN0aW9uICRNKCQsWixRLFg9MCl7bGV0IEo9ZVUoJCk7aWYoSi5sZW5ndGg+PTEmJkpbMF0hPT1wNyl0aHJvdyBFcnJvcihgVW5zdXBwb3J0ZWQgY2FsbCB0b2tlbiB2ZXJzaW9uICR7SlswXX1gKTtsZXQgVzt0cnl7Vz1UMShKLFose2FhZDpzVShRKSx2ZXJzaW9uOnA3fSl9Y2F0Y2godyl7aWYodyBpbnN0YW5jZW9mIG5YKXRocm93IEVycm9yKCJTdGF0ZSB0b2tlbiBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCIpO3Rocm93IHd9aWYoVy5sZW5ndGg8OCtHOCl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gdHJ1bmNhdGVkIik7bGV0IFk9bmV3IERhdGFWaWV3KFcuYnVmZmVyLFcuYnl0ZU9mZnNldCxXLmJ5dGVMZW5ndGgpLEc9KHcsVCk9PntsZXQgRT1uZXcgVWludDhBcnJheShUKTtyZXR1cm4gRS5zZXQoVy5zdWJhcnJheSh3LHcrVCkpLEV9LEg9MCx6PU51bWJlcihWNShZLEgpKTtpZihIKz04LFg+MCl7aWYoTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApLXo+WCl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gZXhwaXJlZCIpfWxldCBxPUcoSCxHOCk7SCs9Rzg7bGV0IFA9bDcoWSxIKTtpZihIKz00LEgrUD5XLmxlbmd0aCl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gdHJ1bmNhdGVkIChzY2hlbWEpIik7bGV0IFU9RyhILFApO0grPVA7bGV0IE09bDcoWSxIKTtpZihIKz00LEgrTT5XLmxlbmd0aCl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gdHJ1bmNhdGVkIChpbnB1dCBzY2hlbWEpIik7bGV0IEw9RyhILE0pO2lmKEgrPU0sSCsxNiE9PVcubGVuZ3RoKXRocm93IEVycm9yKCJTdGF0ZSB0b2tlbiB0cnVuY2F0ZWQgKHJlc3BvbnNlIGJ1ZGdldCkiKTtsZXQgRD1WNShZLEgpO0grPTg7bGV0IFI9VjUoWSxIKTtpZihEPkJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUil8fFI+QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl0aHJvdyBFcnJvcigiU3RhdGUgdG9rZW4gY29udGFpbnMgYW4gdW5zYWZlIHJlc3BvbnNlIGJ1ZGdldCIpO2xldCBWPU51bWJlcihEKXx8dm9pZCAwLGc9TnVtYmVyKFIpfHx2b2lkIDA7cmV0dXJue2NhbGxJZDpxLGNhbGw6e3NjaGVtYUJ5dGVzOlUsaW5wdXRTY2hlbWFCeXRlczpMLHJlc3BvbnNlTGltaXRCeXRlczpWLHByZWZlcnJlZFJlc3BvbnNlQnl0ZXM6Z319fXZhciB4OCx1Nz01LHA3PTIsRzg9MTYsclc9Ilx4MDBzZXJ2ZXIiLEhSLHpSLHFSLFBSO3ZhciB3NT1PKCgpPT57ZjcoKTt4OD1uZXcgVGV4dEVuY29kZXIsSFI9eDguZW5jb2RlKCJ2Z2lfcnBjLnN0YXRlLnY2XHgwMCIpLHpSPXg4LmVuY29kZSgidmdpX3JwYy5zdGF0ZS52N1x4MDAiKSxxUj14OC5lbmNvZGUoInZnaV9ycGMuY2FsbC52M1x4MDAiKSxQUj14OC5lbmNvZGUoInZnaV9ycGMuY2FsbC52NFx4MDAiKX0pO2Z1bmN0aW9uIG43KCl7bGV0ICQ9Z2xvYmFsVGhpcy5wcm9jZXNzPy5lbnY7cmV0dXJuIEJvb2xlYW4oJD8uVkdJX0RJU1BBVENIX0RFQlVHKX1mdW5jdGlvbiBRTSgkKXtsZXQgWj0kPy5jbGFpbXM/LnBlZXJfZXZpZGVuY2VfYmluZGluZztyZXR1cm4gdHlwZW9mIFo9PT0ic3RyaW5nIiYmWj9aOnZvaWQgMH1mdW5jdGlvbiBOUigkKXtyZXR1cm4gJD8uYXV0aGVudGljYXRlZD8kLnByaW5jaXBhbD8/IiI6bnVsbH1mdW5jdGlvbiBhVygkKXtyZXR1cm57cHJvdG9jb2w6JC5wcm90b2NvbE5hbWUscHJpbmNpcGFsOk5SKCQuYXV0aENvbnRleHQpLGV2aWRlbmNlQmluZGluZzpRTSgkLmF1dGhDb250ZXh0KSxkb21haW46JC5hdXRoQ29udGV4dD8uZG9tYWlufX1mdW5jdGlvbiBYTSgkLFope2xldCBRPVouYXV0aENvbnRleHQsWD0iIjtmb3IobGV0IEogb2YgJClYKz1KLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIik7cmV0dXJuYCR7WH1ceDAwJHtaLnByb3RvY29sTmFtZX1ceDAwJHtRPy5hdXRoZW50aWNhdGVkPyIxIjoiMCJ9XHgwMCR7UT8uZG9tYWluPz8iIn1ceDAwJHtRPy5wcmluY2lwYWw/PyIifVx4MDAke1FNKFEpPz8iIn1gfWZ1bmN0aW9uIEpNKCQpe3JldHVybiAkLmNhbGxTdGF0ZUNhY2hlRW50cmllcz8/RlJ9ZnVuY3Rpb24gaTcoJCxaLFEpe2xldCBYPUpNKFopO2lmKFg8PTApcmV0dXJuO2lmKHYxLnNpemU+PVgpdjEuY2xlYXIoKTtsZXQgSj1aLnRva2VuVHRsO3YxLnNldChYTSgkLFopLHtleHBpcmVzQXQ6TWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApKyhKPjA/SjozNjAwKSxjYWxsOlF9KX1mdW5jdGlvbiBXTSgpe2xldCAkPW5ldyBVaW50OEFycmF5KEc4KTtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcygkKSwkfWZ1bmN0aW9uIFVSKCQsWixRKXtsZXQgWD1YTSgkLFEpLEo9Sk0oUSk+MD92MS5nZXQoWCk6dm9pZCAwO2lmKEope2lmKE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTw9Si5leHBpcmVzQXQpcmV0dXJuIEouY2FsbDt2MS5kZWxldGUoWCl9aWYoIVopdGhyb3cgbmV3IHckKCJNaXNzaW5nIGNhbGwgdG9rZW4gaW4gZXhjaGFuZ2UgcmVxdWVzdCIsNDAwKTtsZXR7Y2FsbElkOlcsY2FsbDpZfT0kTShaLFEudG9rZW5LZXksYVcoUSksUS50b2tlblR0bCk7aWYoVy5sZW5ndGghPT0kLmxlbmd0aHx8IVcuZXZlcnkoKEcsSCk9Pkc9PT0kW0hdKSl0aHJvdyBuZXcgdyQoIkludmFsaWQgc3RhdGUgdG9rZW46IE1hbGZvcm1lZCBzdGF0ZSB0b2tlbiIsNDAwKTtyZXR1cm4gaTcoJCxRLFkpLFl9ZnVuY3Rpb24gTVIoJCxaLFEsWCl7bGV0IEo9V00oKTtyNyhYLEopO2xldCBXPWFXKFgpLFk9ZDcoSixaLFEsWC50b2tlbktleSxXLHZvaWQgMCx7cmVzcG9uc2VMaW1pdEJ5dGVzOlgubWF4UmVzcG9uc2VCeXRlcyxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOlgucHJlZmVycmVkUmVzcG9uc2VCeXRlc30pO3JldHVybiBpNyhKLFgse3NjaGVtYUJ5dGVzOlosaW5wdXRTY2hlbWFCeXRlczpRLHJlc3BvbnNlTGltaXRCeXRlczpYLm1heFJlc3BvbnNlQnl0ZXMscHJlZmVycmVkUmVzcG9uc2VCeXRlczpYLnByZWZlcnJlZFJlc3BvbnNlQnl0ZXN9KSx7Y2FsbElkOkosdG9rZW46RTUoJCxKLFgudG9rZW5LZXksVyksY2FsbFRva2VuOll9fWZ1bmN0aW9uIHI3KCQsWil7bGV0IFE9JC5zdHJlYW1PYnNlcnZlcjtpZighUSlyZXR1cm47bGV0IFg9IiI7Zm9yKGxldCBKIG9mIFopWCs9Si50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpO1Euc3RyZWFtSWQ9WH1hc3luYyBmdW5jdGlvbiBaTSgkKXtyZXR1cm4gJDEoJCl9ZnVuY3Rpb24gTFIoJCl7bGV0IFo9JC5lZ3Jlc3M7aWYoIVopcmV0dXJuO3JldHVybihRKT0+e1ouZXh0ZXJuYWxpemVkQnl0ZXMrPVF9fWFzeW5jIGZ1bmN0aW9uIGE3KCQsWil7bGV0e3NjaGVtYTpRLGJhdGNoOlh9PWF3YWl0IHRHKCQpO2lmKCFaLmV4dGVybmFsTG9jYXRpb258fCFGJChYKSlyZXR1cm57c2NoZW1hOlEsYmF0Y2g6WCxkYXRhTWV0YWRhdGE6WC5tZXRhZGF0YT8/dm9pZCAwfTtsZXQgSj1hd2FpdCBFJChYLFouZXh0ZXJuYWxMb2NhdGlvbiksVz1uZXcgTWFwKEoubWV0YWRhdGE/P1tdKTtmb3IobGV0W1ksR11vZiBYLm1ldGFkYXRhPz9bXSlXLnNldChZLEcpO3JldHVybntzY2hlbWE6Si5zY2hlbWEsYmF0Y2g6ZSQoSixXKSxkYXRhTWV0YWRhdGE6Si5tZXRhZGF0YT8/dm9pZCAwfX1mdW5jdGlvbiBZTSgkLFope3RyeXtyZXR1cm4geUooJCxaKX1jYXRjaChRKXtsZXQgWD1RPy5lcnJvck1lc3NhZ2UsSj1uZXcgdyQodHlwZW9mIFg9PT0ic3RyaW5nIj9YOlN0cmluZyhRKSw0MDApO3Rocm93IEoubmFtZT1RIGluc3RhbmNlb2YgRXJyb3I/US5uYW1lOiJQcm90b2NvbEVycm9yIixKfX1mdW5jdGlvbiBBUigkLFope2lmKCFaPy5zdG9yYWdlKXJldHVybiAwO2lmKCQubnVtUm93cz09PTApcmV0dXJuIDA7bGV0IFE9JC5kYXRhPy5ieXRlTGVuZ3RoPz8wLFg9Wi5leHRlcm5hbGl6ZVRocmVzaG9sZEJ5dGVzPz8xMDQ4NTc2O2lmKFE8WClyZXR1cm4gMDtyZXR1cm4gUX1mdW5jdGlvbiBEUigkKXtsZXQgWj1FcnJvcigkKTtyZXR1cm4gWi5uYW1lPSJSdW50aW1lRXJyb3IiLFp9ZnVuY3Rpb24gT1IoJCl7bGV0IFo9RXJyb3IoJCk7cmV0dXJuIFoubmFtZT0iUmVzcG9uc2VUb29MYXJnZUVycm9yIixafWFzeW5jIGZ1bmN0aW9uIHQ3KCQsWixRKXtpZighWi5leHRlcm5hbExvY2F0aW9uPy5zdG9yYWdlfHwkLm51bVJvd3M9PT0wKXJldHVybiAkO2xldCBYPWYwKCQuc2NoZW1hLFskXSkuYnl0ZUxlbmd0aCxKPUFSKCQsWi5leHRlcm5hbExvY2F0aW9uKT4wLFc9Wi5wcmVmZXJyZWRSZXNwb25zZUJ5dGVzPz9aLm1heFJlc3BvbnNlQnl0ZXMsWT1XIT1udWxsJiZYPlc7aWYoIUomJiFZKXJldHVybiAkO2lmKFoubWF4RXh0ZXJuYWxpemVkUmVzcG9uc2VCeXRlcyE9bnVsbCYmWD5aLm1heEV4dGVybmFsaXplZFJlc3BvbnNlQnl0ZXMpdGhyb3cgRFIoYEV4dGVybmFsaXNlZCBwYXlsb2FkIGV4Y2VlZHMgbWF4X2V4dGVybmFsaXplZF9yZXNwb25zZV9ieXRlcyAoJHtYfSA+ICR7Wi5tYXhFeHRlcm5hbGl6ZWRSZXNwb25zZUJ5dGVzfSkgZm9yIG1ldGhvZCAnJHtRfSdgKTtyZXR1cm4ga0ooJCxaLmV4dGVybmFsTG9jYXRpb24sTFIoWiksWSl9ZnVuY3Rpb24gbzcoJCxaLFEpe2xldCBYPXEkKCQsWixRLnNlcnZlcklkLG51bGwpLEo9ZlooZjAoJCxbWF0pLDUwMCk7cmV0dXJuIEouX19kaXNwYXRjaEVycm9yPVosSn1hc3luYyBmdW5jdGlvbiBHTSgkLFosUSl7bGV0IFg9JC5yZXN1bHRTY2hlbWEse3NjaGVtYTpKLGJhdGNoOld9PWF3YWl0IGE3KFosUSksWT1ZTShKLFcpO2lmKFkubWV0aG9kTmFtZSE9PSQubmFtZSl0aHJvdyBuZXcgdyQoYE1ldGhvZCBuYW1lIGluIHJlcXVlc3QgJyR7WS5tZXRob2ROYW1lfScgZG9lcyBub3QgbWF0Y2ggVVJMICckeyQubmFtZX0nYCw0MDApO3RyeXtrNihKLCQucGFyYW1zU2NoZW1hLCQubmFtZSl9Y2F0Y2goeil7bGV0IHE9ej8uZXJyb3JNZXNzYWdlLFA9bmV3IHckKHR5cGVvZiBxPT09InN0cmluZyI/cTpTdHJpbmcoeiksNDAwKTt0aHJvdyBQLm5hbWU9IlByb3RvY29sRXJyb3IiLFB9dzEoWS5wYXJhbXMsJC5kZWZhdWx0cyk7bGV0IEc9ISFRLmV4dGVybmFsTG9jYXRpb24/LnN0b3JhZ2UsSD1uZXcgeFEoWCwhMCxRLnNlcnZlcklkLFkucmVxdWVzdElkLFEuYXV0aENvbnRleHQsUS5jb29raWVzLFEua2luZD8/Z1EuSFRUUCx7cmVtYWluaW5nUmVzcG9uc2VCeXRlczpRLm1heFJlc3BvbnNlQnl0ZXMscmVzcG9uc2VMaW1pdEJ5dGVzOlEubWF4UmVzcG9uc2VCeXRlcyxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOlEucHJlZmVycmVkUmVzcG9uc2VCeXRlcyxyZW1haW5pbmdFeHRlcm5hbGl6ZWRSZXNwb25zZUJ5dGVzOkc/US5tYXhFeHRlcm5hbGl6ZWRSZXNwb25zZUJ5dGVzOnZvaWQgMCxleHRlcm5hbGl6YXRpb25FbmFibGVkOkcscGVlckV2aWRlbmNlOlEucGVlckV2aWRlbmNlfSk7aWYoSC5lbmFibGVDb29raWVTaW5rKCksUS5zdGlja3lDb250ZXh0KUguYXR0YWNoU3RpY2t5Q29udGV4dChRLnN0aWNreUNvbnRleHQpO3RyeXtsZXQgej1hd2FpdCAkLmhhbmRsZXIoWS5wYXJhbXMsSCkscT1ENihYLHosUS5zZXJ2ZXJJZCxZLnJlcXVlc3RJZCk7cT1hd2FpdCB0NyhxLFEsJC5uYW1lKTtsZXQgUD1bLi4uSC5iYXRjaGVzLm1hcCgoTCk9PkwuYmF0Y2gpLHFdLFU9ZjAoWCxQKTtpZihRLm1heFJlc3BvbnNlQnl0ZXMhPW51bGwmJlUuYnl0ZUxlbmd0aD5RLm1heFJlc3BvbnNlQnl0ZXMpe2xldCBMPUVycm9yKGBIVFRQIGJvZHkgZXhjZWVkcyBtYXhfcmVzcG9uc2VfYnl0ZXMgKCR7VS5ieXRlTGVuZ3RofSA+ICR7US5tYXhSZXNwb25zZUJ5dGVzfSkgZm9yIG1ldGhvZCAnJHskLm5hbWV9J2ApO0wubmFtZT0iUmVzcG9uc2VUb29MYXJnZUVycm9yIjtsZXQgRD1vNyhYLEwsUSk7cmV0dXJuIGFHKEQuaGVhZGVycyxILmRyYWluUmVzcG9uc2VDb29raWVzKCkpLER9bGV0IE09ZlooVSk7cmV0dXJuIGFHKE0uaGVhZGVycyxILmRyYWluUmVzcG9uc2VDb29raWVzKCkpLE19Y2F0Y2goeil7bGV0IHE9cSQoWCx6LFEuc2VydmVySWQsWS5yZXF1ZXN0SWQpLFA9ZlooZjAoWCxbcV0pLDUwMCk7cmV0dXJuIGFHKFAuaGVhZGVycyxILmRyYWluUmVzcG9uc2VDb29raWVzKCkpLFAuX19kaXNwYXRjaEVycm9yPXosUH19YXN5bmMgZnVuY3Rpb24gS00oJCxaLFEpe2xldCBYPSEhJC5wcm9kdWNlckZuLEo9JC5vdXRwdXRTY2hlbWEsVz0kLmlucHV0U2NoZW1hPz9TNSx7c2NoZW1hOlksYmF0Y2g6R309YXdhaXQgYTcoWixRKSxIPVlNKFksRyk7aWYoSC5tZXRob2ROYW1lIT09JC5uYW1lKXRocm93IG5ldyB3JChgTWV0aG9kIG5hbWUgaW4gcmVxdWVzdCAnJHtILm1ldGhvZE5hbWV9JyBkb2VzIG5vdCBtYXRjaCBVUkwgJyR7JC5uYW1lfSdgLDQwMCk7dHJ5e2s2KFksJC5wYXJhbXNTY2hlbWEsJC5uYW1lKX1jYXRjaChMKXtsZXQgRD1MPy5lcnJvck1lc3NhZ2UsUj1uZXcgdyQodHlwZW9mIEQ9PT0ic3RyaW5nIj9EOlN0cmluZyhMKSw0MDApO3Rocm93IFIubmFtZT0iUHJvdG9jb2xFcnJvciIsUn13MShILnBhcmFtcywkLmRlZmF1bHRzKTtsZXQgejt0cnl7aWYoWCl6PWF3YWl0ICQucHJvZHVjZXJJbml0KEgucGFyYW1zKTtlbHNlIHo9YXdhaXQgJC5leGNoYW5nZUluaXQoSC5wYXJhbXMpfWNhdGNoKEwpe2xldCBEPSQuaGVhZGVyU2NoZW1hPz9TNSxSPXEkKEQsTCxRLnNlcnZlcklkLEgucmVxdWVzdElkKSxWPWZaKGYwKEQsW1JdKSw1MDApO3JldHVybiBWLl9fZGlzcGF0Y2hFcnJvcj1MLFZ9bGV0IHE9ej8uX19vdXRwdXRTY2hlbWE/P0osUD16Py5fX2lucHV0U2NoZW1hPz9XLFU9ej8uX19pc1Byb2R1Y2VyPz9YLE09bnVsbDtpZigkLmhlYWRlclNjaGVtYSYmJC5oZWFkZXJJbml0KXRyeXtsZXQgTD1uZXcgeFEoJC5oZWFkZXJTY2hlbWEsITAsUS5zZXJ2ZXJJZCxILnJlcXVlc3RJZCxRLmF1dGhDb250ZXh0LFEuY29va2llcyxRLmtpbmQ/P2dRLkhUVFAse3BlZXJFdmlkZW5jZTpRLnBlZXJFdmlkZW5jZX0pLEQ9JC5oZWFkZXJJbml0KEgucGFyYW1zLHosTCksUj1ENigkLmhlYWRlclNjaGVtYSxELFEuc2VydmVySWQsSC5yZXF1ZXN0SWQpLFY9Wy4uLkwuYmF0Y2hlcy5tYXAoKGcpPT5nLmJhdGNoKSxSXTtNPWYwKCQuaGVhZGVyU2NoZW1hLFYpfWNhdGNoKEwpe2xldCBEPXEkKCQuaGVhZGVyU2NoZW1hLEwsUS5zZXJ2ZXJJZCxILnJlcXVlc3RJZCksUj1mWihmMCgkLmhlYWRlclNjaGVtYSxbRF0pLDUwMCk7cmV0dXJuIFIuX19kaXNwYXRjaEVycm9yPUwsUn1pZihVKXtsZXQgTD1XTSgpO3I3KFEsTCk7bGV0IEQ9ZDcoTCxJNihxKSxJNihQKSxRLnRva2VuS2V5LGFXKFEpLHZvaWQgMCx7cmVzcG9uc2VMaW1pdEJ5dGVzOlEubWF4UmVzcG9uc2VCeXRlcyxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOlEucHJlZmVycmVkUmVzcG9uc2VCeXRlc30pO3JldHVybiBpNyhMLFEse3NjaGVtYUJ5dGVzOkk2KHEpLGlucHV0U2NoZW1hQnl0ZXM6STYoUCkscmVzcG9uc2VMaW1pdEJ5dGVzOlEubWF4UmVzcG9uc2VCeXRlcyxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOlEucHJlZmVycmVkUmVzcG9uc2VCeXRlc30pLHpNKCQseixxLFAsUSxILnJlcXVlc3RJZCxNLHtjYWxsSWQ6TCxjYWxsVG9rZW46RH0sczcoRy5tZXRhZGF0YSkpfWVsc2V7bGV0IEw9US5zdGF0ZVNlcmlhbGl6ZXIuc2VyaWFsaXplKHopLEQ9STYocSksUj1JNihQKSx7dG9rZW46VixjYWxsVG9rZW46Z309TVIoTCxELFIsUSksdz1uZXcgTWFwO3cuc2V0KHkkLFYpLHcuc2V0KFlYLGcpO2xldCBUPUdYKHEsdyksRT1mMChxLFtUXSksXztpZihNKV89cU0oTSxFKTtlbHNlIF89RTtyZXR1cm4gZlooXyl9fWZ1bmN0aW9uIHM3KCQpe2lmKCEkKXJldHVybjtsZXQgWj1uZXcgTWFwO2ZvcihsZXRbUSxYXW9mICQpaWYoIUNSLmhhcyhRKSlaLnNldChRLFgpO3JldHVybiBaLnNpemU+MD9aOnZvaWQgMH1hc3luYyBmdW5jdGlvbiBITSgkLFosUSl7bGV0IFg9ISEkLnByb2R1Y2VyRm4se2JhdGNoOkosZGF0YU1ldGFkYXRhOld9PWF3YWl0IGE3KFosUSksWT1KLm1ldGFkYXRhPy5nZXQoeSQpO2lmKCFZKXRocm93IG5ldyB3JCgiTWlzc2luZyBzdGF0ZSB0b2tlbiBpbiBleGNoYW5nZSByZXF1ZXN0Iiw0MDApO2xldCBHPUoubWV0YWRhdGE/LmdldChiWCkhPW51bGw7aWYoRyYmUS5zdHJlYW1PYnNlcnZlcilRLnN0cmVhbU9ic2VydmVyLmNhbmNlbGxlZD0hMDtsZXQgSDt0cnl7SD14MShZLFEudG9rZW5LZXksUS50b2tlblR0bCxhVyhRKSl9Y2F0Y2goTCl7dGhyb3cgbmV3IHckKGBJbnZhbGlkIHN0YXRlIHRva2VuOiAke0wubWVzc2FnZX1gLDQwMCl9cjcoUSxILmNhbGxJZCk7bGV0IHo9VVIoSC5jYWxsSWQsSi5tZXRhZGF0YT8uZ2V0KFlYKSxRKTtpZihRPXsuLi5RLG1heFJlc3BvbnNlQnl0ZXM6dCQoUS5tYXhSZXNwb25zZUJ5dGVzLHoucmVzcG9uc2VMaW1pdEJ5dGVzKSxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOnQkKFEucHJlZmVycmVkUmVzcG9uc2VCeXRlcyx6LnByZWZlcnJlZFJlc3BvbnNlQnl0ZXMpfSxRLnByZWZlcnJlZFJlc3BvbnNlQnl0ZXMhPW51bGwmJlEubWF4UmVzcG9uc2VCeXRlcyE9bnVsbCYmUS5wcmVmZXJyZWRSZXNwb25zZUJ5dGVzPlEubWF4UmVzcG9uc2VCeXRlcylRLnByZWZlcnJlZFJlc3BvbnNlQnl0ZXM9US5tYXhSZXNwb25zZUJ5dGVzO2xldCBxO3RyeXtxPVEuc3RhdGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKEguc3RhdGVCeXRlcyl9Y2F0Y2goTCl7dGhyb3cgY29uc29sZS5lcnJvcigiW2h0dHBEaXNwYXRjaFN0cmVhbUV4Y2hhbmdlXSBzdGF0ZSBkZXNlcmlhbGl6ZSBlcnJvcjoiLEwubWVzc2FnZSksbmV3IHckKGBTdGF0ZSBkZXNlcmlhbGl6YXRpb24gZmFpbGVkOiAke0wubWVzc2FnZX1gLDUwMCl9bGV0IFA7aWYoei5zY2hlbWFCeXRlcy5sZW5ndGg+MClQPWF3YWl0IFpNKHouc2NoZW1hQnl0ZXMpO2Vsc2UgUD1xPy5fX291dHB1dFNjaGVtYT8/JC5vdXRwdXRTY2hlbWE7bGV0IFU7aWYoei5pbnB1dFNjaGVtYUJ5dGVzLmxlbmd0aD4wKVU9YXdhaXQgWk0oei5pbnB1dFNjaGVtYUJ5dGVzKTtlbHNlIFU9cT8uX19pbnB1dFNjaGVtYT8/JC5pbnB1dFNjaGVtYT8/UzU7bGV0IE09cT8uX19pc1Byb2R1Y2VyPz9YO2lmKG43KCkpY29uc29sZS5lcnJvcihgW2h0dHBEaXNwYXRjaFN0cmVhbUV4Y2hhbmdlXSBtZXRob2Q9JHskLm5hbWV9IGVmZmVjdGl2ZVByb2R1Y2VyPSR7TX0gc3RhdGVLZXlzPSR7T2JqZWN0LmtleXMocXx8e30pfWApO2lmKEcpe2lmKCQub25DYW5jZWwpdHJ5e2F3YWl0ICQub25DYW5jZWwocSl9Y2F0Y2goTCl7Y29uc29sZS5kZWJ1Zz8uKGBvbkNhbmNlbCBob29rIGZhaWxlZDogJHtMIGluc3RhbmNlb2YgRXJyb3I/TC5tZXNzYWdlOkx9YCl9cmV0dXJuIGZaKGYwKFAsW10pKX1pZihNKXJldHVybiB6TSgkLHEsUCxVLFEsbnVsbCxudWxsLHtjYWxsSWQ6SC5jYWxsSWQsY2FsbFRva2VuOm51bGx9LHM3KEoubWV0YWRhdGEpKTtlbHNle2xldCBMPXM3KFcpPz9uZXcgTWFwLEQ9ZSQoSixMKSxSPSEhUS5leHRlcm5hbExvY2F0aW9uPy5zdG9yYWdlLFY9bmV3IHhRKFAsTSxRLnNlcnZlcklkLG51bGwsUS5hdXRoQ29udGV4dCxRLmNvb2tpZXMsUS5raW5kPz9nUS5IVFRQLHtyZW1haW5pbmdSZXNwb25zZUJ5dGVzOlEubWF4UmVzcG9uc2VCeXRlcyxyZXNwb25zZUxpbWl0Qnl0ZXM6US5tYXhSZXNwb25zZUJ5dGVzLHByZWZlcnJlZFJlc3BvbnNlQnl0ZXM6US5wcmVmZXJyZWRSZXNwb25zZUJ5dGVzLHJlbWFpbmluZ0V4dGVybmFsaXplZFJlc3BvbnNlQnl0ZXM6Uj9RLm1heEV4dGVybmFsaXplZFJlc3BvbnNlQnl0ZXM6dm9pZCAwLGV4dGVybmFsaXphdGlvbkVuYWJsZWQ6UixpbnB1dE1ldGFkYXRhOkwscGVlckV2aWRlbmNlOlEucGVlckV2aWRlbmNlfSk7aWYoUS5zdGlja3lDb250ZXh0KVYuYXR0YWNoU3RpY2t5Q29udGV4dChRLnN0aWNreUNvbnRleHQpO2xldCBnPUQ7aWYoIU0mJlUhPT1TNSYmRC5zY2hlbWEhPT1VKXRyeXtnPVU2KEQsVSl9Y2F0Y2goRSl7aWYoRSBpbnN0YW5jZW9mIFR5cGVFcnJvcil0aHJvdyBFO2NvbnNvbGUuZGVidWc/LihgU2NoZW1hIGNvbmZvcm1hbmNlIHNraXBwZWQ6ICR7RSBpbnN0YW5jZW9mIEVycm9yP0UubWVzc2FnZTpFfWApfXRyeXtpZigkLmV4Y2hhbmdlRm4pYXdhaXQgJC5leGNoYW5nZUZuKHEsZyxWKTtlbHNlIGF3YWl0ICQucHJvZHVjZXJGbihxLFYpfWNhdGNoKEUpe2lmKG43KCkpY29uc29sZS5lcnJvcigiW2h0dHBEaXNwYXRjaFN0cmVhbUV4Y2hhbmdlXSBleGNoYW5nZSBoYW5kbGVyIGVycm9yOiIsRS5tZXNzYWdlLEUuc3RhY2s/LnNwbGl0KGAKYCkuc2xpY2UoMCw1KS5qb2luKGAKYCkpO2xldCBfPXEkKFAsRSxRLnNlcnZlcklkLG51bGwpLHk9ZlooZjAoUCxbX10pLDUwMCk7cmV0dXJuIHkuX19kaXNwYXRjaEVycm9yPUUseX1sZXQgdz1bXTtpZihWLmZpbmlzaGVkKWZvcihsZXQgRSBvZiBWLmJhdGNoZXMpaWYoRS5tZXRhZGF0YSYmRS5tZXRhZGF0YS5zaXplPjApe2xldCBfPW5ldyBNYXAoRS5iYXRjaC5tZXRhZGF0YT8/W10pO2ZvcihsZXRbeSxoXW9mIEUubWV0YWRhdGEpXy5zZXQoeSxoKTt3LnB1c2goZSQoRS5iYXRjaCxfKSl9ZWxzZSB3LnB1c2goRS5iYXRjaCk7ZWxzZXtsZXQgRT1RLnN0YXRlU2VyaWFsaXplci5zZXJpYWxpemUocSksXz1FNShFLEguY2FsbElkLFEudG9rZW5LZXksYVcoUSkpO2ZvcihsZXRbeSxoXW9mIFYuYmF0Y2hlcy5lbnRyaWVzKCkpe2xldCBzPWguYmF0Y2g7aWYoeT09PVYuZGF0YUJhdGNoSWR4KXtsZXQgZj1uZXcgTWFwKHMubWV0YWRhdGE/P1tdKTtpZihoLm1ldGFkYXRhKWZvcihsZXRbYyxvXW9mIGgubWV0YWRhdGEpZi5zZXQoYyxvKTtmLnNldCh5JCxfKSx3LnB1c2goZSQocyxmKSl9ZWxzZSB3LnB1c2gocyl9aWYoIXcuc29tZSgoeSk9PnkubWV0YWRhdGE/LmdldCh5JCkpKXtsZXQgeT1uZXcgTWFwO3kuc2V0KHkkLF8pLHcucHVzaChHWChQLHkpKX19dHJ5e3c9YXdhaXQgUHJvbWlzZS5hbGwody5tYXAoKEUsXyk9Pl89PT1WLmRhdGFCYXRjaElkeD90NyhFLFEsJC5uYW1lKTpFKSl9Y2F0Y2goRSl7cmV0dXJuIG83KFAsRSxRKX1sZXQgVD1mMChQLHcpO2lmKFEubWF4UmVzcG9uc2VCeXRlcyE9bnVsbCYmVC5ieXRlTGVuZ3RoPlEubWF4UmVzcG9uc2VCeXRlcyl7bGV0IEU9RXJyb3IoYEhUVFAgYm9keSBleGNlZWRzIG1heF9yZXNwb25zZV9ieXRlcyAoJHtULmJ5dGVMZW5ndGh9ID4gJHtRLm1heFJlc3BvbnNlQnl0ZXN9KSBmb3IgbWV0aG9kICckeyQubmFtZX0nYCk7cmV0dXJuIEUubmFtZT0iUmVzcG9uc2VUb29MYXJnZUVycm9yIixvNyhQLEUsUSl9cmV0dXJuIGZaKFQpfX1hc3luYyBmdW5jdGlvbiB6TSgkLFosUSxYLEosVyxZLEcsSCl7bGV0IHo9W10scT1KLm1heFN0cmVhbVJlc3BvbnNlQnl0ZXM/P0oubWF4UmVzcG9uc2VCeXRlcyxQPUoubWF4RXh0ZXJuYWxpemVkUmVzcG9uc2VCeXRlcyxVPSEhSi5leHRlcm5hbExvY2F0aW9uPy5zdG9yYWdlLE0sTCxEPW5ldyB4UShRLCEwLEouc2VydmVySWQsVyxKLmF1dGhDb250ZXh0LEouY29va2llcyxKLmtpbmQ/P2dRLkhUVFAse3JlbWFpbmluZ1Jlc3BvbnNlQnl0ZXM6cSxyZXNwb25zZUxpbWl0Qnl0ZXM6cSxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOkoucHJlZmVycmVkUmVzcG9uc2VCeXRlcyxyZW1haW5pbmdFeHRlcm5hbGl6ZWRSZXNwb25zZUJ5dGVzOlU/UDp2b2lkIDAsZXh0ZXJuYWxpemF0aW9uRW5hYmxlZDpVLGlucHV0TWV0YWRhdGE6SCxwZWVyRXZpZGVuY2U6Si5wZWVyRXZpZGVuY2V9KTtpZihKLnN0aWNreUNvbnRleHQpRC5hdHRhY2hTdGlja3lDb250ZXh0KEouc3RpY2t5Q29udGV4dCk7dHJ5e2lmKCQucHJvZHVjZXJGbilhd2FpdCAkLnByb2R1Y2VyRm4oWixEKTtlbHNle2xldCBFPUdYKFgsSCk7YXdhaXQgJC5leGNoYW5nZUZuKFosRSxEKX19Y2F0Y2goRSl7aWYobjcoKSljb25zb2xlLmVycm9yKCJbcHJvZHVjZVN0cmVhbVJlc3BvbnNlXSBlcnJvcjoiLEUubWVzc2FnZSxFLnN0YWNrPy5zcGxpdChgCmApLnNsaWNlKDAsMykuam9pbihgCmApKTt6LnB1c2gocSQoUSxFLEouc2VydmVySWQsVykpLE09RSBpbnN0YW5jZW9mIEVycm9yP0U6RXJyb3IoU3RyaW5nKEUpKX1pZighTSlmb3IobGV0IEUgb2YgRC5iYXRjaGVzKXtsZXQgXz1FLmJhdGNoO2lmKEUubWV0YWRhdGEmJkUubWV0YWRhdGEuc2l6ZT4wKXtsZXQgeT1uZXcgTWFwKF8ubWV0YWRhdGE/P1tdKTtmb3IobGV0W2gsc11vZiBFLm1ldGFkYXRhKXkuc2V0KGgscyk7Xz1lJChfLHkpfWlmKFUmJkouZXh0ZXJuYWxMb2NhdGlvbil0cnl7Xz1hd2FpdCB0NyhfLEosJC5uYW1lKX1jYXRjaCh5KXtMPXk7YnJlYWt9ei5wdXNoKF8pfWlmKEwpei5sZW5ndGg9MCx6LnB1c2gocSQoUSxMLEouc2VydmVySWQsVykpLE09TDtlbHNlIGlmKCFNJiYhRC5maW5pc2hlZCl7bGV0IEU9Si5zdGF0ZVNlcmlhbGl6ZXIuc2VyaWFsaXplKFopLF89RTUoRSxHLmNhbGxJZCxKLnRva2VuS2V5LGFXKEopKSx5PW5ldyBNYXA7aWYoeS5zZXQoeSQsXyksRy5jYWxsVG9rZW4peS5zZXQoWVgsRy5jYWxsVG9rZW4pO3oucHVzaChHWChRLHkpKX1sZXQgUj1mMChRLHopLFY7aWYocSE9bnVsbCYmUi5ieXRlTGVuZ3RoKyhZPy5ieXRlTGVuZ3RoPz8wKT5xKVY9T1IoYEhUVFAgYm9keSBleGNlZWRzIG1heF9yZXNwb25zZV9ieXRlcyAoJHtSLmJ5dGVMZW5ndGgrKFk/LmJ5dGVMZW5ndGg/PzApfSA+ICR7cX0pIGZvciBtZXRob2QgJyR7JC5uYW1lfSdgKSx6Lmxlbmd0aD0wLHoucHVzaChxJChRLFYsSi5zZXJ2ZXJJZCxXKSksUj1mMChRLHopLFk9bnVsbCxNPVY7bGV0IGc7aWYoWSlnPXFNKFksUik7ZWxzZSBnPVI7bGV0IFQ9ZlooZyxMfHxWPzUwMDoyMDApO2lmKE0pVC5fX2Rpc3BhdGNoRXJyb3I9TTtyZXR1cm4gVH1mdW5jdGlvbiBxTSguLi4kKXtsZXQgWj0kLnJlZHVjZSgoSixXKT0+SitXLmxlbmd0aCwwKSxRPW5ldyBVaW50OEFycmF5KFopLFg9MDtmb3IobGV0IEogb2YgJClRLnNldChKLFgpLFgrPUoubGVuZ3RoO3JldHVybiBRfXZhciBGUj00MDk2LHYxLFM1LENSO3ZhciBQTT1PKCgpPT57cVooKTtJOCgpO2xYKCk7a1UoKTtTMSgpO21YKCk7SjgoKTtPSigpO3c1KCk7djE9bmV3IE1hcDtTNT1FMChbXSk7Q1I9bmV3IFNldChbeSQsWVgsYlhdKX0pO2Z1bmN0aW9uIGwkKCQpe3JldHVybiAkLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpfWZ1bmN0aW9uIGU3KCQpe2xldCBaPSQudHlwZUlkO2lmKFo9PT01KXJldHVybiJzdHIiO2lmKFo9PT00KXJldHVybiJieXRlcyI7aWYoWj09PTIpcmV0dXJuImludCI7aWYoWj09PTMpcmV0dXJuImZsb2F0IjtpZihaPT09NilyZXR1cm4iYm9vbCI7aWYoWj09PTEyKXJldHVybiJsaXN0IjtpZihaPT09MTcpcmV0dXJuIm1hcCI7aWYoWj09PTI0KXJldHVybiJlbnVtIjtyZXR1cm4gJC50b1N0cmluZygpfWZ1bmN0aW9uIE1NKCQsWixRLFgpe2xldCBKPVtdO2lmKFEpSi5wdXNoKGA8YSBjbGFzcz0icHJpbWFyeSIgaHJlZj0iJHtsJChRKX0iPlZpZXcgc2VydmljZSBBUEk8L2E+YCk7aWYoWClKLnB1c2goYDxhIGhyZWY9IiR7bCQoWCl9Ij5Tb3VyY2UgcmVwb3NpdG9yeTwvYT5gKTtyZXR1cm4gSi5wdXNoKCc8YSBocmVmPSJodHRwczovL3ZnaS1ycGMucXVlcnkuZmFybSI+TGVhcm4gbW9yZSBhYm91dCA8Y29kZT52Z2ktcnBjPC9jb2RlPjwvYT4nKSxgPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPiR7bCQoJCl9IOKAlCB2Z2ktcnBjPC90aXRsZT4KJHtgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDQwMDs2MDA7NzAwJmZhbWlseT1KZXRCcmFpbnMrTW9ubzp3Z2h0QDQwMDs2MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPmB9CjxzdHlsZT4KYm9keSB7IGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7IG1heC13aWR0aDogNjAwcHg7CiAgICAgICBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogNjBweCAyMHB4IDA7IGNvbG9yOiAjMmMyYzFlOyB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICBiYWNrZ3JvdW5kOiAjZmFmOGYwOyB9Ci5sb2dvIHsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQoubG9nbyBpbWcgeyB3aWR0aDogMTQwcHg7IGhlaWdodDogMTQwcHg7IGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDI0cHggcmdiYSgwLDAsMCwwLjEyKTsgfQpoMSB7IGNvbG9yOiAjMmQ1MDE2OyBtYXJnaW4tYm90dG9tOiA4cHg7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KY29kZSB7IGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7IGJhY2tncm91bmQ6ICNmMGVjZTA7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogM3B4OyBmb250LXNpemU6IDAuOWVtOyBjb2xvcjogIzJjMmMxZTsgfQphIHsgY29sb3I6ICMyZDUwMTY7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQphOmhvdmVyIHsgY29sb3I6ICM0YTdjMjM7IH0KcCB7IGxpbmUtaGVpZ2h0OiAxLjc7IGNvbG9yOiAjNmI2YjVhOyB9Ci5tZXRhIHsgZm9udC1zaXplOiAwLjllbTsgY29sb3I6ICM2YjZiNWE7IH0KLmxpbmtzIHsgbWFyZ2luLXRvcDogMjhweDsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiA4cHg7IH0KLmxpbmtzIGEgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDhweCAxOHB4OyBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0YTdjMjM7IGNvbG9yOiAjMmQ1MDE2OyBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LXNpemU6IDAuOWVtOyB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOyB9Ci5saW5rcyBhOmhvdmVyIHsgYmFja2dyb3VuZDogIzRhN2MyMzsgY29sb3I6ICNmZmY7IH0KLmxpbmtzIGEucHJpbWFyeSB7IGJhY2tncm91bmQ6ICMyZDUwMTY7IGNvbG9yOiAjZmZmOyBib3JkZXItY29sb3I6ICMyZDUwMTY7IH0KLmxpbmtzIGEucHJpbWFyeTpob3ZlciB7IGJhY2tncm91bmQ6ICM0YTdjMjM7IGJvcmRlci1jb2xvcjogIzRhN2MyMzsgfQpmb290ZXIgeyBtYXJnaW4tdG9wOiA0OHB4OyBwYWRkaW5nOiAyMHB4IDA7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjBlY2UwOwogICAgICAgICAgY29sb3I6ICM2YjZiNWE7IGZvbnQtc2l6ZTogMC44NWVtOyB9CmZvb3RlciBhIHsgY29sb3I6ICMyZDUwMTY7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KZm9vdGVyIGE6aG92ZXIgeyBjb2xvcjogIzRhN2MyMzsgfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGNsYXNzPSJsb2dvIj4KICA8aW1nIHNyYz0iaHR0cHM6Ly92Z2ktcnBjLXB5dGhvbi5xdWVyeS5mYXJtL2Fzc2V0cy9sb2dvLWhlcm8ucG5nIiBhbHQ9InZnaS1ycGMgbG9nbyI+CjwvZGl2Pgo8aDE+JHtsJCgkKX08L2gxPgo8cCBjbGFzcz0ibWV0YSI+UG93ZXJlZCBieSA8Y29kZT52Z2ktcnBjPC9jb2RlPiAoVHlwZVNjcmlwdCkgJm1pZGRvdDsgc2VydmVyIDxjb2RlPiR7bCQoWil9PC9jb2RlPjwvcD4KPHA+VGhpcyBpcyBhIDxjb2RlPnZnaS1ycGM8L2NvZGU+IHNlcnZpY2UgZW5kcG9pbnQuPC9wPgo8ZGl2IGNsYXNzPSJsaW5rcyI+CiR7Si5qb2luKGAKYCl9CjwvZGl2Pgo8Zm9vdGVyPgogICZjb3B5OyAyMDI2ICYjeDFGNjlDOyA8YSBocmVmPSJodHRwczovL3F1ZXJ5LmZhcm0iPlF1ZXJ5LkZhcm0gTExDPC9hPgo8L2Zvb3Rlcj4KPC9ib2R5Pgo8L2h0bWw+YH1mdW5jdGlvbiBMTSgkLFope3JldHVybmA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0idXRmLTgiPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgo8dGl0bGU+NDA0IOKAlCB2Z2ktcnBjPC90aXRsZT4KJHtgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDQwMDs2MDA7NzAwJmZhbWlseT1KZXRCcmFpbnMrTW9ubzp3Z2h0QDQwMDs2MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPmB9CiR7YDxzdHlsZT4KYm9keSB7IGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7IG1heC13aWR0aDogNjAwcHg7CiAgICAgICBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogNjBweCAyMHB4IDA7IGNvbG9yOiAjMmMyYzFlOyB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICBiYWNrZ3JvdW5kOiAjZmFmOGYwOyB9Ci5sb2dvIHsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQoubG9nbyBpbWcgeyB3aWR0aDogMTIwcHg7IGhlaWdodDogMTIwcHg7IGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDI0cHggcmdiYSgwLDAsMCwwLjEyKTsgfQpoMSB7IGNvbG9yOiAjMmQ1MDE2OyBtYXJnaW4tYm90dG9tOiA4cHg7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KY29kZSB7IGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7IGJhY2tncm91bmQ6ICNmMGVjZTA7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogM3B4OyBmb250LXNpemU6IDAuOWVtOyBjb2xvcjogIzJjMmMxZTsgfQphIHsgY29sb3I6ICMyZDUwMTY7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQphOmhvdmVyIHsgY29sb3I6ICM0YTdjMjM7IH0KcCB7IGxpbmUtaGVpZ2h0OiAxLjc7IGNvbG9yOiAjNmI2YjVhOyB9Ci5kZXRhaWwgeyBtYXJnaW4tdG9wOiAxMnB4OyBwYWRkaW5nOiAxMnB4IDE2cHg7IGJhY2tncm91bmQ6ICNmMGVjZTA7CiAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDAuOWVtOyBjb2xvcjogIzZiNmI1YTsgfQpmb290ZXIgeyBtYXJnaW4tdG9wOiA0OHB4OyBwYWRkaW5nOiAyMHB4IDA7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjBlY2UwOwogICAgICAgICAgY29sb3I6ICM2YjZiNWE7IGZvbnQtc2l6ZTogMC44NWVtOyBsaW5lLWhlaWdodDogMS44OyB9CmZvb3RlciBhIHsgY29sb3I6ICMyZDUwMTY7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KZm9vdGVyIGE6aG92ZXIgeyBjb2xvcjogIzRhN2MyMzsgfQo8L3N0eWxlPmB9CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9ImxvZ28iPgogIDxpbWcgc3JjPSIkeyJodHRwczovL3ZnaS1ycGMtcHl0aG9uLnF1ZXJ5LmZhcm0vYXNzZXRzL2xvZ28taGVyby5wbmcifSIgYWx0PSJ2Z2ktcnBjIGxvZ28iPgo8L2Rpdj4KPGgxPjQwNCDigJQgTm90IEZvdW5kPC9oMT4KPHA+VGhpcyBpcyBhIDxjb2RlPnZnaS1ycGM8L2NvZGU+IHNlcnZpY2UgZW5kcG9pbnQke1o/YCAoPHN0cm9uZz4ke2wkKFopfTwvc3Ryb25nPilgOiIifS48L3A+CjxwPlJQQyBtZXRob2RzIGFyZSBhdmFpbGFibGUgdW5kZXIgPGNvZGU+JHtsJCgkfHwiLyIpfS8mbHQ7bWV0aG9kJmd0OzwvY29kZT4uPC9wPgo8Zm9vdGVyPgogIFBvd2VyZWQgYnkgPGEgaHJlZj0iaHR0cHM6Ly92Z2ktcnBjLnF1ZXJ5LmZhcm0iPjxjb2RlPnZnaS1ycGM8L2NvZGU+PC9hPgo8L2Zvb3Rlcj4KPC9ib2R5Pgo8L2h0bWw+YH1mdW5jdGlvbiBqUigkKXtsZXQgWj1sJCgkLm5hbWUpLFE9JC50eXBlPT09InVuYXJ5IixYPSEhJC5oZWFkZXJTY2hlbWEsSj1bXTtpZihKLnB1c2goUT8nPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXVuYXJ5Ij51bmFyeTwvc3Bhbj4nOic8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2Utc3RyZWFtIj5zdHJlYW08L3NwYW4+JyksWClKLnB1c2goJzxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1oZWFkZXIiPmhlYWRlcjwvc3Bhbj4nKTtsZXQgVz0iIixZPSQucGFyYW1zU2NoZW1hO2lmKFkuZmllbGRzLmxlbmd0aD4wKVc9YDxkaXYgY2xhc3M9InNlY3Rpb24tbGFiZWwiPlBhcmFtZXRlcnM8L2Rpdj4KPHRhYmxlPjx0cj48dGg+TmFtZTwvdGg+PHRoPlR5cGU8L3RoPjx0aD5EZWZhdWx0PC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+CiR7WS5maWVsZHMubWFwKChQKT0+e2xldCBVPWwkKFAubmFtZSksTT1sJChlNyhQLnR5cGUpKSxMPSQuZGVmYXVsdHMmJlAubmFtZSBpbiAkLmRlZmF1bHRzP2wkKEpTT04uc3RyaW5naWZ5KCQuZGVmYXVsdHNbUC5uYW1lXSkpOiImbWRhc2g7IjtyZXR1cm5gPHRyPjx0ZD48Y29kZT4ke1V9PC9jb2RlPjwvdGQ+PHRkPjxjb2RlPiR7TX08L2NvZGU+PC90ZD48dGQ+JHtMfTwvdGQ+PHRkPiZtZGFzaDs8L3RkPjwvdHI+YH0pLmpvaW4oYApgKX0KPC90YWJsZT5gO2Vsc2UgVz0nPHAgY2xhc3M9Im5vLXBhcmFtcyI+Tm8gcGFyYW1ldGVyczwvcD4nO2xldCBHPSIiO2lmKFEmJiQucmVzdWx0U2NoZW1hLmZpZWxkcy5sZW5ndGg+MClHPWA8ZGl2IGNsYXNzPSJzZWN0aW9uLWxhYmVsIj5SZXR1cm5zPC9kaXY+Cjx0YWJsZT48dHI+PHRoPk5hbWU8L3RoPjx0aD5UeXBlPC90aD48L3RyPgokeyQucmVzdWx0U2NoZW1hLmZpZWxkcy5tYXAoKFApPT57cmV0dXJuYDx0cj48dGQ+PGNvZGU+JHtsJChQLm5hbWUpfTwvY29kZT48L3RkPjx0ZD48Y29kZT4ke2wkKGU3KFAudHlwZSkpfTwvY29kZT48L3RkPjwvdHI+YH0pLmpvaW4oYApgKX0KPC90YWJsZT5gO2xldCBIPSIiO2lmKFgmJiQuaGVhZGVyU2NoZW1hJiYkLmhlYWRlclNjaGVtYS5maWVsZHMubGVuZ3RoPjApSD1gPGRpdiBjbGFzcz0ic2VjdGlvbi1sYWJlbCI+U3RyZWFtIEhlYWRlcjwvZGl2Pgo8dGFibGU+PHRyPjx0aD5OYW1lPC90aD48dGg+VHlwZTwvdGg+PC90cj4KJHskLmhlYWRlclNjaGVtYS5maWVsZHMubWFwKChQKT0+e3JldHVybmA8dHI+PHRkPjxjb2RlPiR7bCQoUC5uYW1lKX08L2NvZGU+PC90ZD48dGQ+PGNvZGU+JHtsJChlNyhQLnR5cGUpKX08L2NvZGU+PC90ZD48L3RyPmB9KS5qb2luKGAKYCl9CjwvdGFibGU+YDtsZXQgej0kLmRvYz9gPHAgY2xhc3M9ImRvY3N0cmluZyI+JHtsJCgkLmRvYyl9PC9wPmA6IiI7cmV0dXJuYDxkaXYgY2xhc3M9ImNhcmQiPgo8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+CjxzcGFuIGNsYXNzPSJtZXRob2QtbmFtZSI+JHtafTwvc3Bhbj4KJHtKLmpvaW4oYApgKX0KPC9kaXY+CiR7en0KJHtXfQoke0d9CiR7SH0KPC9kaXY+YH1mdW5jdGlvbiBBTSgkLFosUSxYKXtsZXQgVz1bLi4uUS5lbnRyaWVzKCldLnNvcnQoKFtHXSxbSF0pPT5HLmxvY2FsZUNvbXBhcmUoSCkpLm1hcCgoWyxHXSk9PmpSKEcpKS5qb2luKGAKYCksWT1YP2AgJm1pZGRvdDsgPGEgaHJlZj0iJHtsJChYKX0iPlNvdXJjZTwvYT5gOiIiO3JldHVybmA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0idXRmLTgiPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgo8dGl0bGU+JHtsJCgkKX0gQVBJIFJlZmVyZW5jZSDigJQgdmdpLXJwYzwvdGl0bGU+CiR7YDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEA0MDA7NjAwOzcwMCZmYW1pbHk9SmV0QnJhaW5zK01vbm86d2dodEA0MDA7NjAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij5gfQo8c3R5bGU+CmJvZHkgeyBmb250LWZhbWlseTogJ0ludGVyJywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOyBtYXgtd2lkdGg6IDkwMHB4OwogICAgICAgbWFyZ2luOiAwIGF1dG87IHBhZGRpbmc6IDQwcHggMjBweCAwOyBjb2xvcjogIzJjMmMxZTsgYmFja2dyb3VuZDogI2ZhZjhmMDsgfQouaGVhZGVyIHsgdGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tYm90dG9tOiA0MHB4OyB9Ci5oZWFkZXIgLmxvZ28gaW1nIHsgd2lkdGg6IDgwcHg7IGhlaWdodDogODBweDsgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDNweCAxNnB4IHJnYmEoMCwwLDAsMC4xMCk7IH0KLmhlYWRlciBoMSB7IG1hcmdpbi1ib3R0b206IDRweDsgY29sb3I6ICMyZDUwMTY7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KLmhlYWRlciAuc3VidGl0bGUgeyBjb2xvcjogIzZiNmI1YTsgZm9udC1zaXplOiAxLjFlbTsgbWFyZ2luLXRvcDogMDsgfQouaGVhZGVyIC5tZXRhIHsgY29sb3I6ICM2YjZiNWE7IGZvbnQtc2l6ZTogMC45ZW07IH0KLmhlYWRlciAubWV0YSBhIHsgY29sb3I6ICMyZDUwMTY7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KLmhlYWRlciAubWV0YSBhOmhvdmVyIHsgY29sb3I6ICM0YTdjMjM7IH0KY29kZSB7IGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7IGJhY2tncm91bmQ6ICNmMGVjZTA7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogM3B4OyBmb250LXNpemU6IDAuODVlbTsgY29sb3I6ICMyYzJjMWU7IH0KYSB7IGNvbG9yOiAjMmQ1MDE2OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KYTpob3ZlciB7IGNvbG9yOiAjNGE3YzIzOyB9Ci5jYXJkIHsgYm9yZGVyOiAxcHggc29saWQgI2YwZWNlMDsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiAyMHB4OwogICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyBiYWNrZ3JvdW5kOiAjZmZmOyB9Ci5jYXJkOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiAjYzhhNDNhOyB9Ci5jYXJkLWhlYWRlciB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTBweDsgbWFyZ2luLWJvdHRvbTogMTJweDsgfQoubWV0aG9kLW5hbWUgeyBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDEuMWVtOyBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICAgICAgY29sb3I6ICMyZDUwMTY7IH0KLmJhZGdlIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAycHggOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDAuNzVlbTsgZm9udC13ZWlnaHQ6IDYwMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07IH0KLmJhZGdlLXVuYXJ5IHsgYmFja2dyb3VuZDogI2U4ZjVlMDsgY29sb3I6ICMyZDUwMTY7IH0KLmJhZGdlLXN0cmVhbSB7IGJhY2tncm91bmQ6ICNlMGVjZjU7IGNvbG9yOiAjMWE0YTZiOyB9Ci5iYWRnZS1leGNoYW5nZSB7IGJhY2tncm91bmQ6ICNmNWU2ZjA7IGNvbG9yOiAjNmIyMzRhOyB9Ci5iYWRnZS1wcm9kdWNlciB7IGJhY2tncm91bmQ6ICNlMGYwZjU7IGNvbG9yOiAjMWE1YTZiOyB9Ci5iYWRnZS1oZWFkZXIgeyBiYWNrZ3JvdW5kOiAjZjVlZWUwOyBjb2xvcjogIzZiNDQyMzsgfQouZG9jc3RyaW5nIHsgY29sb3I6ICM2YjZiNWE7IGZvbnQtc2l6ZTogMC45ZW07IG1hcmdpbi10b3A6IDA7IH0KdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1zaXplOiAwLjllbTsgfQp0aCB7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmc6IDhweCAxMHB4OyBiYWNrZ3JvdW5kOiAjZjBlY2UwOyBjb2xvcjogIzJjMmMxZTsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlMGRjZDA7IH0KdGQgeyBwYWRkaW5nOiA4cHggMTBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGVjZTA7IH0KdGQgY29kZSB7IGZvbnQtc2l6ZTogMC44NWVtOyB9Ci5uby1wYXJhbXMgeyBjb2xvcjogIzZiNmI1YTsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXNpemU6IDAuOWVtOyB9Ci5zZWN0aW9uLWxhYmVsIHsgZm9udC1zaXplOiAwLjhlbTsgZm9udC13ZWlnaHQ6IDYwMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsgY29sb3I6ICM2YjZiNWE7IG1hcmdpbi10b3A6IDE0cHg7CiAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDZweDsgfQpmb290ZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6IDQ4cHg7IHBhZGRpbmc6IDIwcHggMDsKICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjBlY2UwOyBjb2xvcjogIzZiNmI1YTsgZm9udC1zaXplOiAwLjg1ZW07IH0KZm9vdGVyIGEgeyBjb2xvcjogIzJkNTAxNjsgZm9udC13ZWlnaHQ6IDYwMDsgfQpmb290ZXIgYTpob3ZlciB7IGNvbG9yOiAjNGE3YzIzOyB9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9ImhlYWRlciI+CiAgPGRpdiBjbGFzcz0ibG9nbyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly92Z2ktcnBjLXB5dGhvbi5xdWVyeS5mYXJtL2Fzc2V0cy9sb2dvLWhlcm8ucG5nIiBhbHQ9InZnaS1ycGMgbG9nbyI+CiAgPC9kaXY+CiAgPGgxPiR7bCQoJCl9PC9oMT4KICA8cCBjbGFzcz0ic3VidGl0bGUiPkFQSSBSZWZlcmVuY2U8L3A+CiAgPHAgY2xhc3M9Im1ldGEiPlBvd2VyZWQgYnkgPGNvZGU+dmdpLXJwYzwvY29kZT4gKFR5cGVTY3JpcHQpICZtaWRkb3Q7IHNlcnZlciA8Y29kZT4ke2wkKFopfTwvY29kZT4ke1l9PC9wPgo8L2Rpdj4KJHtXfQo8Zm9vdGVyPgogIDxhIGhyZWY9Imh0dHBzOi8vdmdpLXJwYy5xdWVyeS5mYXJtIj5MZWFybiBtb3JlIGFib3V0IDxjb2RlPnZnaS1ycGM8L2NvZGU+PC9hPgogICZtaWRkb3Q7CiAgJmNvcHk7IDIwMjYgJiN4MUY2OUM7IDxhIGhyZWY9Imh0dHBzOi8vcXVlcnkuZmFybSI+UXVlcnkuRmFybSBMTEM8L2E+CjwvZm9vdGVyPgo8L2JvZHk+CjwvaHRtbD5gfXZhciBGTT0iaHR0cHM6Ly92Z2ktcnBjLXB5dGhvbi5xdWVyeS5mYXJtL2Fzc2V0cy9sb2dvLWhlcm8ucG5nIixOTT1gPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDQwMDs2MDA7NzAwJmZhbWlseT1KZXRCcmFpbnMrTW9ubzp3Z2h0QDQwMDs2MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPmAsVU09YDxzdHlsZT4KYm9keSB7IGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7IG1heC13aWR0aDogNjAwcHg7CiAgICAgICBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogNjBweCAyMHB4IDA7IGNvbG9yOiAjMmMyYzFlOyB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICBiYWNrZ3JvdW5kOiAjZmFmOGYwOyB9Ci5sb2dvIHsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQoubG9nbyBpbWcgeyB3aWR0aDogMTIwcHg7IGhlaWdodDogMTIwcHg7IGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDI0cHggcmdiYSgwLDAsMCwwLjEyKTsgfQpoMSB7IGNvbG9yOiAjMmQ1MDE2OyBtYXJnaW4tYm90dG9tOiA4cHg7IGZvbnQtd2VpZ2h0OiA3MDA7IH0KY29kZSB7IGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7IGJhY2tncm91bmQ6ICNmMGVjZTA7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogM3B4OyBmb250LXNpemU6IDAuOWVtOyBjb2xvcjogIzJjMmMxZTsgfQphIHsgY29sb3I6ICMyZDUwMTY7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQphOmhvdmVyIHsgY29sb3I6ICM0YTdjMjM7IH0KcCB7IGxpbmUtaGVpZ2h0OiAxLjc7IGNvbG9yOiAjNmI2YjVhOyB9Ci5kZXRhaWwgeyBtYXJnaW4tdG9wOiAxMnB4OyBwYWRkaW5nOiAxMnB4IDE2cHg7IGJhY2tncm91bmQ6ICNmMGVjZTA7CiAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDAuOWVtOyBjb2xvcjogIzZiNmI1YTsgfQpmb290ZXIgeyBtYXJnaW4tdG9wOiA0OHB4OyBwYWRkaW5nOiAyMHB4IDA7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjBlY2UwOwogICAgICAgICAgY29sb3I6ICM2YjZiNWE7IGZvbnQtc2l6ZTogMC44NWVtOyBsaW5lLWhlaWdodDogMS44OyB9CmZvb3RlciBhIHsgY29sb3I6ICMyZDUwMTY7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KZm9vdGVyIGE6aG92ZXIgeyBjb2xvcjogIzRhN2MyMzsgfQo8L3N0eWxlPmA7ZnVuY3Rpb24gQjUoKXtsZXQgJD1pbXBvcnQubWV0YS5yZXF1aXJlPz9nbG9iYWxUaGlzLnJlcXVpcmU/P251bGw7aWYoISQpdGhyb3cgRXJyb3IoIk9BdXRoIFBLQ0UgcmVxdWlyZXMgTm9kZS5qcyBvciBCdW4gKG5vZGU6Y3J5cHRvKS4iKTtyZXR1cm4gJChWUil9ZnVuY3Rpb24gd1IoKXtyZXR1cm4gak0oMzIpLnRvU3RyaW5nKCJiYXNlNjR1cmwiKX1mdW5jdGlvbiBTUigkKXtyZXR1cm4gUlIoInNoYTI1NiIpLnVwZGF0ZSgkLCJhc2NpaSIpLmRpZ2VzdCgpLnRvU3RyaW5nKCJiYXNlNjR1cmwiKX1mdW5jdGlvbiBCUigpe3JldHVybiBqTSgyNCkudG9TdHJpbmcoImJhc2U2NHVybCIpfWZ1bmN0aW9uIGtSKCQpe3JldHVybiBReigic2hhMjU2IiwkKS51cGRhdGUoIm9hdXRoLXBrY2Utc2Vzc2lvbiIpLmRpZ2VzdCgpfWZ1bmN0aW9uIElSKCQpe3JldHVybiAkLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfWZ1bmN0aW9uIF9SKCQpe2xldCBaPSQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7cmV0dXJuIEJ1ZmZlci5mcm9tKFosImJhc2U2NCIpfWZ1bmN0aW9uIFRSKCQsWixRLFgsSixXKXtsZXQgWT1KPz9NYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCksRz1CdWZmZXIuZnJvbSgkLCJ1dGYtOCIpLEg9QnVmZmVyLmZyb20oWiwidXRmLTgiKSx6PUJ1ZmZlci5mcm9tKFEsInV0Zi04IikscT1CdWZmZXIuZnJvbShXPz8iIiwidXRmLTgiKSxQPTExK0cubGVuZ3RoKzIrSC5sZW5ndGgrMit6Lmxlbmd0aCsyK3EubGVuZ3RoLFU9QnVmZmVyLmFsbG9jKFApLE09MDtVLndyaXRlVUludDgoRU0sTSksTSs9MSxVLndyaXRlQmlnVUludDY0TEUoQmlnSW50KFkpLE0pLE0rPTgsVS53cml0ZVVJbnQxNkxFKEcubGVuZ3RoLE0pLE0rPTIsRy5jb3B5KFUsTSksTSs9Ry5sZW5ndGgsVS53cml0ZVVJbnQxNkxFKEgubGVuZ3RoLE0pLE0rPTIsSC5jb3B5KFUsTSksTSs9SC5sZW5ndGgsVS53cml0ZVVJbnQxNkxFKHoubGVuZ3RoLE0pLE0rPTIsei5jb3B5KFUsTSksTSs9ei5sZW5ndGgsVS53cml0ZVVJbnQxNkxFKHEubGVuZ3RoLE0pLE0rPTIscS5jb3B5KFUsTSk7bGV0IEw9UXooInNoYTI1NiIsWCkudXBkYXRlKFUpLmRpZ2VzdCgpO3JldHVybiBJUihCdWZmZXIuY29uY2F0KFtVLExdKSl9ZnVuY3Rpb24gZ1IoJCxaLFE9d00pe2xldCBYO3RyeXtYPV9SKCQpfWNhdGNoe3Rocm93IEVycm9yKCJNYWxmb3JtZWQgc2Vzc2lvbiBjb29raWUiKX1pZihYLmxlbmd0aDw0OSl0aHJvdyBFcnJvcigiU2Vzc2lvbiBjb29raWUgdG9vIHNob3J0Iik7bGV0IEo9WC5zdWJhcnJheSgwLFgubGVuZ3RoLUNNKSxXPVguc3ViYXJyYXkoWC5sZW5ndGgtQ00pLFk9UXooInNoYTI1NiIsWikudXBkYXRlKEopLmRpZ2VzdCgpO2lmKCFWTShXLFkpKXRocm93IEVycm9yKCJTZXNzaW9uIGNvb2tpZSBzaWduYXR1cmUgbWlzbWF0Y2giKTtsZXQgRz1KLnJlYWRVSW50OCgwKTtpZihHIT09RU0pdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWQgc2Vzc2lvbiBjb29raWUgdmVyc2lvbjogJHtHfWApO2xldCBIPU51bWJlcihKLnJlYWRCaWdVSW50NjRMRSgxKSk7aWYoUT4wKXtsZXQgZz1NYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCktSDtpZihnPDB8fGc+USl0aHJvdyBFcnJvcihgU2Vzc2lvbiBjb29raWUgZXhwaXJlZCAoYWdlPSR7Z31zLCBtYXg9JHtRfXMpYCl9bGV0IHo9OSxxPUoucmVhZFVJbnQxNkxFKHopO3orPTI7bGV0IFA9Si5zdWJhcnJheSh6LHorcSkudG9TdHJpbmcoInV0Zi04Iik7eis9cTtsZXQgVT1KLnJlYWRVSW50MTZMRSh6KTt6Kz0yO2xldCBNPUouc3ViYXJyYXkoeix6K1UpLnRvU3RyaW5nKCJ1dGYtOCIpO3orPVU7bGV0IEw9Si5yZWFkVUludDE2TEUoeik7eis9MjtsZXQgRD1KLnN1YmFycmF5KHoseitMKS50b1N0cmluZygidXRmLTgiKTt6Kz1MO2xldCBSPUoucmVhZFVJbnQxNkxFKHopO3orPTI7bGV0IFY9Si5zdWJhcnJheSh6LHorUikudG9TdHJpbmcoInV0Zi04Iik7cmV0dXJue2NvZGVWZXJpZmllcjpQLHN0YXRlTm9uY2U6TSxvcmlnaW5hbFVybDpELHJldHVyblRvOlZ9fWZ1bmN0aW9uIHhSKCQpe2xldCBaPW51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoWilyZXR1cm4gWjtsZXQgWD1gJHskLnJlcGxhY2UoL1wvKyQvLCIiKX0vLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25gO3JldHVybiBaPWZldGNoKFgse3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDFlNCl9KS50aGVuKGFzeW5jKEopPT57aWYoIUoub2spdGhyb3cgRXJyb3IoYE9JREMgZGlzY292ZXJ5IEhUVFAgJHtKLnN0YXR1c31gKTtsZXQgVz1hd2FpdCBKLmpzb24oKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50OlcuYXV0aG9yaXphdGlvbl9lbmRwb2ludCx0b2tlbkVuZHBvaW50OlcudG9rZW5fZW5kcG9pbnR9fSkuY2F0Y2goKCk9PntyZXR1cm4gWj1udWxsLG51bGx9KSxafX1hc3luYyBmdW5jdGlvbiB2UigkLFosUSxYLEosVyxZKXtsZXQgRz1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6WixyZWRpcmVjdF91cmk6USxjb2RlX3ZlcmlmaWVyOlgsY2xpZW50X2lkOkp9KTtpZihXKUcuc2V0KCJjbGllbnRfc2VjcmV0IixXKTtsZXQgSDt0cnl7bGV0IE09YXdhaXQgZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0sYm9keTpHLnRvU3RyaW5nKCksc2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSk7aWYoIU0ub2spe2xldCBMPWF3YWl0IE0udGV4dCgpO3Rocm93IEVycm9yKGBIVFRQICR7TS5zdGF0dXN9OiAke0x9YCl9SD1hd2FpdCBNLmpzb24oKX1jYXRjaChNKXt0aHJvdyBFcnJvcihgVG9rZW4gZXhjaGFuZ2UgZmFpbGVkOiAke00ubWVzc2FnZT8/TX1gKX1sZXQgej1ILnJlZnJlc2hfdG9rZW4/P251bGwscT1ILmlkX3Rva2VuPz9udWxsO2lmKFkpe2xldCBNPUguaWRfdG9rZW47aWYoIU0pdGhyb3cgRXJyb3IoIlRva2VuIHJlc3BvbnNlIG1pc3NpbmcgaWRfdG9rZW4iKTt0cnl7bGV0IEw9TS5zcGxpdCgiLiIpO2lmKEwubGVuZ3RoPj0yKXtsZXQgRD00LUxbMV0ubGVuZ3RoJTQsUj1CdWZmZXIuZnJvbShMWzFdKyI9Ii5yZXBlYXQoRCU0KSwiYmFzZTY0IikudG9TdHJpbmcoInV0Zi04IiksVj1KU09OLnBhcnNlKFIpO2lmKFYuZXhwIT1udWxsKXtsZXQgZz1NYXRoLm1heChOdW1iZXIoVi5leHApLU1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKSw2MCk7cmV0dXJue3Rva2VuOk0sbWF4QWdlOmcscmVmcmVzaFRva2VuOnosaWRUb2tlbjpxfX19fWNhdGNoe31yZXR1cm57dG9rZW46TSxtYXhBZ2U6RE0scmVmcmVzaFRva2VuOnosaWRUb2tlbjpxfX1sZXQgUD1ILmFjY2Vzc190b2tlbjtpZighUCl0aHJvdyBFcnJvcigiVG9rZW4gcmVzcG9uc2UgbWlzc2luZyBhY2Nlc3NfdG9rZW4iKTtsZXQgVT1ILmV4cGlyZXNfaW4/P0RNO3JldHVybnt0b2tlbjpQLG1heEFnZTpOdW1iZXIoVSkscmVmcmVzaFRva2VuOnosaWRUb2tlbjpxfX1mdW5jdGlvbiBCTSgkLFope2xldCBRPSQ7aWYoUS5sZW5ndGg+T00pUT1RLnNsaWNlKDAsT00pO3RyeXtsZXQgWD1uZXcgVVJMKFEsImh0dHA6Ly9kdW1teSIpO2lmKFEuc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxRLnN0YXJ0c1dpdGgoImh0dHBzOi8vIil8fFEuc3RhcnRzV2l0aCgiLy8iKSlyZXR1cm4gWnx8Ii8iO2lmKFguaG9zdG5hbWUhPT0iZHVtbXkiKXJldHVybiBafHwiLyJ9Y2F0Y2h7cmV0dXJuIFp8fCIvIn1pZihaJiYhUS5zdGFydHNXaXRoKFopKXJldHVybiBafHwiLyI7cmV0dXJuIFF9ZnVuY3Rpb24geVIoJCl7cmV0dXJuICQ9PT0ibG9jYWxob3N0Inx8JD09PSIxMjcuMC4wLjEifHwkPT09Ils6OjFdIn1mdW5jdGlvbiBrTSgkLFope2xldCBRPVo/P1NNO2lmKCEkfHwkLmxlbmd0aD4yMDQ4KXJldHVybiIiO2xldCBYO3RyeXtYPW5ldyBVUkwoJCl9Y2F0Y2h7cmV0dXJuIiJ9aWYoWC5wcm90b2NvbCE9PSJodHRwOiImJlgucHJvdG9jb2whPT0iaHR0cHM6IilyZXR1cm4iIjtpZighWC5ob3N0bmFtZSlyZXR1cm4iIjtpZih5UihYLmhvc3RuYW1lKSYmWC5wcm90b2NvbD09PSJodHRwOiIpcmV0dXJuICQ7bGV0IEo9YCR7WC5wcm90b2NvbH0vLyR7WC5ob3N0bmFtZX1gO2lmKFEuaGFzKEopKXJldHVybiAkO2lmKFgucG9ydCl7bGV0IFc9YCR7WC5wcm90b2NvbH0vLyR7WC5ob3N0bmFtZX06JHtYLnBvcnR9YDtpZihRLmhhcyhXKSlyZXR1cm4gJH1yZXR1cm4iIn1mdW5jdGlvbiBYeigkKXtsZXQgWj0kLmhlYWRlcnMuZ2V0KCJDb29raWUiKSxRPW5ldyBNYXA7aWYoIVopcmV0dXJuIFE7Zm9yKGxldCBYIG9mIFouc3BsaXQoIjsiKSl7bGV0IEo9WC5pbmRleE9mKCI9Iik7aWYoSjwwKWNvbnRpbnVlO2xldCBXPVguc2xpY2UoMCxKKS50cmltKCksWT1YLnNsaWNlKEorMSkudHJpbSgpO1Euc2V0KFcsWSl9cmV0dXJuIFF9ZnVuY3Rpb24gaFIoJCl7aWYoISQpcmV0dXJuIG51bGw7dHJ5e2xldCBaPSQuc3BsaXQoIi4iKTtpZihaLmxlbmd0aDwyKXJldHVybiBudWxsO2xldCBRPSg0LVpbMV0ubGVuZ3RoJTQpJTQsWD1CdWZmZXIuZnJvbShaWzFdKyI9Ii5yZXBlYXQoUSksImJhc2U2NCIpLnRvU3RyaW5nKCJ1dGYtOCIpLEo9SlNPTi5wYXJzZShYKTtyZXR1cm4gSiYmdHlwZW9mIEo9PT0ib2JqZWN0Ij9KOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGJSKCQpe2xldCBaPWhSKCQpO2lmKCFaKXJldHVybiBudWxsO2xldCBRPXt9O2ZvcihsZXQgWCBvZiBFUilpZihaW1hdIT1udWxsKVFbWF09WltYXTtpZihPYmplY3Qua2V5cyhRKS5sZW5ndGg9PT0wKXJldHVybiBudWxsO3JldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShRKSwidXRmLTgiKS50b1N0cmluZygiYmFzZTY0dXJsIil9ZnVuY3Rpb24gdFcoJCxaLFEpe2xldCBYPWAkeyR9PSR7Wn1gO2lmKFEubWF4QWdlIT09dm9pZCAwKVgrPWA7IE1heC1BZ2U9JHtRLm1heEFnZX1gO2lmKFEucGF0aClYKz1gOyBQYXRoPSR7US5wYXRofWA7aWYoUS5zZWN1cmUpWCs9IjsgU2VjdXJlIjtpZihRLmh0dHBPbmx5KVgrPSI7IEh0dHBPbmx5IjtpZihRLnNhbWVTaXRlKVgrPWA7IFNhbWVTaXRlPSR7US5zYW1lU2l0ZX1gO3JldHVybiBYfWZ1bmN0aW9uICR6KCQpe3JldHVybiAkLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpfWZ1bmN0aW9uIG1SKCQsWixRKXtsZXQgWD1aP2A8ZGl2IGNsYXNzPSJkZXRhaWwiPiR7JHooWil9PC9kaXY+YDoiIjtyZXR1cm5gPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPkF1dGhlbnRpY2F0aW9uIEVycm9yIOKAlCB2Z2ktcnBjPC90aXRsZT4KJHtOTX0KJHtVTX0KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0ibG9nbyI+CiAgPGltZyBzcmM9IiR7Rk19IiBhbHQ9InZnaS1ycGMgbG9nbyI+CjwvZGl2Pgo8aDE+QXV0aGVudGljYXRpb24gRXJyb3I8L2gxPgo8cD4keyR6KCQpfTwvcD4KJHtYfQo8cD48YSBocmVmPSIkeyR6KFEpfSI+VHJ5IGFnYWluPC9hPjwvcD4KPGZvb3Rlcj4KICBQb3dlcmVkIGJ5IDxhIGhyZWY9Imh0dHBzOi8vdmdpLXJwYy5xdWVyeS5mYXJtIj48Y29kZT52Z2ktcnBjPC9jb2RlPjwvYT4KPC9mb290ZXI+CjwvYm9keT4KPC9odG1sPmB9ZnVuY3Rpb24gZlIoJCxaPWs1KXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oWCl7bGV0IFc9WHooWCkuZ2V0KFopO2lmKCFXKXRocm93IEVycm9yKCJObyBhdXRoIGNvb2tpZSIpO2xldCBZPW5ldyBIZWFkZXJzKFguaGVhZGVycyk7WS5zZXQoIkF1dGhvcml6YXRpb24iLGBCZWFyZXIgJHtXfWApO2xldCBHPW5ldyBSZXF1ZXN0KFgudXJsLHttZXRob2Q6WC5tZXRob2QsaGVhZGVyczpZfSk7cmV0dXJuICQoRyl9fWZ1bmN0aW9uIElNKCQsWil7aWYoJCYmJC5sZW5ndGg+MClyZXR1cm4gJC5qb2luKCIgIik7cmV0dXJuIFp9ZnVuY3Rpb24gX00oJCxaKXtsZXQgUT1rUigkLnNpZ25pbmdLZXkpLFg9eFIoJC5pc3N1ZXIpO3JldHVybntzZXNzaW9uS2V5OlEsb2lkY0Rpc2NvdmVyeTpYLGNsaWVudElkOiQuY2xpZW50SWQsY2xpZW50U2VjcmV0OiQuY2xpZW50U2VjcmV0LHVzZUlkVG9rZW46JC51c2VJZFRva2VuPz8hMSxwcmVmaXg6JC5wcmVmaXgsc2VjdXJlQ29va2llOiQuc2VjdXJlQ29va2llLHJlZGlyZWN0VXJpOiQucmVkaXJlY3RVcmksc2NvcGU6JC5zY29wZT8/Im9wZW5pZCBlbWFpbCIsYWxsb3dlZFJldHVybk9yaWdpbnM6JC5hbGxvd2VkUmV0dXJuT3JpZ2lucz8/U00sY29va2llQXV0aGVudGljYXRlOmZSKFopfX1mdW5jdGlvbiBwUigkKXtyZXR1cm4gJD09PSJsb2NhbGhvc3QifHwkPT09IjEyNy4wLjAuMSJ8fCQ9PT0iWzo6MV0ifWZ1bmN0aW9uIGNSKCQsWixRKXskLmFwcGVuZCgiVmFyeSIsIk9yaWdpbiIpO2xldCBYPVouaGVhZGVycy5nZXQoIk9yaWdpbiIpO2lmKCFYKXJldHVybjtsZXQgSjt0cnl7Sj1uZXcgVVJMKFgpfWNhdGNoe3JldHVybn1pZihKLnByb3RvY29sIT09Imh0dHA6IiYmSi5wcm90b2NvbCE9PSJodHRwczoiKXJldHVybjtpZighSi5ob3N0bmFtZSlyZXR1cm47aWYocFIoSi5ob3N0bmFtZSkmJkoucHJvdG9jb2w9PT0iaHR0cDoiKXskLnNldCgiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luIixYKTtyZXR1cm59aWYoUS5hbGxvd2VkUmV0dXJuT3JpZ2lucy5oYXMoWCkpJC5zZXQoIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiIsWCl9ZnVuY3Rpb24gZzYoJCxaLFEsWCl7cmV0dXJuICQuc2V0KCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uIiksbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHtlcnJvcjpRLGVycm9yX2Rlc2NyaXB0aW9uOlh9KSx7c3RhdHVzOlosaGVhZGVyczokfSl9YXN5bmMgZnVuY3Rpb24gVE0oJCxaKXtsZXQgUT1uZXcgSGVhZGVycztpZihjUihRLCQsWiksJC5tZXRob2Q9PT0iT1BUSU9OUyIpcmV0dXJuIFEuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIiwiUE9TVCwgT1BUSU9OUyIpLFEuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzIiwiQ29udGVudC1UeXBlIiksUS5zZXQoIkFjY2Vzcy1Db250cm9sLU1heC1BZ2UiLCIzMDAiKSxuZXcgUmVzcG9uc2UobnVsbCx7c3RhdHVzOjIwNCxoZWFkZXJzOlF9KTtpZigkLm1ldGhvZCE9PSJQT1NUIilyZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwse3N0YXR1czo0MDUsaGVhZGVyczpRfSk7aWYoKCQuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpPz8iIikuc3BsaXQoIjsiKVswXS50cmltKCkudG9Mb3dlckNhc2UoKSE9PSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKXJldHVybiBnNihRLDQxNSwiaW52YWxpZF9yZXF1ZXN0IiwiQ29udGVudC1UeXBlIG11c3QgYmUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7bGV0IEo7dHJ5e0o9YXdhaXQgJC50ZXh0KCl9Y2F0Y2h7cmV0dXJuIGc2KFEsNDAwLCJpbnZhbGlkX3JlcXVlc3QiLCJDb3VsZCBub3QgcmVhZCByZXF1ZXN0IGJvZHkiKX1sZXQgVzt0cnl7Vz1uZXcgVVJMU2VhcmNoUGFyYW1zKEopfWNhdGNoe3JldHVybiBnNihRLDQwMCwiaW52YWxpZF9yZXF1ZXN0IiwiQ291bGQgbm90IHBhcnNlIGZvcm0gYm9keSIpfWxldCBZPVcuZ2V0KCJncmFudF90eXBlIik/PyIiO2lmKCF1Ui5oYXMoWSkpcmV0dXJuIGc2KFEsNDAwLCJ1bnN1cHBvcnRlZF9ncmFudF90eXBlIiwiZ3JhbnRfdHlwZSBtdXN0IGJlIGF1dGhvcml6YXRpb25fY29kZSBvciByZWZyZXNoX3Rva2VuIik7bGV0IEc9Vy5nZXQoImNsaWVudF9pZCIpO2lmKEcmJkchPT1aLmNsaWVudElkKXJldHVybiBnNihRLDQwMCwiaW52YWxpZF9jbGllbnQiLCJjbGllbnRfaWQgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyZWQgY2xpZW50Iik7bGV0IEg9YXdhaXQgWi5vaWRjRGlzY292ZXJ5KCk7aWYoIUgpcmV0dXJuIGc2KFEsNTAyLCJzZXJ2ZXJfZXJyb3IiLCJBdXRob3JpemF0aW9uIHNlcnZlciBkaXNjb3ZlcnkgZmFpbGVkIik7bGV0IHo9bmV3IFVSTFNlYXJjaFBhcmFtcztpZih6LnNldCgiZ3JhbnRfdHlwZSIsWSksei5zZXQoImNsaWVudF9pZCIsWi5jbGllbnRJZCksWi5jbGllbnRTZWNyZXQpei5zZXQoImNsaWVudF9zZWNyZXQiLFouY2xpZW50U2VjcmV0KTtmb3IobGV0IE0gb2ZbImNvZGUiLCJjb2RlX3ZlcmlmaWVyIiwicmVkaXJlY3RfdXJpIiwicmVmcmVzaF90b2tlbiIsInNjb3BlIl0pe2xldCBMPVcuZ2V0KE0pO2lmKEwhPT1udWxsJiZMIT09IiIpei5zZXQoTSxMKX1sZXQgcTt0cnl7cT1hd2FpdCBmZXRjaChILnRva2VuRW5kcG9pbnQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9LGJvZHk6ei50b1N0cmluZygpLHNpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKE0pe3JldHVybiBnNihRLDUwMiwic2VydmVyX2Vycm9yIixgVXBzdHJlYW0gdG9rZW4gZW5kcG9pbnQgZmFpbGVkOiAke00/Lm1lc3NhZ2U/P019YCl9bGV0IFA9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgcS5hcnJheUJ1ZmZlcigpKSxVPXEuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpPz8iYXBwbGljYXRpb24vanNvbiI7cmV0dXJuIFEuc2V0KCJDb250ZW50LVR5cGUiLFUpLG5ldyBSZXNwb25zZShQLHtzdGF0dXM6cS5zdGF0dXMsaGVhZGVyczpRfSl9YXN5bmMgZnVuY3Rpb24gZ00oJCxaKXtsZXQgUT1uZXcgVVJMKCQudXJsKSxYPVoucHJlZml4fHwiLyI7ZnVuY3Rpb24gSihFLF8seSl7cmV0dXJuIG5ldyBSZXNwb25zZShtUihfLHksWCkse3N0YXR1czpFLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgifX0pfWxldCBXPVEuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKTtpZihXKXtsZXQgRT1RLnNlYXJjaFBhcmFtcy5nZXQoImVycm9yX2Rlc2NyaXB0aW9uIik/P1c7cmV0dXJuIEooNDAwLCJUaGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgcmV0dXJuZWQgYW4gZXJyb3IuIixFKX1sZXQgWT1RLnNlYXJjaFBhcmFtcy5nZXQoImNvZGUiKSxHPVEuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKTtpZighWXx8IUcpcmV0dXJuIEooNDAwLCJNaXNzaW5nIGF1dGhvcml6YXRpb24gY29kZSBvciBzdGF0ZSBwYXJhbWV0ZXIuIixudWxsKTtsZXQgej1YeigkKS5nZXQoWnopO2lmKCF6KXJldHVybiBKKDQwMCwiU2Vzc2lvbiBjb29raWUgbWlzc2luZyBvciBleHBpcmVkLiBQbGVhc2UgdHJ5IGFnYWluLiIsbnVsbCk7bGV0IHE7dHJ5e3E9Z1IoeixaLnNlc3Npb25LZXkpfWNhdGNoe3JldHVybiBKKDQwMCwiU2Vzc2lvbiBleHBpcmVkIG9yIGludmFsaWQuIFBsZWFzZSB0cnkgYWdhaW4uIixudWxsKX1sZXQgUD1CdWZmZXIuZnJvbShHLCJ1dGYtOCIpLFU9QnVmZmVyLmZyb20ocS5zdGF0ZU5vbmNlLCJ1dGYtOCIpO2lmKFAubGVuZ3RoIT09VS5sZW5ndGh8fCFWTShQLFUpKXJldHVybiBKKDQwMCwiU3RhdGUgbWlzbWF0Y2gg4oCUIHBvc3NpYmxlIENTUkYuIFBsZWFzZSB0cnkgYWdhaW4uIixudWxsKTtsZXQgTT1hd2FpdCBaLm9pZGNEaXNjb3ZlcnkoKTtpZighTSlyZXR1cm4gSig1MDIsIkNvdWxkIG5vdCByZWFjaCB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuIiwiT0lEQyBkaXNjb3ZlcnkgZmFpbGVkLiIpO2xldCBMO3RyeXtMPWF3YWl0IHZSKE0udG9rZW5FbmRwb2ludCxZLFoucmVkaXJlY3RVcmkscS5jb2RlVmVyaWZpZXIsWi5jbGllbnRJZCxaLmNsaWVudFNlY3JldCxaLnVzZUlkVG9rZW4pfWNhdGNoKEUpe3JldHVybiBKKDUwMiwiVG9rZW4gZXhjaGFuZ2Ugd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgZmFpbGVkLiIsU3RyaW5nKEUubWVzc2FnZT8/RSkpfWxldCBEPXRXKFp6LCIiLHttYXhBZ2U6MCxwYXRoOmAke1oucHJlZml4fS9fb2F1dGgvYCxzZWN1cmU6Wi5zZWN1cmVDb29raWUsaHR0cE9ubHk6ITAsc2FtZVNpdGU6IkxheCJ9KTtpZihxLnJldHVyblRvKXtsZXQgRT1xLnJldHVyblRvLmluY2x1ZGVzKCIjIik/IiYiOiIjIixfPVtgdG9rZW49JHtMLnRva2VufWBdO2lmKEwucmVmcmVzaFRva2VuKV8ucHVzaChgcmVmcmVzaF90b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudChMLnJlZnJlc2hUb2tlbil9YCk7aWYoXy5wdXNoKGB0b2tlbl9lbmRwb2ludD0ke2VuY29kZVVSSUNvbXBvbmVudChNLnRva2VuRW5kcG9pbnQpfWApLF8ucHVzaChgY2xpZW50X2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFouY2xpZW50SWQpfWApLFouY2xpZW50U2VjcmV0KV8ucHVzaChgY2xpZW50X3NlY3JldD0ke2VuY29kZVVSSUNvbXBvbmVudChaLmNsaWVudFNlY3JldCl9YCk7aWYoWi51c2VJZFRva2VuKV8ucHVzaCgidXNlX2lkX3Rva2VuPXRydWUiKTtsZXQgeT1gJHtxLnJldHVyblRvfSR7RX0ke18uam9pbigiJiIpfWA7cmV0dXJuIG5ldyBSZXNwb25zZShudWxsLHtzdGF0dXM6MzAyLGhlYWRlcnM6e0xvY2F0aW9uOnksIkNhY2hlLUNvbnRyb2wiOiJuby1jYWNoZSwgbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSIsIkNvbnRlbnQtVHlwZSI6InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIsIlNldC1Db29raWUiOkR9fSl9bGV0IFI9Qk0ocS5vcmlnaW5hbFVybCxaLnByZWZpeCksVj1aLnByZWZpeHx8Ii8iLGc9dFcoazUsTC50b2tlbix7bWF4QWdlOkwubWF4QWdlLHBhdGg6VixzZWN1cmU6Wi5zZWN1cmVDb29raWUsaHR0cE9ubHk6ITEsc2FtZVNpdGU6IkxheCJ9KSx3PW5ldyBIZWFkZXJzO3cuc2V0KCJMb2NhdGlvbiIsUiksdy5zZXQoIkNhY2hlLUNvbnRyb2wiLCJuby1jYWNoZSwgbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSIpLHcuc2V0KCJDb250ZW50LVR5cGUiLCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiKSx3LmFwcGVuZCgiU2V0LUNvb2tpZSIsZyksdy5hcHBlbmQoIlNldC1Db29raWUiLEQpO2xldCBUPWJSKEwuaWRUb2tlbj8/KFoudXNlSWRUb2tlbj9MLnRva2VuOm51bGwpKTtpZihUIT09bnVsbCl3LmFwcGVuZCgiU2V0LUNvb2tpZSIsdFcoUk0sVCx7bWF4QWdlOkwubWF4QWdlLHBhdGg6VixzZWN1cmU6Wi5zZWN1cmVDb29raWUsaHR0cE9ubHk6ITEsc2FtZVNpdGU6IkxheCJ9KSk7cmV0dXJuIG5ldyBSZXNwb25zZShudWxsLHtzdGF0dXM6MzAyLGhlYWRlcnM6d30pfWZ1bmN0aW9uIHhNKCQsWil7bGV0IFE9Wi5wcmVmaXh8fCIvIixYPXRXKGs1LCIiLHttYXhBZ2U6MCxwYXRoOlEsc2VjdXJlOlouc2VjdXJlQ29va2llLGh0dHBPbmx5OiExfSksSj10VyhSTSwiIix7bWF4QWdlOjAscGF0aDpRLHNlY3VyZTpaLnNlY3VyZUNvb2tpZSxodHRwT25seTohMX0pLFc9bmV3IEhlYWRlcnM7cmV0dXJuIFcuc2V0KCJMb2NhdGlvbiIsWi5wcmVmaXh8fCIvIiksVy5hcHBlbmQoIlNldC1Db29raWUiLFgpLFcuYXBwZW5kKCJTZXQtQ29va2llIixKKSxuZXcgUmVzcG9uc2UobnVsbCx7c3RhdHVzOjMwMixoZWFkZXJzOld9KX1hc3luYyBmdW5jdGlvbiB2TSgkLFope2lmKCEoJC5oZWFkZXJzLmdldCgiQWNjZXB0Iik/PyIiKS5pbmNsdWRlcygidGV4dC9odG1sIikpcmV0dXJuIG51bGw7bGV0IFg9YXdhaXQgWi5vaWRjRGlzY292ZXJ5KCk7aWYoIVgpcmV0dXJuIG51bGw7bGV0IEo9bmV3IFVSTCgkLnVybCksVz13UigpLFk9U1IoVyksRz1CUigpLEg9Si5wYXRobmFtZTtpZihKLnNlYXJjaClIPWAke0h9JHtKLnNlYXJjaH1gO0g9Qk0oSCxaLnByZWZpeCk7bGV0IHo9a00oSi5zZWFyY2hQYXJhbXMuZ2V0KCJfdmdpX3JldHVybl90byIpPz8iIixaLmFsbG93ZWRSZXR1cm5PcmlnaW5zKSxxPVRSKFcsRyxILFouc2Vzc2lvbktleSx2b2lkIDAseiksUD1uZXcgVVJMU2VhcmNoUGFyYW1zKHtyZXNwb25zZV90eXBlOiJjb2RlIixjbGllbnRfaWQ6Wi5jbGllbnRJZCxyZWRpcmVjdF91cmk6Wi5yZWRpcmVjdFVyaSxjb2RlX2NoYWxsZW5nZTpZLGNvZGVfY2hhbGxlbmdlX21ldGhvZDoiUzI1NiIsc3RhdGU6RyxzY29wZTpaLnNjb3BlfSk7aWYoeilQLnNldCgiYWNjZXNzX3R5cGUiLCJvZmZsaW5lIiksUC5zZXQoInByb21wdCIsImNvbnNlbnQiKTtsZXQgVT1gJHtYLmF1dGhvcml6YXRpb25FbmRwb2ludH0/JHtQLnRvU3RyaW5nKCl9YCxNPXRXKFp6LHEse21heEFnZTp3TSxwYXRoOmAke1oucHJlZml4fS9fb2F1dGgvYCxzZWN1cmU6Wi5zZWN1cmVDb29raWUsaHR0cE9ubHk6ITAsc2FtZVNpdGU6IkxheCJ9KTtyZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwse3N0YXR1czozMDIsaGVhZGVyczp7TG9jYXRpb246VSwiQ2FjaGUtQ29udHJvbCI6Im5vLWNhY2hlLCBuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlIiwiQ29udGVudC1UeXBlIjoidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiwiU2V0LUNvb2tpZSI6TX19KX1mdW5jdGlvbiB5TSgkLFope2xldCBRPW5ldyBVUkwoJC51cmwpLFg9a00oUS5zZWFyY2hQYXJhbXMuZ2V0KCJfdmdpX3JldHVybl90byIpPz8iIixaLmFsbG93ZWRSZXR1cm5PcmlnaW5zKTtpZighWClyZXR1cm4gbnVsbDtsZXQgVz1YeigkKS5nZXQoazUpO2lmKCFXKXJldHVybiBudWxsO3RyeXtsZXQgej1XLnNwbGl0KCIuIik7aWYoei5sZW5ndGg+PTIpe2xldCBxPUpTT04ucGFyc2UoQnVmZmVyLmZyb20oelsxXSwiYmFzZTY0dXJsIikudG9TdHJpbmcoInV0Zi04IikpO2lmKHR5cGVvZiBxLmV4cD09PSJudW1iZXIiJiZxLmV4cDw9TWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApKXJldHVybiBudWxsfX1jYXRjaHt9bGV0IFk9WC5pbmNsdWRlcygiIyIpPyImIjoiIyIsRz1bYHRva2VuPSR7V31gXSxIPWAke1h9JHtZfSR7Ry5qb2luKCImIil9YDtyZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwse3N0YXR1czozMDIsaGVhZGVyczp7TG9jYXRpb246SCwiQ2FjaGUtQ29udHJvbCI6Im5vLWNhY2hlLCBuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlIn19KX12YXIgVlI9Im5vZGU6Y3J5cHRvIixSUj0oJCk9PkI1KCkuY3JlYXRlSGFzaCgkKSxRej0oJCxaKT0+QjUoKS5jcmVhdGVIbWFjKCQsWiksak09KCQpPT5CNSgpLnJhbmRvbUJ5dGVzKCQpLFZNPSgkLFopPT5CNSgpLnRpbWluZ1NhZmVFcXVhbCgkLFopLFp6PSJfdmdpX29hdXRoX3Nlc3Npb24iLGs1PSJfdmdpX2F1dGgiLFJNPSJfdmdpX2lkZW50aXR5IixFUixFTT00LHdNPTYwMCxETT0zNjAwLE9NPTIwNDgsQ009MzIsU00sdVI7dmFyIGhNPU8oKCk9PntFUj1bInN1YiIsImVtYWlsIiwicHJlZmVycmVkX3VzZXJuYW1lIiwibmFtZSIsInBpY3R1cmUiXSxTTT1uZXcgU2V0KFsiaHR0cHM6Ly9jdXBvbGEucXVlcnktZmFybS5zZXJ2aWNlcyJdKTt1Uj1uZXcgU2V0KFsiYXV0aG9yaXphdGlvbl9jb2RlIiwicmVmcmVzaF90b2tlbiJdKX0pO3ZhciBiTT0iVkdJLVByb3h5LVByb29mIixKej0iVkdJLVByb3h5LVByb29mLVJlcXVpcmVkIjt2YXIgbU09KCk9Pnt9O2Z1bmN0aW9uIG5SKCQpe2xldCBaPSIiO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7USs9MzI3NjgpWis9U3RyaW5nLmZyb21DaGFyQ29kZSguLi4kLnN1YmFycmF5KFEsUSszMjc2OCkpO3JldHVybiBidG9hKFopLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPSskLywiIil9ZnVuY3Rpb24gb1IoJCl7bGV0IFo9JC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKSxRPVoubGVuZ3RoJTQ7aWYoUT09PTIpWis9Ij09IjtlbHNlIGlmKFE9PT0zKVorPSI9IjtlbHNlIGlmKFE9PT0xKXRocm93IEVycm9yKCJpbnZhbGlkIGJhc2U2NHVybCBsZW5ndGgiKTtsZXQgWD1hdG9iKFopLEo9bmV3IFVpbnQ4QXJyYXkoWC5sZW5ndGgpO2ZvcihsZXQgVz0wO1c8WC5sZW5ndGg7VysrKUpbV109WC5jaGFyQ29kZUF0KFcpO3JldHVybiBKfWZ1bmN0aW9uIGNNKCQsWixRLFgsSixXKXtpZihaLmxlbmd0aCE9PW9YKXRocm93IEVycm9yKGBzZXNzaW9uX2lkIG11c3QgYmUgJHtvWH0gYnl0ZXMsIGdvdCAke1oubGVuZ3RofWApO2xldCBZPWxSLmVuY29kZSgkKTtpZihZLmxlbmd0aD4yNTUpdGhyb3cgRXJyb3IoYHNlcnZlcl9pZCB0b28gbG9uZyAoJHtZLmxlbmd0aH0gYnl0ZXMpOyBtYXggMjU1YCk7bGV0IEc9bmV3IFVpbnQ4QXJyYXkoXzUrWS5sZW5ndGgrb1grcE0pLEg9bmV3IERhdGFWaWV3KEcuYnVmZmVyKSx6PTA7SC5zZXRCaWdVaW50NjQoeixCaWdJbnQoVz8/TWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApKSwhMCkseis9OCxHW3pdPVkubGVuZ3RoLHorPTEsRy5zZXQoWSx6KSx6Kz1ZLmxlbmd0aCxHLnNldChaLHopLHorPW9YLEguc2V0QmlnVWludDY0KHosQmlnSW50KFEpLCEwKTtsZXQgcT1fMShHLFgse2FhZDpKLHZlcnNpb246dU19KTtyZXR1cm4gblIocSl9ZnVuY3Rpb24gV3ooJCxaLFEpe2xldCBYO3RyeXtYPW9SKCQpfWNhdGNoe3Rocm93IG5ldyBCOCgibWFsZm9ybWVkIHNlc3Npb24gdG9rZW4iKX1sZXQgSjt0cnl7Sj1UMShYLFose2FhZDpRLHZlcnNpb246dU19KX1jYXRjaChVKXtpZihVIGluc3RhbmNlb2YgblgpdGhyb3cgbmV3IEI4KCJzZXNzaW9uIHRva2VuIHZlcmlmaWNhdGlvbiBmYWlsZWQiKTt0aHJvdyBVfWlmKEoubGVuZ3RoPF81KXRocm93IG5ldyBCOCgibWFsZm9ybWVkIHNlc3Npb24gdG9rZW4iKTtsZXQgVz1uZXcgRGF0YVZpZXcoSi5idWZmZXIsSi5ieXRlT2Zmc2V0LEouYnl0ZUxlbmd0aCksWT1KWzhdLEc9XzUrWSxIPUcrb1grcE07aWYoSi5sZW5ndGghPT1IKXRocm93IG5ldyBCOCgibWFsZm9ybWVkIHNlc3Npb24gdG9rZW4iKTtsZXQgej1kUi5kZWNvZGUoSi5zdWJhcnJheShfNSxHKSkscT1uZXcgVWludDhBcnJheShvWCk7cS5zZXQoSi5zdWJhcnJheShHLEcrb1gpKTtsZXQgUD1OdW1iZXIoVy5nZXRCaWdVaW50NjQoRytvWCwhMCkpO3JldHVybntzZXJ2ZXJJZDp6LHNlc3Npb25JZDpxLGV4cGlyZXNBdDpQfX1jbGFzcyBsTXtsb2NrZWQ9ITE7d2FpdGVycz1bXTthc3luYyBhY3F1aXJlKCl7aWYoIXRoaXMubG9ja2VkKXJldHVybiB0aGlzLmxvY2tlZD0hMCwoKT0+dGhpcy5yZWxlYXNlKCk7cmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKCgkKT0+dGhpcy53YWl0ZXJzLnB1c2goJCkpLHRoaXMubG9ja2VkPSEwLCgpPT50aGlzLnJlbGVhc2UoKX1yZWxlYXNlKCl7bGV0ICQ9dGhpcy53YWl0ZXJzLnNoaWZ0KCk7aWYoJCkkKCk7ZWxzZSB0aGlzLmxvY2tlZD0hMX19ZnVuY3Rpb24gVDUoJCxaLFEsWCl7bGV0IEo9JD9gJHtaPz8iIn1ceDAwJHtRPz8iIn1gOiJceDAwYW5vbnltb3VzIjtyZXR1cm4gWD9gJHtKfVx4MDAke1h9YDpKfWZ1bmN0aW9uIGVXKCQpe2xldCBaPSIiO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7USsrKVorPSRbUV0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4gWn1mdW5jdGlvbiBmTSgkLFope2lmKCQubGVuZ3RoIT09Wi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBRPTA7UTwkLmxlbmd0aDtRKyspaWYoJFtRXSE9PVpbUV0pcmV0dXJuITE7cmV0dXJuITB9Y2xhc3MgWXp7ZGVmYXVsdFR0bDtlbnRyaWVzPW5ldyBNYXA7X2RyYWluaW5nPSExO2NvbnN0cnVjdG9yKCQpe3RoaXMuZGVmYXVsdFR0bD0kfWdldCBkcmFpbmluZygpe3JldHVybiB0aGlzLl9kcmFpbmluZ31zZXREcmFpbmluZygkKXt0aGlzLl9kcmFpbmluZz0kfW9wZW4oJCxaLFEpe2lmKHRoaXMuX2RyYWluaW5nKXRocm93IG5ldyBzWSgic2VydmVyIGlzIGRyYWluaW5nIOKAlCBuZXcgc2Vzc2lvbnMgYXJlIHJlamVjdGVkIik7bGV0IFg9Wj8/dGhpcy5kZWZhdWx0VHRsLEo9TWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApK1gsVz1oVyhvWCksWT1lVyhXKTtyZXR1cm4gdGhpcy5lbnRyaWVzLnNldChZLHtpZDpXLGVudHJ5OntzdGF0ZTokLGV4cGlyZXNBdDpKLHByaW5jaXBhbEtleTpRLGxvY2s6bmV3IGxNfX0pLHtzZXNzaW9uSWQ6VyxleHBpcmVzQXQ6Sn19Z2V0KCQsWil7bGV0IFE9ZVcoJCksWD10aGlzLmVudHJpZXMuZ2V0KFEpO2lmKCFYKXJldHVybiBudWxsO2lmKCFmTShYLmlkLCQpKXJldHVybiBudWxsO2xldCBKPU1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTtpZihYLmVudHJ5LmV4cGlyZXNBdDxKKXJldHVybiB0aGlzLmVudHJpZXMuZGVsZXRlKFEpLEk1KFguZW50cnkuc3RhdGUpLG51bGw7aWYoWC5lbnRyeS5wcmluY2lwYWxLZXkhPT1aKXJldHVybiBudWxsO3JldHVybiBYLmVudHJ5fWNsb3NlKCQpe2xldCBaPWVXKCQpLFE9dGhpcy5lbnRyaWVzLmdldChaKTtpZighUXx8IWZNKFEuaWQsJCkpcmV0dXJuITE7cmV0dXJuIHRoaXMuZW50cmllcy5kZWxldGUoWiksSTUoUS5lbnRyeS5zdGF0ZSksITB9ZHJhaW5FeHBpcmVkKCQpe2xldCBaPSQ/P01hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKSxRPTA7Zm9yKGxldFtYLEpdb2YgdGhpcy5lbnRyaWVzKWlmKEouZW50cnkuZXhwaXJlc0F0PFopdGhpcy5lbnRyaWVzLmRlbGV0ZShYKSxJNShKLmVudHJ5LnN0YXRlKSxRKys7cmV0dXJuIFF9c2h1dGRvd24oKXtsZXQgJD1BcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSk7dGhpcy5lbnRyaWVzLmNsZWFyKCk7Zm9yKGxldCBaIG9mICQpSTUoWi5lbnRyeS5zdGF0ZSl9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5lbnRyaWVzLnNpemV9fWZ1bmN0aW9uIEk1KCQpe2xldCBaPSQ/LmNsb3NlO2lmKHR5cGVvZiBaIT09ImZ1bmN0aW9uIilyZXR1cm47dHJ5e1ouY2FsbCgkKX1jYXRjaHt9fWZ1bmN0aW9uIGRNKCQsWj0xMDAwKXtsZXQgUT1zZXRJbnRlcnZhbCgoKT0+e3RyeXskLmRyYWluRXhwaXJlZCgpfWNhdGNoe319LFopO3JldHVybiBRLnVucmVmPy4oKSwoKT0+Y2xlYXJJbnRlcnZhbChRKX1mdW5jdGlvbiBuTSgkLFope3JldHVybntkcmFpbjooKT0+JC5zZXREcmFpbmluZyghMCksc2h1dGRvd246KCk9PntaPy4oKSwkLnNodXRkb3duKCl9LGlzRHJhaW5pbmc6KCk9PiQuZHJhaW5pbmcsc2V0RHJhaW5pbmc6KFEpPT4kLnNldERyYWluaW5nKFEpfX12YXIgbFIsZFIsdU09MSxvWD0xMixfNT05LHBNPTg7dmFyIG9NPU8oKCk9PntmNygpO0haKCk7UjYoKTtsUj1uZXcgVGV4dEVuY29kZXIsZFI9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2ZhdGFsOiExfSl9KTt2YXIgeTE7dmFyIEd6PU8oKCk9Pnt5MT17c2VyaWFsaXplKCQpe3JldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoJCwoWixRKT0+dHlwZW9mIFE9PT0iYmlnaW50Ij9gX19iaWdpbnRfXzoke1F9YDpRKSl9LGRlc2VyaWFsaXplKCQpe3JldHVybiBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSgkKSwoWixRKT0+dHlwZW9mIFE9PT0ic3RyaW5nIiYmUS5zdGFydHNXaXRoKCJfX2JpZ2ludF9fOiIpP0JpZ0ludChRLnNsaWNlKDExKSk6USl9fX0pO2FzeW5jIGZ1bmN0aW9uIGlSKCQsWil7aWYoWj09bnVsbClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgJC5hcnJheUJ1ZmZlcigpKTtsZXQgUT0kLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpO2lmKFEhPW51bGwpe2xldCBIPU51bWJlcihRKTtpZihOdW1iZXIuaXNGaW5pdGUoSCkmJkg+Wil0aHJvdyBuZXcgdyQoIlJlcXVlc3QgYm9keSB0b28gbGFyZ2UiLDQxMyl9aWYoISQuYm9keSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXk7bGV0IFg9JC5ib2R5LmdldFJlYWRlcigpLEo9W10sVz0wO3RyeXt3aGlsZSghMCl7bGV0e2RvbmU6SCx2YWx1ZTp6fT1hd2FpdCBYLnJlYWQoKTtpZihIKWJyZWFrO2lmKFcrPXouYnl0ZUxlbmd0aCxXPlopdGhyb3cgYXdhaXQgWC5jYW5jZWwoInJlcXVlc3QgYm9keSBsaW1pdCBleGNlZWRlZCIpLG5ldyB3JCgiUmVxdWVzdCBib2R5IHRvbyBsYXJnZSIsNDEzKTtKLnB1c2goeil9fWZpbmFsbHl7WC5yZWxlYXNlTG9jaygpfWxldCBZPW5ldyBVaW50OEFycmF5KFcpLEc9MDtmb3IobGV0IEggb2YgSilZLnNldChILEcpLEcrPUguYnl0ZUxlbmd0aDtyZXR1cm4gWX1mdW5jdGlvbiByUigkKXtsZXQgWj0kLmhlYWRlcnMuZ2V0KCJjb29raWUiKTtpZighWilyZXR1cm4gc1I7bGV0IFE9bmV3IE1hcDtmb3IobGV0IFggb2YgWi5zcGxpdCgiOyIpKXtsZXQgSj1YLnRyaW0oKTtpZighSiljb250aW51ZTtsZXQgVz1KLmluZGV4T2YoIj0iKTtpZihXPDApY29udGludWU7US5zZXQoSi5zbGljZSgwLFcpLnRyaW0oKSxKLnNsaWNlKFcrMSkudHJpbSgpKX1yZXR1cm4gUX1mdW5jdGlvbiBLeigkLFope2xldCBRPVE3KCQpPyQuYmluZGluZ3MoKTpuZXcgTWFwKFtbJC5uYW1lLHtuYW1lOiQubmFtZSxwcm90b2NvbDokLHZlcnNpb25FeGVtcHQ6ITF9XV0pO2lmKCFRNygkKSlRLnNldCh1Wix7bmFtZTp1Wixwcm90b2NvbDp6NSh7bGlzdEJpbmRpbmdzOigpPT5RLGhhc2hGb3I6KEIpPT57bGV0IHY9US5nZXQoQik7cmV0dXJuIHY/Y1codik6UHJvbWlzZS5yZXNvbHZlKCIiKX0sc2VydmVySWQ6KCk9PlYsc2VydmVyVmVyc2lvbjooKT0+IiJ9KSx2ZXJzaW9uRXhlbXB0OiEwfSk7bGV0IFg9Wy4uLlEua2V5cygpXS5zb3J0KCk7Zm9yKGxldCBCIG9mIFgpdHJ5e3hXKEIsITApfWNhdGNoKHYpe3Rocm93IEVycm9yKGBDYW5ub3Qgc2VydmUgcHJvdG9jb2wgJyR7Qn0nIG92ZXIgSFRUUDogJHt2Lm1lc3NhZ2V9YCl9bGV0IEo9Wy4uLlEudmFsdWVzKCldWzBdO2lmKCFKKXRocm93IEVycm9yKCJjcmVhdGVIdHRwSGFuZGxlciB3YXMgZ2l2ZW4gYSBzZXJ2ZXIgdGhhdCBob3N0cyBubyBwcm90b2NvbHMuIik7bGV0IFc9Si5wcm90b2NvbCxZPShaPy5wcmVmaXg/PyIiKS5yZXBsYWNlKC9cLyskLywiIiksRz1aPy50b2tlbktleT8/aFcoMzIpLEg9Wj8udG9rZW5UdGw/PzM2MDAsej1aPy5jb3JzT3JpZ2lucyxxPVo/LmNvcnNNYXhBZ2U9PT12b2lkIDA/MzAwOlouY29yc01heEFnZSxQPXQkKGJHKFo/Lm1heFJlcXVlc3RCeXRlcywibWF4UmVxdWVzdEJ5dGVzIiksYkcoWj8uaG9zdGluZ01heFJlcXVlc3RCeXRlcywiaG9zdGluZ01heFJlcXVlc3RCeXRlcyIpKSxVPVo/Lm1heERlY29tcHJlc3NlZFJlcXVlc3RCeXRlcyxNPVA9PW51bGw/VTpVPT1udWxsP1A6TWF0aC5taW4oUCxVKSxMPXQkKFdRKFo/Lm1heFJlc3BvbnNlQnl0ZXM/P1o/Lm1heFN0cmVhbVJlc3BvbnNlQnl0ZXMsIm1heFJlc3BvbnNlQnl0ZXMiKSxXUShaPy5ob3N0aW5nTWF4UmVzcG9uc2VCeXRlcywiaG9zdGluZ01heFJlc3BvbnNlQnl0ZXMiKSksRD1XUShaPy5wcmVmZXJyZWRSZXNwb25zZUJ5dGVzLCJwcmVmZXJyZWRSZXNwb25zZUJ5dGVzIiksUj1aPy5tYXhFeHRlcm5hbGl6ZWRSZXNwb25zZUJ5dGVzLFY9Wj8uc2VydmVySWQ/P2NyeXB0by5yYW5kb21VVUlEKCkucmVwbGFjZSgvLS9nLCIiKS5zbGljZSgwLDEyKSxnPVo/LmF1dGhlbnRpY2F0ZSx3PVo/Lm9hdXRoUmVzb3VyY2VNZXRhZGF0YSxUPVsuLi5aPy5wZWVySWRlbnRpdHlQcm92aWRlcnM/P1tdXSxFPVo/LnBlZXJBdXRoZW50aWNhdGlvblBvbGljeSxfPVo/LnBlZXJSZXNvbHV0aW9uVGltZW91dE1zPz81MDAwO2lmKCFOdW1iZXIuaXNGaW5pdGUoXyl8fF88PTApdGhyb3cgVHlwZUVycm9yKCJwZWVyUmVzb2x1dGlvblRpbWVvdXRNcyBtdXN0IGJlIHBvc2l0aXZlIik7bGV0IHk9Wj8ucGVlclByb3ZpZGVyQ29uY3VycmVuY3k/PzY0O2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHkpfHx5PD0wKXRocm93IFR5cGVFcnJvcigicGVlclByb3ZpZGVyQ29uY3VycmVuY3kgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTtsZXQgaD0wLHM9bmV3IFNldDtmb3IobGV0IEIgb2YgVCl7aWYoIUI/LnByb3ZpZGVyfHxzLmhhcyhCLnByb3ZpZGVyKSl0aHJvdyBUeXBlRXJyb3IoInBlZXIgaWRlbnRpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSB1bmlxdWUgbm9uLWVtcHR5IG5hbWVzIik7cy5hZGQoQi5wcm92aWRlcil9aWYoeTxULmxlbmd0aCl0aHJvdyBUeXBlRXJyb3IoInBlZXJQcm92aWRlckNvbmN1cnJlbmN5IG11c3QgYmUgYXQgbGVhc3QgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgZmFub3V0Iik7bGV0IGY9bnVsbDtpZihnJiZ3Py5jbGllbnRJZCl7bGV0IHY9bmV3IFVSTCh3LnJlc291cmNlKS5wcm90b2NvbD09PSJodHRwczoiLGk9YCR7dy5yZXNvdXJjZS5yZXBsYWNlKC9cLyskLywiIil9JHtZfS9fb2F1dGgvY2FsbGJhY2tgLHcwPXcuYXV0aG9yaXphdGlvblNlcnZlcnNbMF07aWYodzApe2xldCBMMD1nO2Y9X00oe3NpZ25pbmdLZXk6Ryxpc3N1ZXI6dzAsY2xpZW50SWQ6dy5jbGllbnRJZCxjbGllbnRTZWNyZXQ6dy5jbGllbnRTZWNyZXQsdXNlSWRUb2tlbjp3LnVzZUlkVG9rZW5Bc0JlYXJlcixwcmVmaXg6WSxzZWN1cmVDb29raWU6dixyZWRpcmVjdFVyaTppLHNjb3BlOklNKHcuc2NvcGVzU3VwcG9ydGVkLFo/Lm9hdXRoUGtjZVNjb3BlKSxhbGxvd2VkUmV0dXJuT3JpZ2luczpaPy5hbGxvd2VkUmV0dXJuT3JpZ2luc30sTDApLGc9RTEoTDAsZi5jb29raWVBdXRoZW50aWNhdGUpfX1sZXQgYz1XLmdldE1ldGhvZHMoKSxvPVcucHJvdG9jb2xWZXJzaW9ufHxaPy5wcm90b2NvbFZlcnNpb258fCIiO2Z1bmN0aW9uIGUoQix2KXtsZXQgaT12LmdldChSSik7aWYoIWkpcmV0dXJuO2lmKGkhPT1CKXRocm93IG5ldyBUOChgUHJvdG9jb2wgbWlzbWF0Y2g6IHRoZSByZXF1ZXN0IHBhdGggcmVzb2x2ZWQgdG8gJyR7Qn0nIGJ1dCB0aGUgQXJyb3cgSVBDIGN1c3RvbV9tZXRhZGF0YSAndmdpX3JwYy5wcm90b2NvbCcgc2F5cyAnJHtpfScuIFRoZXNlIG11c3QgYWdyZWUuYCl9ZnVuY3Rpb24gbShCLHYpe2xldCBpPUIucHJvdG9jb2wucHJvdG9jb2xWZXJzaW9uUGFydHM7aWYoaT09PW51bGwpcmV0dXJuO2xldCB3MD1CLnByb3RvY29sLnByb3RvY29sVmVyc2lvbixMMD12Py5nZXQoU0opO2lmKEwwPT09dm9pZCAwKXRocm93IG5ldyB4WChgVkdJIGNsaWVudC93b3JrZXIgcHJvdG9jb2xfdmVyc2lvbiBtaXNtYXRjaC4KICBDbGllbnQ6IDxub3QgZGVjbGFyZWQ+CiAgU2VydmVyOiAke3cwfQogIERpcmVjdGlvbjogdGhlIGNsaWVudCBkaWQgbm90IHNlbmQgYSB2Z2lfcnBjLnByb3RvY29sX3ZlcnNpb24gbWV0YWRhdGEga2V5LiBUaGlzIGlzIGVpdGhlciBhIHZnaS1ycGMgZnJhbWV3b3JrIGJ1ZyBvciBhIG5vbi1WR0kgY2xpZW50IGNvbm5lY3RpbmcgdG8gYSBWR0kgd29ya2VyLmApO2xldCB0MDt0cnl7dDA9VlcoTDApfWNhdGNoe3Rocm93IG5ldyB4WChgVkdJIGNsaWVudC93b3JrZXIgcHJvdG9jb2xfdmVyc2lvbiBtaXNtYXRjaC4KICBDbGllbnQ6ICR7TDB9CiAgU2VydmVyOiAke3cwfQogIERpcmVjdGlvbjogY2xpZW50IHNlbnQgYSBtYWxmb3JtZWQgcHJvdG9jb2xfdmVyc2lvbi4gRXhwZWN0ZWQgY2Fub25pY2FsIHNlbXZlciBNQUpPUi5NSU5PUi5QQVRDSC5gKX1pZih0MFswXT09PWlbMF0mJnQwWzFdPT09aVsxXSlyZXR1cm47bGV0IG9aPXQwWzBdPGlbMF18fHQwWzBdPT09aVswXSYmdDBbMV08aVsxXT9gY2xpZW50IGlzIHRvbyBvbGQ7IHVwZ3JhZGUgdGhlIFZHSSBleHRlbnNpb24vY2xpZW50IHRvIGEgdmVyc2lvbiBzdXBwb3J0aW5nIHByb3RvY29sX3ZlcnNpb24gJHt3MH0uYDpgc2VydmVyIGlzIHRvbyBvbGQ7IHVwZ3JhZGUgdGhlIFZHSSB3b3JrZXIgdG8gYSB2ZXJzaW9uIHN1cHBvcnRpbmcgcHJvdG9jb2xfdmVyc2lvbiAke0wwfS5gO3Rocm93IG5ldyB4WChgVkdJIGNsaWVudC93b3JrZXIgcHJvdG9jb2xfdmVyc2lvbiBtaXNtYXRjaC4KICBDbGllbnQ6ICR7TDB9CiAgU2VydmVyOiAke3cwfQogIERpcmVjdGlvbjogJHtvWn1gKX1sZXQgdT1aPy5jb21wcmVzc2lvbkxldmVsPT09dm9pZCAwP0NOOlouY29tcHJlc3Npb25MZXZlbCxGMD1TVSgpLEIwPVo/LnN0YXRlU2VyaWFsaXplcj8/eTEscD1aPy5kaXNwYXRjaEhvb2sseDA9Wj8ub25TZXJ2ZVN0YXJ0Pz9udWxsLGQwPSExLG4wPW51bGwsUz1aPy5fdHJhbnNwb3J0S2luZD8/Z1EuSFRUUDthc3luYyBmdW5jdGlvbiBkKEIpe2lmKGQwKXJldHVybjtpZihuMCl7YXdhaXQgbjA7cmV0dXJufWlmKCF4MCl7ZDA9ITA7cmV0dXJufWxldCB2PVByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PngwKEIpKTtuMD12O3RyeXthd2FpdCB2LGQwPSEwfWZpbmFsbHl7aWYobjA9PT12KW4wPW51bGx9fWxldCBrMD1aPy5lbmFibGVMYW5kaW5nUGFnZT8/ITAsWDA9Wj8uZW5hYmxlRGVzY3JpYmVQYWdlPz8hMCxoMD1aPy5lbmFibGVOb3RGb3VuZFBhZ2U/PyEwLEkwPVo/LnByb3RvY29sTmFtZT8/Vy5uYW1lLHYwPVo/LnJlcG9zaXRvcnlVcmw/P251bGwsTiQ9Wj8uZXh0cmFSb3V0ZXM/P251bGwsbFo9ZiE9bnVsbCxCJD1rMD9NTShJMCxWLFgwP2Ake1l9L2Rlc2NyaWJlYDpudWxsLHYwKTpudWxsLGRaPVgwP0FNKEkwLFYsYyx2MCk6bnVsbCxIOD1oMD9MTShZLEkwKTpudWxsLFBRPVo/LmV4dGVybmFsTG9jYXRpb24sZjg9Wj8udXBsb2FkVXJsUHJvdmlkZXIselk9Wj8ubWF4VXBsb2FkQnl0ZXMsdTg9Wj8ucHJveHlQcm9vZlJlcXVpcmVkPT09ITAsZjY9Wy4uLnU4P1tiTV06W10sLi4uWj8ucHJveHlBdXRoSGVhZGVycz8/W11dLG5aPVQ3KGY2KSxrJD1aPy5lbmFibGVTdGlja3k9PT0hMCxJJD1aPy5zdGlja3lEZWZhdWx0VHRsPz8zMDAsTFg9ayQ/T2JqZWN0LmVudHJpZXMoWj8uc3RpY2t5RWNob0hlYWRlcnM/P3t9KTpbXSxtUT1rJD9uZXcgWXooSSQpOm51bGwsbkE9bVE/ZE0obVEpOm51bGw7aWYoWj8uX29uU3RpY2t5SGFuZGxlJiZtUSlaLl9vblN0aWNreUhhbmRsZShuTShtUSxuQT8/dm9pZCAwKSk7bGV0IG9BPXUhPW51bGwmJnNIKCk7ZnVuY3Rpb24gcTkoQil7aWYodT09bnVsbClyZXR1cm4hMTtyZXR1cm4gQj09PSJ6c3RkIj9vQTohMH1mdW5jdGlvbiBzQShCKXtyZXR1cm4hMH1sZXQgaUE9ckguZmlsdGVyKChCKT0+c0EoQikmJnE5KEIpKTtmdW5jdGlvbiBrWihCLHY9ITEpe2lmKEIuc2V0KGFILGlBLmpvaW4oIiwgIikpLFAhPW51bGwpQi5zZXQoIlZHSS1NYXgtUmVxdWVzdC1CeXRlcyIsU3RyaW5nKFApKTtpZihMIT1udWxsKUIuc2V0KCJWR0ktTWF4LVJlc3BvbnNlLUJ5dGVzIixTdHJpbmcoTCkpO2lmKEIuc2V0KGhHLCJ0cnVlIiksUiE9bnVsbClCLnNldCgiVkdJLU1heC1FeHRlcm5hbGl6ZWQtUmVzcG9uc2UtQnl0ZXMiLFN0cmluZyhSKSk7aWYoQi5zZXQoIlZHSS1FeHRlcm5hbGl6YXRpb24tRW5hYmxlZCIsUFE/LnN0b3JhZ2U/InRydWUiOiJmYWxzZSIpLGY4KXtpZihCLnNldCgiVkdJLVVwbG9hZC1VUkwtU3VwcG9ydCIsInRydWUiKSx6WSE9bnVsbClCLnNldCgiVkdJLU1heC1VcGxvYWQtQnl0ZXMiLFN0cmluZyh6WSkpfWlmKHU4KUIuc2V0KEp6LCJ0cnVlIik7aWYoayQpe2lmKEIuc2V0KGVILCJ0cnVlIiksQi5zZXQoJDcsU3RyaW5nKE1hdGguZmxvb3IoSSQpKSksTFgubGVuZ3RoPjApQi5zZXQoWjcsTFgubWFwKChbaV0pPT5pKS5qb2luKCIsICIpKX1pZih2KXtpZighQi5oYXMoIkNhY2hlLUNvbnRyb2wiKSlCLnNldCgiQ2FjaGUtQ29udHJvbCIsInB1YmxpYywgbWF4LWFnZT0zMDAiKX19bGV0IHJBPXt0b2tlbktleTpHLHRva2VuVHRsOkgsc2VydmVySWQ6Vixwcm90b2NvbE5hbWU6Si5uYW1lLG1heFJlc3BvbnNlQnl0ZXM6TCxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOkQsbWF4RXh0ZXJuYWxpemVkUmVzcG9uc2VCeXRlczpSLHN0YXRlU2VyaWFsaXplcjpCMCxleHRlcm5hbExvY2F0aW9uOlBRLGtpbmQ6UyxjYWxsU3RhdGVDYWNoZUVudHJpZXM6Wj8uY2FsbFN0YXRlQ2FjaGVFbnRyaWVzfSxhQT1bIldXVy1BdXRoZW50aWNhdGUiLGxHLElKLEJKLCJWR0ktTWF4LVJlc3BvbnNlLUJ5dGVzIiwiVkdJLU1heC1FeHRlcm5hbGl6ZWQtUmVzcG9uc2UtQnl0ZXMiLCJWR0ktRXh0ZXJuYWxpemF0aW9uLUVuYWJsZWQiLGhHLGFILC4uLlAhPW51bGw/WyJWR0ktTWF4LVJlcXVlc3QtQnl0ZXMiXTpbXSwuLi5mOD9bIlZHSS1VcGxvYWQtVVJMLVN1cHBvcnQiLC4uLnpZIT1udWxsP1siVkdJLU1heC1VcGxvYWQtQnl0ZXMiXTpbXV06W10sLi4udTg/W0p6XTpbXSwuLi5rJD9bZUgsJDcsLi4uTFgubGVuZ3RoPjA/W1o3XTpbXSxmWCxfVywuLi5MWC5tYXAoKFtCXSk9PmAke1RXfSR7Qn1gKV06W10sblcsLi4ublo/W29XXTpbXV0uam9pbigiLCAiKTtmdW5jdGlvbiBGWihCLHY9ITEsaSl7aWYoeil7aWYoQi5zZXQoIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiIseiksQi5zZXQoIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMiLCJQT1NULCBPUFRJT05TIiksQi5zZXQoIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMiLGkmJmkubGVuZ3RoPjA/aTpgQ29udGVudC1UeXBlLCBBdXRob3JpemF0aW9uLCAke2JafWApLEIuc2V0KCJBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyIsYUEpLEIuc2V0KCJDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5IiwiY3Jvc3Mtb3JpZ2luIiksdiYmcSE9bnVsbClCLnNldCgiQWNjZXNzLUNvbnRyb2wtTWF4LUFnZSIsU3RyaW5nKHEpKX19ZnVuY3Rpb24gdEEoQil7cmV0dXJuIEIuaW5jbHVkZXMoIi8vIik/Qi5yZXBsYWNlKC9cL3syLH0vZywiLyIpOkJ9ZnVuY3Rpb24gZUEoQil7aWYoIUIuc3RhcnRzV2l0aChgJHtZfS9gKSlyZXR1cm4gbnVsbDtsZXQgdj1CLnNsaWNlKFkubGVuZ3RoKzEpLGk9ImNhbGwiO2lmKHYuZW5kc1dpdGgoIi9pbml0IikpaT0iaW5pdCIsdj12LnNsaWNlKDAsLTUpO2Vsc2UgaWYodi5lbmRzV2l0aCgiL2V4Y2hhbmdlIikpaT0iZXhjaGFuZ2UiLHY9di5zbGljZSgwLC05KTtsZXQgdzA9di5pbmRleE9mKCIvIik7aWYodzA8PTApcmV0dXJuIG51bGw7bGV0IEwwPXYuc2xpY2UoMCx3MCksdDA9di5zbGljZSh3MCsxKTtpZighdDB8fHQwLmluY2x1ZGVzKCIvIikpcmV0dXJuIG51bGw7cmV0dXJue3Byb3RvY29sTmFtZTpMMCxtZXRob2ROYW1lOnQwLGFjdGlvbjppfX1mdW5jdGlvbiAkRChCLHYpe2lmKEIuaW5jbHVkZXMoIiUiKSlyZXR1cm4gdlcucGVyY2VudEVuY29kZWQoKTt0cnl7eFcoQiwhMCl9Y2F0Y2goTDApe3JldHVybiBuZXcgVDgoYCd2Z2lfcnBjLnByb3RvY29sJyBpcyBub3QgYSBwcm90b2NvbCBuYW1lOiAke0wwLm1lc3NhZ2V9YCl9bGV0IGk9US5nZXQoQik7aWYoIWkpcmV0dXJuIFQ4Lm5vdEhvc3RlZChCLFgpO2lmKHY9PT1wVylyZXR1cm4gbmV3IFhYKFUxKCkpO2xldCB3MD1pLnByb3RvY29sLmdldE1ldGhvZCh2KTtpZighdzApe2xldCBMMD1pLnByb3RvY29sLm1ldGhvZE5hbWVzKCk7cmV0dXJuIG5ldyBYWChgUHJvdG9jb2wgJyR7Qn0nIGhhcyBubyBtZXRob2QgJyR7dn0nLiBBdmFpbGFibGU6IFske0wwLmpvaW4oIiwgIil9XS5gKX1yZXR1cm57YmluZGluZzppLG1ldGhvZDp3MH19ZnVuY3Rpb24gWkQoQil7cmV0dXJuIGpOKEYwP251bGw6Qi5oZWFkZXJzLmdldCgiQWNjZXB0LUVuY29kaW5nIiksQi5oZWFkZXJzLmdldChfSikscTkpfWFzeW5jIGZ1bmN0aW9uIHo4KEIsdixpKXtsZXR7Y29kZWM6dzAsdXNlZEN1c3RvbTpMMH09dix0MD1uZXcgVWludDhBcnJheShhd2FpdCBCLmFycmF5QnVmZmVyKCkpO2lmKGkhPW51bGwmJnQwLmJ5dGVMZW5ndGg+aSl7bGV0IEZRPW5ldyBIZWFkZXJzKEIuaGVhZGVycyk7RlEuZGVsZXRlKEM2KSxGUS5kZWxldGUoSUopO2xldCBwOD1FcnJvcihgSFRUUCBib2R5IGV4Y2VlZHMgbWF4X3Jlc3BvbnNlX2J5dGVzICgke3QwLmJ5dGVMZW5ndGh9ID4gJHtpfSlgKTtwOC5uYW1lPSJSZXNwb25zZVRvb0xhcmdlRXJyb3IiO2xldCBtJD1xJChnNSxwOCxWLG51bGwpLERYPWYwKGc1LFttJF0pO3JldHVybiBGUS5zZXQoIkNvbnRlbnQtVHlwZSIsT1opLEZRLnNldChCSiwidHJ1ZSIpLEZRLnNldCgiQ29udGVudC1MZW5ndGgiLFN0cmluZyhEWC5ieXRlTGVuZ3RoKSksbmV3IFJlc3BvbnNlKERYLHtzdGF0dXM6MjAwLGhlYWRlcnM6RlF9KX1pZih1PT1udWxsfHwhdzApcmV0dXJuIG5ldyBSZXNwb25zZSh0MCx7c3RhdHVzOkIuc3RhdHVzLGhlYWRlcnM6Qi5oZWFkZXJzfSk7bGV0IG8wPXcwPT09InpzdGQiP2F3YWl0IFcxKHQwLHUpOmF3YWl0IFJOKHQwKSxvWj1uZXcgSGVhZGVycyhCLmhlYWRlcnMpLG4kPUwwfHxGMDtyZXR1cm4gb1ouc2V0KG4kP0lKOkM2LHcwKSxuZXcgUmVzcG9uc2UobzAse3N0YXR1czpCLnN0YXR1cyxoZWFkZXJzOm9afSl9ZnVuY3Rpb24gUUQoQix2LGkpe2lmKGkuc2V0KCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uIiksaS5zZXQoblcsQiksblopaS5zZXQob1csInRydWUiKTtyZXR1cm4gaS5zZXQoIkNhY2hlLUNvbnRyb2wiLCJuby1zdG9yZSIpLG5ldyBSZXNwb25zZShnNyhCLHYsblopLHtzdGF0dXM6NDAxLGhlYWRlcnM6aX0pfWZ1bmN0aW9uIFhEKEIsdil7aWYoQiBpbnN0YW5jZW9mIHFYfHxCIGluc3RhbmNlb2YgQlope2xldCBMMD1uZXcgSGVhZGVycyh7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLCJDYWNoZS1Db250cm9sIjoibm8tc3RvcmUifSk7RlooTDApO2xldCB0MD1OdW1iZXIuaXNGaW5pdGUoQi5yZXRyeUFmdGVyKSYmQi5yZXRyeUFmdGVyPj0wP01hdGguY2VpbChCLnJldHJ5QWZ0ZXIpOjU7TDAuc2V0KCJSZXRyeS1BZnRlciIsU3RyaW5nKHQwKSk7bGV0IG8wPUIgaW5zdGFuY2VvZiBCWj8icGVlciBpZGVudGl0eSB1bmF2YWlsYWJsZSI6ImF1dGhlbnRpY2F0aW9uIGF1dGhvcml0eSB1bmF2YWlsYWJsZSI7cmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeSh7ZXJyb3I6ImF1dGhlbnRpY2F0aW9uX3VuYXZhaWxhYmxlIixkZXRhaWw6bzB9KSx7c3RhdHVzOjUwMyxoZWFkZXJzOkwwfSl9bGV0IGk9bmV3IEhlYWRlcnM7aWYoRlooaSksdyl7bGV0IEwwPW5ldyBVUkwodi51cmwpO0wwLnBhdGhuYW1lPUk3KFkpLEwwLnNlYXJjaD0iIixpLnNldCgiV1dXLUF1dGhlbnRpY2F0ZSIsd1UoTDAudG9TdHJpbmcoKSx3LmNsaWVudElkLHcuY2xpZW50U2VjcmV0LHcudXNlSWRUb2tlbkFzQmVhcmVyLHcuZGV2aWNlQ29kZUNsaWVudElkLHcuZGV2aWNlQ29kZUNsaWVudFNlY3JldCkpfWxldHtyZWFzb246dzB9PV83KEIpO3JldHVybiBRRCh3MCwiYXV0aGVudGljYXRpb24gcmVqZWN0ZWQiLGkpfWZ1bmN0aW9uIFA5KEIpe2xldCB2PUI/LmNsYWltcz8ucGVlcl9ldmlkZW5jZV9iaW5kaW5nO3JldHVybiB0eXBlb2Ygdj09PSJzdHJpbmciJiZ2P3Y6dm9pZCAwfWFzeW5jIGZ1bmN0aW9uIEY5KEIpe2xldCB2PXpaLmFub255bW91cygpLGk7aWYoZyl0cnl7dj1hd2FpdCBnKEIpPz96Wi5hbm9ueW1vdXMoKX1jYXRjaChMMCl7aWYoRSYmTDAgaW5zdGFuY2VvZiBxUSYmTDAucmVhc29uPT09Q1ouTWlzc2luZ0NyZWRlbnRpYWwpaT1MMDtlbHNlIHRocm93IEwwfWxldCB3MD1jWC5FTVBUWTtpZihULmxlbmd0aD4wKXtsZXQgTDA9bmV3IEFib3J0Q29udHJvbGxlcix0MD1EYXRlLm5vdygpK18sbzA9cGVyZm9ybWFuY2Uubm93KCksb1o9c2V0VGltZW91dCgoKT0+TDAuYWJvcnQoKSxfKSxuJD1uZXcgUHJvbWlzZSgoRlEscDgpPT57bGV0IG0kPSgpPT5wOChuZXcgQlooInBlZXIgaWRlbnRpdHkgcmVzb2x1dGlvbiB0aW1lZCBvdXQiKSk7aWYoTDAuc2lnbmFsLmFib3J0ZWQpbSQoKTtlbHNlIEwwLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbSQse29uY2U6ITB9KX0pO3RyeXtsZXQgRlE7dHJ5e0ZRPWF3YWl0IFByb21pc2UucmFjZShbUHJvbWlzZS5yZXNvbHZlKFo/LnBlZXJSZXNvbHV0aW9uQ29udGV4dD8uKEIpKSxuJF0pPz97fX1jYXRjaChYJCl7aWYoWCQgaW5zdGFuY2VvZiBBJHx8WCQgaW5zdGFuY2VvZiBCWil0aHJvdyBYJDt0aHJvdyBuZXcgQlooInBlZXIgaWRlbnRpdHkgcmVzb2x1dGlvbiBjb250ZXh0IGZhaWxlZCIpfWxldCBwOD1fLShwZXJmb3JtYW5jZS5ub3coKS1vMCk7aWYocDg8PTB8fEwwLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBCWigicGVlciBpZGVudGl0eSByZXNvbHV0aW9uIHRpbWVkIG91dCIpO2xldCBtJD1uZXcgUDEoImh0dHAiLHthdXRob3JpdHk6bmV3IFVSTChCLnVybCkuaG9zdCxzZXJ2aWNlTmFtZTpaPy5wZWVyU2VydmljZU5hbWUsaGVhZGVyczpuZXcgTWFwLC4uLkZRLGRlYWRsaW5lOnQwLGJ1ZGdldE1zOnA4fSksRFg9QXJyYXkoVC5sZW5ndGgpLHU2PVQubWFwKChYJCxJWik9PntpZihoPj15KXJldHVybiBEWFtJWl09bmV3IFAkKFgkLnByb3ZpZGVyLEMwLlVOQVZBSUxBQkxFKSxQcm9taXNlLnJlc29sdmUoKTtyZXR1cm4gaCsrLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlgkLnJlc29sdmUobSQsTDAuc2lnbmFsKSkudGhlbigoYVgpPT57RFhbSVpdPWFYJiZhWC5wcm92aWRlcj09PVgkLnByb3ZpZGVyP2FYOm5ldyBQJChYJC5wcm92aWRlcixDMC5JTlZBTElEKX0pLmNhdGNoKChhWCk9PntEWFtJWl09bmV3IFAkKFgkLnByb3ZpZGVyLGFYIGluc3RhbmNlb2YgQSQ/QzAuSU5WQUxJRDpDMC5VTkFWQUlMQUJMRSl9KS5maW5hbGx5KCgpPT57aC0tfSl9KTthd2FpdCBQcm9taXNlLnJhY2UoW1Byb21pc2UuYWxsKHU2KSxuJF0pLmNhdGNoKChYJCk9PntpZighKFgkIGluc3RhbmNlb2YgQlopKXRocm93IFgkfSksYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7bGV0IE5RPUFycmF5LmZyb20oe2xlbmd0aDpULmxlbmd0aH0sKFgkLElaKT0+RFhbSVpdPz9uZXcgUCQoVFtJWl0ucHJvdmlkZXIsQzAuVU5BVkFJTEFCTEUpKTt3MD1uZXcgY1goTlEpfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KG9aKX19aWYoRSl0cnl7dj1hd2FpdCBFKHcwLHYpfWNhdGNoKEwwKXtpZihMMCBpbnN0YW5jZW9mIEJaKXRocm93IG5ldyBCWjtpZihMMCBpbnN0YW5jZW9mIEEkKXRocm93IG5ldyBBJCgicGVlciBpZGVudGl0eSBhdXRoZW50aWNhdGlvbiByZWplY3RlZCIsTDAudmdpQXV0aFJlYXNvbik7dGhyb3cgbmV3IEEkKCJwZWVyIGlkZW50aXR5IGF1dGhlbnRpY2F0aW9uIHJlamVjdGVkIil9aWYoaSYmIXYuYXV0aGVudGljYXRlZCl0aHJvdyBpO3JldHVybnthdXRoQ29udGV4dDp2LHBlZXJFdmlkZW5jZTp3MH19ZnVuY3Rpb24gQVgoQix2LGk9ZzUpe2xldCB3MD1xJChpLEIsVixudWxsKSxMMD1mMChpLFt3MF0pLHQwPWZaKEwwLHYpO3JldHVybiBGWih0MC5oZWFkZXJzKSx0MH1mdW5jdGlvbiBOOShCLHYsaT0hMSl7bGV0IHcwPUVycm9yKGBJbnZhbGlkICR7Ylp9OiAke0IgaW5zdGFuY2VvZiBFcnJvcj9CLm1lc3NhZ2U6U3RyaW5nKEIpfWApO3cwLm5hbWU9IlZhbHVlRXJyb3IiO2xldCBMMD1BWCh3MCw0MDApO2lmKEwwLmhlYWRlcnMuc2V0KEJKLCJ0cnVlIiksaSlGWihMMC5oZWFkZXJzLCEwLHYuaGVhZGVycy5nZXQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIpKTtyZXR1cm4ga1ooTDAuaGVhZGVycyxpKSxMMH1sZXQgSkQ9Wj8uZW5hYmxlSGVhbHRoRW5kcG9pbnQ/PyEwLFdEPWAke1l9L2hlYWx0aGAsZTU9SkQ/SlNPTi5zdHJpbmdpZnkoe3N0YXR1czoib2siLHNlcnZlcl9pZDpWLHByb3RvY29sOkkwfSk6bnVsbCxVOT1hc3luYyBmdW5jdGlvbih2LGksdzAsTDA9bnVsbCl7bGV0IHQwPW5ldyBVUkwodi51cmwpLG8wPXRBKHQwLnBhdGhuYW1lKTtpZihmJiZvMD09PWAke1l9L19vYXV0aC90b2tlbmAmJih2Lm1ldGhvZD09PSJQT1NUInx8di5tZXRob2Q9PT0iT1BUSU9OUyIpKXJldHVybiBUTSh2LGYpO2lmKGU1IT09bnVsbCYmKHYubWV0aG9kPT09IkdFVCJ8fHYubWV0aG9kPT09IkhFQUQiKSYmbzA9PT1XRCl7bGV0IHg9bmV3IEhlYWRlcnMoeyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKEZaKHgpLGtaKHgpLHYubWV0aG9kPT09IkhFQUQiKXJldHVybiB4LnNldCgiQ29udGVudC1MZW5ndGgiLFN0cmluZyhuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZTUpLmJ5dGVMZW5ndGgpKSxuZXcgUmVzcG9uc2UobnVsbCx7c3RhdHVzOjIwMCxoZWFkZXJzOnh9KTtyZXR1cm4gbmV3IFJlc3BvbnNlKGU1LHtzdGF0dXM6MjAwLGhlYWRlcnM6eH0pfWlmKHcmJm8wPT09STcoWSkpe2lmKHYubWV0aG9kIT09IkdFVCIpcmV0dXJuIG5ldyBSZXNwb25zZSgiTWV0aG9kIE5vdCBBbGxvd2VkIix7c3RhdHVzOjQwNX0pO2xldCB4PVYxKHcpO2lmKGYmJncuY2xpZW50U2VjcmV0KXtsZXQgWFo9bmV3IFVSTCh3LnJlc291cmNlKTt4LnRva2VuX2VuZHBvaW50PWAke1haLnByb3RvY29sfS8vJHtYWi5ob3N0fSR7WX0vX29hdXRoL3Rva2VuYH1sZXQgYjA9SlNPTi5zdHJpbmdpZnkoeCksVSQ9bmV3IEhlYWRlcnMoeyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwiQ2FjaGUtQ29udHJvbCI6InB1YmxpYywgbWF4LWFnZT02MCJ9KTtyZXR1cm4gRlooVSQpLG5ldyBSZXNwb25zZShiMCx7c3RhdHVzOjIwMCxoZWFkZXJzOlUkfSl9aWYodi5tZXRob2Q9PT0iT1BUSU9OUyIpe2xldCB4PXYuaGVhZGVycy5nZXQoYlopO2lmKHghPT1udWxsKXRyeXtpWSh4KX1jYXRjaChVJCl7cmV0dXJuIE45KFUkLHYsITApfWxldCBiMD1uZXcgSGVhZGVycztyZXR1cm4gRlooYjAsITAsdi5oZWFkZXJzLmdldCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIikpLGtaKGIwLCEwKSxuZXcgUmVzcG9uc2UobnVsbCx7c3RhdHVzOjIwNCxoZWFkZXJzOmIwfSl9aWYodi5tZXRob2Q9PT0iR0VUIil7aWYoZil7aWYobzA9PT1gJHtZfS9fb2F1dGgvY2FsbGJhY2tgKXJldHVybiBnTSh2LGYpO2lmKG8wPT09YCR7WX0vX29hdXRoL2xvZ291dGApcmV0dXJuIHhNKHYsZik7bGV0IHg9eU0odixmKTtpZih4KXJldHVybiB4fWlmKGcmJmYpdHJ5e2F3YWl0IGcodil9Y2F0Y2h7bGV0IHg9YXdhaXQgdk0odixmKTtpZih4KXJldHVybiB4fWlmKE4kKXtsZXQgeD10MC5wYXRobmFtZT09PW8wP3QwOm5ldyBVUkwodDAuaHJlZik7aWYoeCE9PXQwKXgucGF0aG5hbWU9bzA7bGV0IGIwPWF3YWl0IE4kKHYse3VybDp4LHByZWZpeDpZLHNlcnZlcklkOlYsb2F1dGhBY3RpdmU6bFosYWRkQ29yc0hlYWRlcnM6Rlp9KTtpZihiMClyZXR1cm4gYjB9aWYoQiQmJihvMD09PVl8fG8wPT09YCR7WX0vYCkpe2xldCB4PW5ldyBIZWFkZXJzKHsiQ29udGVudC1UeXBlIjoidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04In0pO3JldHVybiBGWih4KSxuZXcgUmVzcG9uc2UoQiQse3N0YXR1czoyMDAsaGVhZGVyczp4fSl9aWYoZFomJm8wPT09YCR7WX0vZGVzY3JpYmVgKXtsZXQgeD1uZXcgSGVhZGVycyh7IkNvbnRlbnQtVHlwZSI6InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCJ9KTtyZXR1cm4gRlooeCksbmV3IFJlc3BvbnNlKGRaLHtzdGF0dXM6MjAwLGhlYWRlcnM6eH0pfWlmKEg4KXtsZXQgeD1uZXcgSGVhZGVycyh7IkNvbnRlbnQtVHlwZSI6InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCJ9KTtyZXR1cm4gRlooeCksbmV3IFJlc3BvbnNlKEg4LHtzdGF0dXM6NDA0LGhlYWRlcnM6eH0pfXJldHVybiBuZXcgUmVzcG9uc2UoIk5vdCBGb3VuZCIse3N0YXR1czo0MDR9KX1pZih2Lm1ldGhvZD09PSJERUxFVEUiJiZrJCYmbVEmJm8wPT09YCR7WX0vJHtyR31gKXtsZXQgeD1uZXcgSGVhZGVycztGWih4KSxrWih4KTtsZXQgYjA9KHYuaGVhZGVycy5nZXQoZlgpPz8iIikudHJpbSgpO2lmKCFiMClyZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwse3N0YXR1czoyMDAsaGVhZGVyczp4fSk7bGV0IFUkPVQ1KCExLG51bGwsbnVsbCksWFo9bnVsbCxWWj1udWxsLGw4O3RyeXtsZXQgZiQ9KGF3YWl0IEY5KHYpKS5hdXRoQ29udGV4dDtpZihsOD1QOShmJCksZiQuYXV0aGVudGljYXRlZClYWj1mJC5wcmluY2lwYWw/PyIiLFZaPWYkLmRvbWFpbjtVJD1UNShmJC5hdXRoZW50aWNhdGVkLGYkLmRvbWFpbixmJC5wcmluY2lwYWwsbDgpfWNhdGNoe31sZXQgZEo9ZzEoe3Byb3RvY29sOnJXLHByaW5jaXBhbDpYWixldmlkZW5jZUJpbmRpbmc6bDgsZG9tYWluOlZafSksQ1g7dHJ5e0NYPVd6KGIwLEcsZEopfWNhdGNoe3JldHVybiBuZXcgUmVzcG9uc2UobnVsbCx7c3RhdHVzOjIwMCxoZWFkZXJzOnh9KX1pZihDWC5zZXJ2ZXJJZCE9PVYpcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLHtzdGF0dXM6MjAwLGhlYWRlcnM6eH0pO2xldCBuSj1tUS5nZXQoQ1guc2Vzc2lvbklkLFUkKTtpZighbkopcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLHtzdGF0dXM6MjAwLGhlYWRlcnM6eH0pO2xldCBfWj1hd2FpdCBuSi5sb2NrLmFjcXVpcmUoKTt0cnl7bVEuY2xvc2UoQ1guc2Vzc2lvbklkKX1maW5hbGx5e19aKCl9cmV0dXJuIHguc2V0KF9XLCJ0cnVlIiksbmV3IFJlc3BvbnNlKG51bGwse3N0YXR1czoyMDQsaGVhZGVyczp4fSl9aWYodi5tZXRob2QhPT0iUE9TVCIpcmV0dXJuIG5ldyBSZXNwb25zZSgiTWV0aG9kIE5vdCBBbGxvd2VkIix7c3RhdHVzOjQwNX0pO2xldCBvWj17fSxuJDt0cnl7biQ9YXdhaXQgRjkodil9Y2F0Y2goeCl7cmV0dXJuIFhEKHgsdil9bGV0IEZRLHA4PXYuaGVhZGVycy5nZXQoYlopO2lmKHA4IT09bnVsbCl0cnl7RlE9aVkocDgpfWNhdGNoKHgpe3JldHVybiBOOSh4LHYpfWxldCBtJD10JChMLEZRKSxEWD1EPT1udWxsP3ZvaWQgMDp0JChELG0kKSx1Nj17Li4uckEsbWF4UmVzcG9uc2VCeXRlczptJCxwcmVmZXJyZWRSZXNwb25zZUJ5dGVzOkRYLGF1dGhDb250ZXh0Om4kLmF1dGhDb250ZXh0LHBlZXJFdmlkZW5jZTpuJC5wZWVyRXZpZGVuY2UsY29va2llczpyUih2KSxlZ3Jlc3M6dzAsc3RyZWFtT2JzZXJ2ZXI6b1p9LE5RPVpEKHYpLFgkPW51bGwsSVo9bnVsbDtpZihrJCYmbVEpe2xldCB4PXU2LmF1dGhDb250ZXh0LGIwPXg/LmF1dGhlbnRpY2F0ZWQ/eC5wcmluY2lwYWw/PyIiOm51bGwsVSQ9UDkoeCksWFo9VDUoISF4Py5hdXRoZW50aWNhdGVkLHg/LmRvbWFpbix4Py5wcmluY2lwYWwsVSQpLFZaPWcxKHtwcm90b2NvbDpyVyxwcmluY2lwYWw6YjAsZXZpZGVuY2VCaW5kaW5nOlUkLGRvbWFpbjp4Py5kb21haW59KSxsOD0odi5oZWFkZXJzLmdldChpRyk/PyIiKS50cmltKCkudG9Mb3dlckNhc2UoKT09PSJ0cnVlIixkSj0odi5oZWFkZXJzLmdldChmWCk/PyIiKS50cmltKCksQ1g9bnVsbCxuSj1udWxsO2lmKGRKKXtsZXQgQyQ7dHJ5e2lmKEMkPVd6KGRKLEcsVlopLEMkLnNlcnZlcklkIT09Vil0aHJvdyBuZXcgQjgoInNlc3Npb24gdG9rZW4gd2FzIGlzc3VlZCBieSBhIGRpZmZlcmVudCB3b3JrZXIgKHNlcnZlcl9pZCBtaXNtYXRjaCkiKX1jYXRjaChKWil7bGV0IFdLPUpaIGluc3RhbmNlb2YgRXJyb3I/Slo6RXJyb3IoU3RyaW5nKEpaKSksQTk9QVgoV0ssNTAwKTtyZXR1cm4ga1ooQTkuaGVhZGVycyksejgoQTksTlEsbSQpfWxldCBmJD1tUS5nZXQoQyQuc2Vzc2lvbklkLFhaKTtpZighZiQpe2xldCBKWj1BWChuZXcgQjgoInNlc3Npb24gbm90IGZvdW5kLCBleHBpcmVkLCBvciBwcmluY2lwYWwgbWlzbWF0Y2giKSw1MDApO3JldHVybiBrWihKWi5oZWFkZXJzKSx6OChKWixOUSxtJCl9WCQ9YXdhaXQgZiQubG9jay5hY3F1aXJlKCksQ1g9ZiQuc3RhdGUsbko9ZVcoQyQuc2Vzc2lvbklkKX1sZXQgX1o9e2FjY2VwdE9wZW5zOmw4LHN0YXRlOkNYLHNlc3Npb25JZDpuSixtaW50VG9rZW46bnVsbCxjbG9zZWQ6ITEsYWN0aW9uOmRKPyJyZXN1bWUiOiJub25lIixfb3BlbihDJCxmJCl7bGV0e3Nlc3Npb25JZDpKWixleHBpcmVzQXQ6V0t9PW1RLm9wZW4oQyQsZiQsWFopO19aLnNlc3Npb25JZD1lVyhKWiksX1ouc3RhdGU9QyQsX1oubWludFRva2VuPWNNKFYsSlosV0ssRyxWWil9LF9jbG9zZSgpe2lmKF9aLmNsb3NlZClyZXR1cm47bGV0IEMkPV9aLnNlc3Npb25JZDtpZighQyQpcmV0dXJuO2xldCBmJD1uZXcgVWludDhBcnJheShDJC5sZW5ndGgvMik7Zm9yKGxldCBKWj0wO0paPGYkLmxlbmd0aDtKWisrKWYkW0paXT1wYXJzZUludChDJC5zbGljZShKWioyLEpaKjIrMiksMTYpO2lmKFgkKVgkKCksWCQ9bnVsbDttUS5jbG9zZShmJCksX1ouc3RhdGU9bnVsbCxfWi5jbG9zZWQ9ITB9fTtJWj1fWix1Ni5zdGlja3lDb250ZXh0PV9afWlmKG8wPT09YCR7WX0vJHtwV31gKXtpZihYJClYJCgpO2xldCB4PW5ldyBYWChVMSgpKTtyZXR1cm4gejgoQVgoeCw0MDQpLE5RLG0kKX1sZXQgYVg9bzA9PT1gJHtZfS8ke19RfS9pbml0YCxpMT1hWD9udWxsOmVBKG8wKSxNOT1udWxsO2lmKCFhWCl7aWYoIWkxKXtpZihYJClYJCgpO3JldHVybiBuZXcgUmVzcG9uc2UoIk5vdCBGb3VuZCIse3N0YXR1czo0MDR9KX1sZXQgeD0kRChpMS5wcm90b2NvbE5hbWUsaTEubWV0aG9kTmFtZSk7aWYoeCBpbnN0YW5jZW9mIEVycm9yKXtpZihYJClYJCgpO3JldHVybiB6OChBWCh4LDQwNCksTlEsbSQpfU05PXh9aWYoIXYuaGVhZGVycy5nZXQoIkNvbnRlbnQtVHlwZSIpPy5pbmNsdWRlcyhPWikpe2lmKFgkKVgkKCk7cmV0dXJuIG5ldyBSZXNwb25zZShgVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZTogZXhwZWN0ZWQgJHtPWn1gLHtzdGF0dXM6NDE1fSl9bGV0IEw5PW8wPT09YCR7WX0vJHtfUX0vaW5pdGAsS0Q9TDk/TWF0aC5taW4oUD8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHNNKTpQLHE4O3RyeXtxOD1hd2FpdCBpUih2LEtEKX1jYXRjaCh4KXtpZih4IGluc3RhbmNlb2YgdyQpcmV0dXJuIG5ldyBSZXNwb25zZSh4Lm1lc3NhZ2Use3N0YXR1czp4LnN0YXR1c0NvZGV9KTt0aHJvdyB4fWxldCBIRD1xOC5ieXRlTGVuZ3RoLHA2PSh2LmhlYWRlcnMuZ2V0KCJDb250ZW50LUVuY29kaW5nIik/PyIiKS50cmltKCkudG9Mb3dlckNhc2UoKTtpZihwNj09PSJ6c3RkInx8cDY9PT0iZ3ppcCIpdHJ5e2xldCB4PUw5P01hdGgubWluKE0/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxzTSk6TTtxOD1wNj09PSJ6c3RkIj9hd2FpdCBBNihxOCx4KTphd2FpdCBrVyhxOCx4KX1jYXRjaCh4KXtsZXQgYjA9eD8ubWVzc2FnZT8/YCR7cDZ9IGRlY29tcHJlc3Npb24gZmFpbGVkYCxVJD1iMC5pbmNsdWRlcygiZXhjZWVkIil8fGIwLmluY2x1ZGVzKCJjYXAiKT80MTM6NDAwLFhaPW5ldyBIZWFkZXJzKHsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9KTtyZXR1cm4gRlooWFopLGtaKFhaKSxuZXcgUmVzcG9uc2UoYjAse3N0YXR1czpVJCxoZWFkZXJzOlhafSl9ZWxzZSBpZihwNil7bGV0IHg9bmV3IEhlYWRlcnMoeyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn0pO3JldHVybiBGWih4KSxrWih4KSxuZXcgUmVzcG9uc2UoYFVuc3VwcG9ydGVkIENvbnRlbnQtRW5jb2Rpbmc6ICR7cDZ9YCx7c3RhdHVzOjQxNSxoZWFkZXJzOnh9KX1pZihvMD09PWAke1l9LyR7X1F9L2luaXRgKXtpZighZjgpcmV0dXJuIG5ldyBSZXNwb25zZSgiTm90IEZvdW5kIix7c3RhdHVzOjQwNH0pO3RyeXtsZXR7c2NoZW1hOngsYmF0Y2g6YjB9PWF3YWl0IHRHKHE4KSxVJD15Sih4LGIwKTtpZihVJC5tZXRob2ROYW1lIT09X1EpdGhyb3cgbmV3IHckKGBNZXRob2QgbmFtZSBpbiByZXF1ZXN0ICcke1UkLm1ldGhvZE5hbWV9JyBkb2VzIG5vdCBtYXRjaCBVUkwgJyR7X1F9J2AsNDAwKTt0cnl7azYoeCxWNixfUSl9Y2F0Y2goQyQpe2xldCBmJD1DJD8uZXJyb3JNZXNzYWdlLEpaPW5ldyB3JCh0eXBlb2YgZiQ9PT0ic3RyaW5nIj9mJDpTdHJpbmcoQyQpLDQwMCk7dGhyb3cgSloubmFtZT0iUHJvdG9jb2xFcnJvciIsSlp9bGV0IFhaPVUkLnBhcmFtcy5jb3VudCxWWj10eXBlb2YgWFo9PT0iYmlnaW50Ij9OdW1iZXIoWFopOk51bWJlcihYWj8/MSk7aWYoIU51bWJlci5pc0Zpbml0ZShWWil8fFZaPDEpVlo9MTtpZihWWj5JVylWWj1JVztsZXQgbDg9W107Zm9yKGxldCBDJD0wO0MkPFZaO0MkKyspbDgucHVzaChhd2FpdCBmOC5nZW5lcmF0ZVVwbG9hZFVybCgpKTtsZXQgZEo9bDgubWFwKChDJCk9PkMkLmV4cGlyZXNBdC5nZXRUaW1lKCkpLENYPVlRKFRKLHt1cGxvYWRfdXJsOmw4Lm1hcCgoQyQpPT5DJC51cGxvYWRVcmwpLGRvd25sb2FkX3VybDpsOC5tYXAoKEMkKT0+QyQuZG93bmxvYWRVcmwpLGV4cGlyZXNfYXQ6ZEp9KSxuSj1mMChUSixbQ1hdKSxfWj1mWihuSik7cmV0dXJuIEZaKF9aLmhlYWRlcnMpLGtaKF9aLmhlYWRlcnMpLHo4KF9aLE5RLG0kKX1jYXRjaCh4KXtpZih4IGluc3RhbmNlb2YgdyQpe2xldCBVJD1BWCh4LHguc3RhdHVzQ29kZSxUSik7cmV0dXJuIGtaKFUkLmhlYWRlcnMpLHo4KFUkLE5RLG0kKX1sZXQgYjA9QVgoeCw1MDAsVEopO3JldHVybiBrWihiMC5oZWFkZXJzKSx6OChiMCxOUSxtJCl9fWxldHtwcm90b2NvbE5hbWU6ekQsbWV0aG9kTmFtZTpjNixhY3Rpb246cVl9PWkxLHtiaW5kaW5nOmw2LG1ldGhvZDpPWH09TTksWEs9ey4uLnU2LHByb3RvY29sTmFtZTpsNi5uYW1lfSxxRD0hbDYudmVyc2lvbkV4ZW1wdCYmbDYucHJvdG9jb2wucHJvdG9jb2xWZXJzaW9uUGFydHMhPT1udWxsO2lmKHFZIT09ImV4Y2hhbmdlIil0cnl7bGV0IHg7dHJ5e3g9a1EocTgpLm1ldGFkYXRhPz92b2lkIDB9Y2F0Y2h7fWlmKHghPT12b2lkIDApZSh6RCx4KTtpZihxRCltKGw2LHgpfWNhdGNoKHgpe2xldCBiMD1PWC50eXBlPT09UyQuVU5BUlk/T1gucmVzdWx0U2NoZW1hOmc1LFUkPXEkKGIwLHgsVixudWxsKSxYWj1mMChiMCxbVSRdKSxWWj1mWihYWiw0MDApO3JldHVybiBGWihWWi5oZWFkZXJzKSxrWihWWi5oZWFkZXJzKSx6OChWWixOUSxtJCl9YXdhaXQgZChTKTtsZXQgUEQ9T1gudHlwZT09PVMkLlVOQVJZPyJ1bmFyeSI6InN0cmVhbSIscjE9dTYuYXV0aENvbnRleHQsYzg9e21ldGhvZDpjNixtZXRob2RUeXBlOlBELHNlcnZlcklkOlYscmVxdWVzdElkOkwwLHByb3RvY29sOmw2Lm5hbWUscHJvdG9jb2xIYXNoOmF3YWl0IGNXKGw2KSxwcm90b2NvbFZlcnNpb246byxraW5kOlMscHJpbmNpcGFsOnIxPy5wcmluY2lwYWw/PyIiLGF1dGhEb21haW46cjE/LmRvbWFpbj8/IiIsYXV0aGVudGljYXRlZDpyMT8uYXV0aGVudGljYXRlZD8/ITEscmVxdWVzdERhdGE6cVk9PT0iY2FsbCJ8fHFZPT09ImluaXQiP3E4OnZvaWQgMCxjbGFpbXM6cjE/LmNsYWltcyxyZXF1ZXN0Qnl0ZXM6SEQsZGVmZXJyYWw6aX0sRkQ9e2lucHV0QmF0Y2hlczowLG91dHB1dEJhdGNoZXM6MCxpbnB1dFJvd3M6MCxvdXRwdXRSb3dzOjAsaW5wdXRCeXRlczowLG91dHB1dEJ5dGVzOjB9LE5EPXA/Lm9uRGlzcGF0Y2hTdGFydChjOCksSks7dHJ5e2xldCB4O2lmKHFZPT09ImNhbGwiKXtpZihPWC50eXBlIT09UyQuVU5BUlkpdGhyb3cgbmV3IHckKGBNZXRob2QgJyR7YzZ9JyBpcyBhIHN0cmVhbSBtZXRob2QuIFVzZSAvaW5pdCBhbmQgL2V4Y2hhbmdlIGVuZHBvaW50cy5gLDQwMCk7eD1hd2FpdCBHTShPWCxxOCxYSyl9ZWxzZSBpZihxWT09PSJpbml0Iil7aWYoT1gudHlwZSE9PVMkLlNUUkVBTSl0aHJvdyBuZXcgdyQoYE1ldGhvZCAnJHtjNn0nIGlzIGEgdW5hcnkgbWV0aG9kLiBVc2UgUE9TVCAke1l9LyR7YzZ9IGluc3RlYWQuYCw0MDApO3g9YXdhaXQgS00oT1gscTgsWEspfWVsc2V7aWYoT1gudHlwZSE9PVMkLlNUUkVBTSl0aHJvdyBuZXcgdyQoYE1ldGhvZCAnJHtjNn0nIGlzIGEgdW5hcnkgbWV0aG9kLiBVc2UgUE9TVCAke1l9LyR7YzZ9IGluc3RlYWQuYCw0MDApO3g9YXdhaXQgSE0oT1gscTgsWEspfWxldCBiMD14Ll9fZGlzcGF0Y2hFcnJvcjtpZihiMClKSz1iMCBpbnN0YW5jZW9mIEVycm9yP2IwOkVycm9yKFN0cmluZyhiMCkpO3JldHVybiBGWih4LmhlYWRlcnMpLGtaKHguaGVhZGVycyksUUsoeC5oZWFkZXJzLElaKSxjOC5odHRwU3RhdHVzPXguc3RhdHVzLHo4KHgsTlEsbSQpfWNhdGNoKHgpe2lmKEpLPXggaW5zdGFuY2VvZiBFcnJvcj94OkVycm9yKFN0cmluZyh4KSkseCBpbnN0YW5jZW9mIHckKXtsZXQgVSQ9QVgoeCx4LnN0YXR1c0NvZGUpO3JldHVybiBrWihVJC5oZWFkZXJzKSxRSyhVJC5oZWFkZXJzLElaKSxjOC5odHRwU3RhdHVzPVUkLnN0YXR1cyx6OChVJCxOUSxtJCl9bGV0IGIwPUFYKHgsNTAwKTtyZXR1cm4ga1ooYjAuaGVhZGVycyksUUsoYjAuaGVhZGVycyxJWiksYzguaHR0cFN0YXR1cz1iMC5zdGF0dXMsejgoYjAsTlEsbSQpfWZpbmFsbHl7aWYoSVope2lmKElaLnNlc3Npb25JZCljOC5zZXNzaW9uSWQ9SVouc2Vzc2lvbklkO2M4LnNlc3Npb25BY3Rpb249SVouYWN0aW9ufWlmKG9aLnN0cmVhbUlkKWM4LnN0cmVhbUlkPW9aLnN0cmVhbUlkO2lmKG9aLmNhbmNlbGxlZCljOC5jYW5jZWxsZWQ9ITA7aWYodzA/LmV4dGVybmFsaXplZEJ5dGVzKWM4LmV4dGVybmFsaXplZEJ5dGVzPXcwLmV4dGVybmFsaXplZEJ5dGVzO2lmKHA/Lm9uRGlzcGF0Y2hFbmQoTkQsYzgsRkQsSkspLFgkKXt0cnl7WCQoKX1jYXRjaHt9WCQ9bnVsbH19fTtyZXR1cm4gYXN5bmMgZnVuY3Rpb24odil7bGV0IGk9WUQodik7aWYoIXApe2xldCBuJD1hd2FpdCBVOSh2LHZvaWQgMCx2b2lkIDAsaSk7cmV0dXJuICRLKG4kKSxaSyhuJCxpKSxuJH1sZXQgdzA9W10sbzA9YXdhaXQgVTkodix7ZGVmZXI6KG4kKT0+dzAucHVzaChuJCl9LHtleHRlcm5hbGl6ZWRCeXRlczowfSxpKTtpZih3MC5sZW5ndGg9PT0wKXJldHVybiAkSyhvMCksWksobzAsaSksbzA7bGV0IG9aO3RyeXtsZXQgbiQ9YXdhaXQgR0QobzApO29aPW4kLnNpemUsbzA9biQucmVzcG9uc2V9Y2F0Y2h7fWZvcihsZXQgbiQgb2YgdzApbiQob1opO3JldHVybiAkSyhvMCksWksobzAsaSksbzB9O2Z1bmN0aW9uICRLKEIpe3RyeXtCLmhlYWRlcnMuc2V0KGhHLCJ0cnVlIil9Y2F0Y2h7fX1mdW5jdGlvbiBZRChCKXtsZXQgaT1CLmhlYWRlcnMuZ2V0KGxHKT8udHJpbSgpO2lmKGkpcmV0dXJuIGk7cmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCkucmVwbGFjZSgvLS9nLCIiKS5zbGljZSgwLDE2KX1mdW5jdGlvbiBaSyhCLHYpe3RyeXtCLmhlYWRlcnMuc2V0KGxHLHYpfWNhdGNoe319YXN5bmMgZnVuY3Rpb24gR0QoQil7bGV0IHY9Qi5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKTtpZih2IT09bnVsbCl7bGV0IHcwPU51bWJlcih2KTtpZihOdW1iZXIuaXNGaW5pdGUodzApJiZ3MD49MClyZXR1cm57c2l6ZTp3MCxyZXNwb25zZTpCfX1pZihCLmJvZHk9PT1udWxsKXJldHVybntzaXplOjAscmVzcG9uc2U6Qn07bGV0IGk9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgQi5hcnJheUJ1ZmZlcigpKTtyZXR1cm57c2l6ZTppLmJ5dGVMZW5ndGgscmVzcG9uc2U6bmV3IFJlc3BvbnNlKGkse3N0YXR1czpCLnN0YXR1cyxoZWFkZXJzOkIuaGVhZGVyc30pfX1mdW5jdGlvbiBRSyhCLHYpe2lmKCF2KXJldHVybjtpZih2Lm1pbnRUb2tlbiE9PW51bGwpe0Iuc2V0KGZYLHYubWludFRva2VuKTtmb3IobGV0W2ksdzBdb2YgTFgpQi5zZXQoYCR7VFd9JHtpfWAsdzApfWlmKHYuY2xvc2VkKUIuc2V0KF9XLCJ0cnVlIil9fXZhciBnNSxzUixzTT04MTkyO3ZhciBpTT1PKCgpPT57cVooKTtxNigpO3oxKCk7SFooKTttVygpO00xKCk7bFgoKTtSNigpO1kxKCk7UzEoKTttWCgpO3Y3KCk7QlcoKTtKOCgpO1BNKCk7aE0oKTttTSgpO09KKCk7b00oKTt3NSgpO0d6KCk7UjEoKTtnNT1FMChbXSksc1I9bmV3IE1hcH0pO2Z1bmN0aW9uIHY1KCQsWil7aWYoJD09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuICQgaW5zdGFuY2VvZiBafHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoJClbU3ltYm9sLnRvU3RyaW5nVGFnXT09PVoucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ119Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIFpaKCQsWixRKXtsZXQgWD1UeXBlRXJyb3IoJCx7Y2F1c2U6UX0pO3JldHVybiBPYmplY3QuYXNzaWduKFgse2NvZGU6Wn0pLFh9ZnVuY3Rpb24gc1goJCl7aWYodHlwZW9mICQ9PT0ic3RyaW5nIilyZXR1cm4gJEUuZW5jb2RlKCQpO3JldHVybiBaRS5kZWNvZGUoJCl9ZnVuY3Rpb24gdjgoJCl7aWYodHlwZW9mICQ9PT0ic3RyaW5nIilyZXR1cm4gUHooJCk7cmV0dXJuIHF6KCQpfWZ1bmN0aW9uIE0wKCQsWixRKXtyZXR1cm4gbmV3IEx6KCQse2NvZGU6WixjYXVzZTpRfSl9YXN5bmMgZnVuY3Rpb24gV0woJCl7bGV0IFo7c3dpdGNoKCQua3R5KXtjYXNlIkVDIjpaPXtjcnY6JC5jcnYsa3R5OiQua3R5LHg6JC54LHk6JC55fTticmVhaztjYXNlIk9LUCI6Wj17Y3J2OiQuY3J2LGt0eTokLmt0eSx4OiQueH07YnJlYWs7Y2FzZSJBS1AiOlo9e2FsZzokLmFsZyxrdHk6JC5rdHkscHViOiQucHVifTticmVhaztjYXNlIlJTQSI6Wj17ZTokLmUsa3R5OiQua3R5LG46JC5ufTticmVhaztkZWZhdWx0OnRocm93IG5ldyBQWigidW5zdXBwb3J0ZWQgSldLIGtleSB0eXBlIix7Y2F1c2U6JH0pfXJldHVybiB2OChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsc1goSlNPTi5zdHJpbmdpZnkoWikpKSl9ZnVuY3Rpb24gWUwoJCxaKXtpZighKCQgaW5zdGFuY2VvZiBDcnlwdG9LZXkpKXRocm93IFpaKGAke1p9IG11c3QgYmUgYSBDcnlwdG9LZXlgLGlYKX1mdW5jdGlvbiBRRSgkLFope2lmKFlMKCQsWiksJC50eXBlIT09InByaXZhdGUiKXRocm93IFpaKGAke1p9IG11c3QgYmUgYSBwcml2YXRlIENyeXB0b0tleWAsTlgpfWZ1bmN0aW9uIFhFKCQsWil7aWYoWUwoJCxaKSwkLnR5cGUhPT0icHVibGljIil0aHJvdyBaWihgJHtafSBtdXN0IGJlIGEgcHVibGljIENyeXB0b0tleWAsTlgpfWZ1bmN0aW9uIEpFKCQpe3JldHVybiAkLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKX1mdW5jdGlvbiBoSigkKXtpZigkPT09bnVsbHx8dHlwZW9mICQhPT0ib2JqZWN0Inx8QXJyYXkuaXNBcnJheSgkKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBHTCgkKXtpZih2NSgkLEhlYWRlcnMpKSQ9T2JqZWN0LmZyb21FbnRyaWVzKCQuZW50cmllcygpKTtsZXQgWj1uZXcgSGVhZGVycygkPz97fSk7aWYoenomJiFaLmhhcygidXNlci1hZ2VudCIpKVouc2V0KCJ1c2VyLWFnZW50Iix6eik7aWYoWi5oYXMoImF1dGhvcml6YXRpb24iKSl0aHJvdyBaWignIm9wdGlvbnMuaGVhZGVycyIgbXVzdCBub3QgaW5jbHVkZSB0aGUgImF1dGhvcml6YXRpb24iIGhlYWRlciBuYW1lJyxOWCk7cmV0dXJuIFp9ZnVuY3Rpb24gS0woJCxaKXtpZihaIT09dm9pZCAwKXtpZih0eXBlb2YgWj09PSJmdW5jdGlvbiIpWj1aKCQuaHJlZik7aWYoIShaIGluc3RhbmNlb2YgQWJvcnRTaWduYWwpKXRocm93IFpaKCcib3B0aW9ucy5zaWduYWwiIG11c3QgcmV0dXJuIG9yIGJlIGFuIGluc3RhbmNlIG9mIEFib3J0U2lnbmFsJyxpWCk7cmV0dXJuIFp9cmV0dXJufWZ1bmN0aW9uIEhMKCQpe2lmKCQuaW5jbHVkZXMoIi8vIikpcmV0dXJuICQucmVwbGFjZSgiLy8iLCIvIik7cmV0dXJuICR9ZnVuY3Rpb24gV0UoJCxaLFE9ITEpe2lmKCQucGF0aG5hbWU9PT0iLyIpJC5wYXRobmFtZT1aO2Vsc2UgJC5wYXRobmFtZT1ITChgJHtafS8ke1E/JC5wYXRobmFtZTokLnBhdGhuYW1lLnJlcGxhY2UoLyhcLykkLywiIil9YCk7cmV0dXJuICR9ZnVuY3Rpb24gWUUoJCxaKXtyZXR1cm4gJC5wYXRobmFtZT1ITChgJHskLnBhdGhuYW1lfS8ke1p9YCksJH1hc3luYyBmdW5jdGlvbiBHRSgkLFosUSxYKXtpZighKCQgaW5zdGFuY2VvZiBVUkwpKXRocm93IFpaKGAiJHtafSIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBVUkxgLGlYKTtVTCgkLFg/LltYTF0hPT0hMCk7bGV0IEo9UShuZXcgVVJMKCQuaHJlZikpLFc9R0woWD8uaGVhZGVycyk7cmV0dXJuIFcuc2V0KCJhY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uIiksKFg/LltKTF18fGZldGNoKShKLmhyZWYse2JvZHk6dm9pZCAwLGhlYWRlcnM6T2JqZWN0LmZyb21FbnRyaWVzKFcuZW50cmllcygpKSxtZXRob2Q6IkdFVCIscmVkaXJlY3Q6Im1hbnVhbCIsc2lnbmFsOktMKEosWD8uc2lnbmFsKX0pfWFzeW5jIGZ1bmN0aW9uIHpMKCQsWil7cmV0dXJuIEdFKCQsImlzc3VlcklkZW50aWZpZXIiLChRKT0+e3N3aXRjaChaPy5hbGdvcml0aG0pe2Nhc2Ugdm9pZCAwOmNhc2Uib2lkYyI6WUUoUSwiLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24iKTticmVhaztjYXNlIm9hdXRoMiI6V0UoUSwiLndlbGwta25vd24vb2F1dGgtYXV0aG9yaXphdGlvbi1zZXJ2ZXIiKTticmVhaztkZWZhdWx0OnRocm93IFpaKCcib3B0aW9ucy5hbGdvcml0aG0iIG11c3QgYmUgIm9pZGMiIChkZWZhdWx0KSwgb3IgIm9hdXRoMiInLE5YKX1yZXR1cm4gUX0sWil9ZnVuY3Rpb24gQXooJCxaLFEsWCl7dHJ5e2lmKHR5cGVvZiAkIT09InN0cmluZyIpdGhyb3cgWlooYCR7Wn0gbXVzdCBiZSBhIHN0cmluZ2AsaVgsWCk7aWYoJC5sZW5ndGg9PT0wKXRocm93IFpaKGAke1p9IG11c3Qgbm90IGJlIGVtcHR5YCxOWCxYKX1jYXRjaChKKXtpZihRKXRocm93IE0wKEoubWVzc2FnZSxRLFgpO3Rocm93IEp9fWFzeW5jIGZ1bmN0aW9uIHFMKCQsWil7bGV0IFE9JDtpZighKFEgaW5zdGFuY2VvZiBVUkwpJiZRIT09UUwpdGhyb3cgWlooJyJleHBlY3RlZElzc3VlcklkZW50aWZpZXIiIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVVJMJyxpWCk7aWYoIXY1KFosUmVzcG9uc2UpKXRocm93IFpaKCcicmVzcG9uc2UiIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgUmVzcG9uc2UnLGlYKTtpZihaLnN0YXR1cyE9PTIwMCl0aHJvdyBNMCgnInJlc3BvbnNlIiBpcyBub3QgYSBjb25mb3JtIEF1dGhvcml6YXRpb24gU2VydmVyIE1ldGFkYXRhIHJlc3BvbnNlICh1bmV4cGVjdGVkIEhUVFAgc3RhdHVzIGNvZGUpJyxBTCxaKTtPTChaKTtsZXQgWD1hd2FpdCBTTChaKTtpZihBeihYLmlzc3VlciwnInJlc3BvbnNlIiBib2R5ICJpc3N1ZXIiIHByb3BlcnR5JywkWix7Ym9keTpYfSksUSE9PVFMJiZuZXcgVVJMKFguaXNzdWVyKS5ocmVmIT09US5ocmVmKXRocm93IE0wKCcicmVzcG9uc2UiIGJvZHkgImlzc3VlciIgcHJvcGVydHkgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlJyx2RSx7ZXhwZWN0ZWQ6US5ocmVmLGJvZHk6WCxhdHRyaWJ1dGU6Imlzc3VlciJ9KTtyZXR1cm4gWH1mdW5jdGlvbiBLRSgkKXt6RSgkLCJhcHBsaWNhdGlvbi9qc29uIil9ZnVuY3Rpb24gUEwoJCwuLi5aKXtsZXQgUT0nInJlc3BvbnNlIiBjb250ZW50LXR5cGUgbXVzdCBiZSAnO2lmKFoubGVuZ3RoPjIpe2xldCBYPVoucG9wKCk7USs9YCR7Wi5qb2luKCIsICIpfSwgb3IgJHtYfWB9ZWxzZSBpZihaLmxlbmd0aD09PTIpUSs9YCR7WlswXX0gb3IgJHtaWzFdfWA7ZWxzZSBRKz1aWzBdO3JldHVybiBNMChRLFRFLCQpfWZ1bmN0aW9uIEhFKCQsLi4uWil7aWYoIVouaW5jbHVkZXMoTUwoJCkpKXRocm93IFBMKCQsLi4uWil9ZnVuY3Rpb24gekUoJCxaKXtpZihNTCgkKSE9PVopdGhyb3cgUEwoJCxaKX1mdW5jdGlvbiBxRSgpe3JldHVybiB2OChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDMyKSkpfWZ1bmN0aW9uIFBFKCQpe3N3aXRjaCgkLmFsZ29yaXRobS5oYXNoLm5hbWUpe2Nhc2UiU0hBLTI1NiI6cmV0dXJuIlBTMjU2IjtjYXNlIlNIQS0zODQiOnJldHVybiJQUzM4NCI7Y2FzZSJTSEEtNTEyIjpyZXR1cm4iUFM1MTIiO2RlZmF1bHQ6dGhyb3cgbmV3IFBaKCJ1bnN1cHBvcnRlZCBSc2FIYXNoZWRLZXlBbGdvcml0aG0gaGFzaCBuYW1lIix7Y2F1c2U6JH0pfX1mdW5jdGlvbiBGRSgkKXtzd2l0Y2goJC5hbGdvcml0aG0uaGFzaC5uYW1lKXtjYXNlIlNIQS0yNTYiOnJldHVybiJSUzI1NiI7Y2FzZSJTSEEtMzg0IjpyZXR1cm4iUlMzODQiO2Nhc2UiU0hBLTUxMiI6cmV0dXJuIlJTNTEyIjtkZWZhdWx0OnRocm93IG5ldyBQWigidW5zdXBwb3J0ZWQgUnNhSGFzaGVkS2V5QWxnb3JpdGhtIGhhc2ggbmFtZSIse2NhdXNlOiR9KX19ZnVuY3Rpb24gTkUoJCl7c3dpdGNoKCQuYWxnb3JpdGhtLm5hbWVkQ3VydmUpe2Nhc2UiUC0yNTYiOnJldHVybiJFUzI1NiI7Y2FzZSJQLTM4NCI6cmV0dXJuIkVTMzg0IjtjYXNlIlAtNTIxIjpyZXR1cm4iRVM1MTIiO2RlZmF1bHQ6dGhyb3cgbmV3IFBaKCJ1bnN1cHBvcnRlZCBFY0tleUFsZ29yaXRobSBuYW1lZEN1cnZlIix7Y2F1c2U6JH0pfX1mdW5jdGlvbiBVRSgkKXtzd2l0Y2goJC5hbGdvcml0aG0ubmFtZSl7Y2FzZSJSU0EtUFNTIjpyZXR1cm4gUEUoJCk7Y2FzZSJSU0FTU0EtUEtDUzEtdjFfNSI6cmV0dXJuIEZFKCQpO2Nhc2UiRUNEU0EiOnJldHVybiBORSgkKTtjYXNlIkVkMjU1MTkiOmNhc2UiTUwtRFNBLTQ0IjpjYXNlIk1MLURTQS02NSI6Y2FzZSJNTC1EU0EtODciOnJldHVybiAkLmFsZ29yaXRobS5uYW1lO2Nhc2UiRWREU0EiOnJldHVybiJFZDI1NTE5IjtkZWZhdWx0OnRocm93IG5ldyBQWigidW5zdXBwb3J0ZWQgQ3J5cHRvS2V5IGFsZ29yaXRobSBuYW1lIix7Y2F1c2U6JH0pfX1mdW5jdGlvbiBEeigkKXtsZXQgWj0kPy5bYVJdO3JldHVybiB0eXBlb2YgWj09PSJudW1iZXIiJiZOdW1iZXIuaXNGaW5pdGUoWik/WjowfWZ1bmN0aW9uIEZMKCQpe2xldCBaPSQ/Llt0Ul07cmV0dXJuIHR5cGVvZiBaPT09Im51bWJlciImJk51bWJlci5pc0Zpbml0ZShaKSYmTWF0aC5zaWduKFopIT09LTE/WjozMH1mdW5jdGlvbiBRWSgpe3JldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCl9ZnVuY3Rpb24gTkwoJCl7aWYodHlwZW9mICQhPT0ib2JqZWN0Inx8JD09PW51bGwpdGhyb3cgWlooJyJhcyIgbXVzdCBiZSBhbiBvYmplY3QnLGlYKTtBeigkLmlzc3VlciwnImFzLmlzc3VlciInKX1hc3luYyBmdW5jdGlvbiBNRSgkLFosUSl7aWYoIVEudXNhZ2VzLmluY2x1ZGVzKCJzaWduIikpdGhyb3cgWlooJ0NyeXB0b0tleSBpbnN0YW5jZXMgdXNlZCBmb3Igc2lnbmluZyBhc3NlcnRpb25zIG11c3QgaW5jbHVkZSAic2lnbiIgaW4gdGhlaXIgInVzYWdlcyInLE5YKTtsZXQgWD1gJHt2OChzWChKU09OLnN0cmluZ2lmeSgkKSkpfS4ke3Y4KHNYKEpTT04uc3RyaW5naWZ5KFopKSl9YCxKPXY4KGF3YWl0IGNyeXB0by5zdWJ0bGUuc2lnbihDTChRKSxRLHNYKFgpKSk7cmV0dXJuYCR7WH0uJHtKfWB9YXN5bmMgZnVuY3Rpb24gTEUoJCxaKXtsZXR7a3R5OlEsZTpYLG46Six4OlcseTpZLGNydjpHLHB1YjpIfT1hd2FpdCBjcnlwdG8uc3VidGxlLmV4cG9ydEtleSgiandrIiwkKSx6PXtrdHk6USxlOlgsbjpKLHg6Vyx5OlksY3J2OkcscHViOkh9O2lmKFE9PT0iQUtQIil6LmFsZz1aO3JldHVybiBGei5zZXQoJCx6KSx6fWFzeW5jIGZ1bmN0aW9uIEFFKCQsWil7cmV0dXJuIEZ6fHw9bmV3IFdlYWtNYXAsRnouZ2V0KCQpfHxMRSgkLFopfWZ1bmN0aW9uIFVMKCQsWil7aWYoWiYmJC5wcm90b2NvbCE9PSJodHRwczoiKXRocm93IE0wKCJvbmx5IHJlcXVlc3RzIHRvIEhUVFBTIGFyZSBhbGxvd2VkIixnRSwkKTtpZigkLnByb3RvY29sIT09Imh0dHBzOiImJiQucHJvdG9jb2whPT0iaHR0cDoiKXRocm93IE0wKCJvbmx5IEhUVFAgYW5kIEhUVFBTIHJlcXVlc3RzIGFyZSBhbGxvd2VkIix4RSwkKX1mdW5jdGlvbiByTSgkLFosUSxYKXtsZXQgSjtpZih0eXBlb2YgJCE9PSJzdHJpbmcifHwhKEo9REUoJCkpKXRocm93IE0wKGBhdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgJHtRP2AiYXMubXRsc19lbmRwb2ludF9hbGlhc2VzLiR7Wn0iYDpgImFzLiR7Wn0iYH1gLCQ9PT12b2lkIDA/eUU6aEUse2F0dHJpYnV0ZTpRP2BtdGxzX2VuZHBvaW50X2FsaWFzZXMuJHtafWA6Wn0pO3JldHVybiBVTChKLFgpLEp9ZnVuY3Rpb24gT0UoJCxaLFEsWCl7aWYoUSYmJC5tdGxzX2VuZHBvaW50X2FsaWFzZXMmJlogaW4gJC5tdGxzX2VuZHBvaW50X2FsaWFzZXMpcmV0dXJuIHJNKCQubXRsc19lbmRwb2ludF9hbGlhc2VzW1pdLFosUSxYKTtyZXR1cm4gck0oJFtaXSxaLFEsWCl9Y2xhc3MgQ0V7I1o7I1E7I1g7I1c7I1k7IyQ7I0o7Y29uc3RydWN0b3IoJCxaLFEpe2lmKFFFKFo/LnByaXZhdGVLZXksJyJEUG9QLnByaXZhdGVLZXkiJyksWEUoWj8ucHVibGljS2V5LCciRFBvUC5wdWJsaWNLZXkiJyksIVoucHVibGljS2V5LmV4dHJhY3RhYmxlKXRocm93IFpaKCciRFBvUC5wdWJsaWNLZXkuZXh0cmFjdGFibGUiIG11c3QgYmUgdHJ1ZScsTlgpO3RoaXMuI1k9UT8uW2VSXSx0aGlzLiNXPUR6KCQpLHRoaXMuI1E9Wi5wcml2YXRlS2V5LHRoaXMuI1g9Wi5wdWJsaWNLZXksa0UuYWRkKHRoaXMpfSNHKCQpe3RoaXMuIyR8fD1uZXcgTWFwO2xldCBaPXRoaXMuIyQuZ2V0KCQpO2lmKFopdGhpcy4jJC5kZWxldGUoJCksdGhpcy4jJC5zZXQoJCxaKTtyZXR1cm4gWn0jSygkLFope2lmKHRoaXMuIyR8fD1uZXcgTWFwLHRoaXMuIyQuZGVsZXRlKCQpLHRoaXMuIyQuc2l6ZT09PTEwMCl0aGlzLiMkLmRlbGV0ZSh0aGlzLiMkLmtleXMoKS5uZXh0KCkudmFsdWUpO3RoaXMuIyQuc2V0KCQsWil9YXN5bmMgY2FsY3VsYXRlVGh1bWJwcmludCgpe2lmKCF0aGlzLiNKKXtsZXQgJD1hd2FpdCBjcnlwdG8uc3VidGxlLmV4cG9ydEtleSgiandrIix0aGlzLiNYKTt0aGlzLiNKfHw9YXdhaXQgV0woJCl9cmV0dXJuIHRoaXMuI0p9YXN5bmMgYWRkUHJvb2YoJCxaLFEsWCl7bGV0IEo9VUUodGhpcy4jUSk7dGhpcy4jWnx8PXthbGc6Six0eXA6ImRwb3Arand0Iixqd2s6YXdhaXQgQUUodGhpcy4jWCxKKX07bGV0IFc9dGhpcy4jRygkLm9yaWdpbiksRz17aWF0OlFZKCkrdGhpcy4jVyxqdGk6cUUoKSxodG06USxub25jZTpXLGh0dTpgJHskLm9yaWdpbn0keyQucGF0aG5hbWV9YCxhdGg6WD92OChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsc1goWCkpKTp2b2lkIDB9O3RoaXMuI1k/Lih0aGlzLiNaLEcpLFouc2V0KCJkcG9wIixhd2FpdCBNRSh0aGlzLiNaLEcsdGhpcy4jUSkpfWNhY2hlTm9uY2UoJCxaKXt0cnl7bGV0IFE9JC5oZWFkZXJzLmdldCgiZHBvcC1ub25jZSIpO2lmKFEpdGhpcy4jSyhaLm9yaWdpbixRKX1jYXRjaHt9fX1mdW5jdGlvbiBhTSgkLFosUSxYKXtpZihaWXx8PW5ldyBXZWFrTWFwLFpZLnNldCgkLHtqd2tzOlosdWF0OlEsZ2V0IGFnZSgpe3JldHVybiBRWSgpLXRoaXMudWF0fX0pLFgpT2JqZWN0LmFzc2lnbihYLHtqd2tzOnN0cnVjdHVyZWRDbG9uZShaKSx1YXQ6UX0pfWZ1bmN0aW9uIHdFKCQpe2lmKHR5cGVvZiAkIT09Im9iamVjdCJ8fCQ9PT1udWxsKXJldHVybiExO2lmKCEoInVhdCJpbiAkKXx8dHlwZW9mICQudWF0IT09Im51bWJlciJ8fFFZKCktJC51YXQ+PTMwMClyZXR1cm4hMTtpZighKCJqd2tzImluICQpfHwhaEooJC5qd2tzKXx8IUFycmF5LmlzQXJyYXkoJC5qd2tzLmtleXMpfHwhQXJyYXkucHJvdG90eXBlLmV2ZXJ5LmNhbGwoJC5qd2tzLmtleXMsaEopKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHRNKCQsWil7Wlk/LmRlbGV0ZSgkKSxkZWxldGUgWj8uandrcyxkZWxldGUgWj8udWF0fWFzeW5jIGZ1bmN0aW9uIE56KCQsWixRKXtsZXR7YWxnOlgsa2lkOkp9PVE7aWYoZkUoUSksIVpZPy5oYXMoJCkmJndFKFo/LlskWV0pKWFNKCQsWj8uWyRZXS5qd2tzLFo/LlskWV0udWF0KTtsZXQgVyxZO2lmKFpZPy5oYXMoJCkpe2lmKHtqd2tzOlcsYWdlOll9PVpZLmdldCgkKSxZPj0zMDApcmV0dXJuIHRNKCQsWj8uWyRZXSksTnooJCxaLFEpfWVsc2UgVz1hd2FpdCBiRSgkLFopLnRoZW4obUUpLFk9MCxhTSgkLFcsUVkoKSxaPy5bJFldKTtsZXQgRztzd2l0Y2goWC5zbGljZSgwLDIpKXtjYXNlIlJTIjpjYXNlIlBTIjpHPSJSU0EiO2JyZWFrO2Nhc2UiRVMiOkc9IkVDIjticmVhaztjYXNlIkVkIjpHPSJPS1AiO2JyZWFrO2Nhc2UiTUwiOkc9IkFLUCI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgUFooInVuc3VwcG9ydGVkIEpXUyBhbGdvcml0aG0iLHtjYXVzZTp7YWxnOlh9fSl9bGV0IEg9Vy5rZXlzLmZpbHRlcigoUCk9PntpZihQLmt0eSE9PUcpcmV0dXJuITE7aWYoSiE9PXZvaWQgMCYmSiE9PVAua2lkKXJldHVybiExO2lmKFAuYWxnIT09dm9pZCAwJiZYIT09UC5hbGcpcmV0dXJuITE7aWYoUC51c2UhPT12b2lkIDAmJlAudXNlIT09InNpZyIpcmV0dXJuITE7aWYoUC5rZXlfb3BzPy5pbmNsdWRlcygidmVyaWZ5Iik9PT0hMSlyZXR1cm4hMTtzd2l0Y2goITApe2Nhc2UoWD09PSJFUzI1NiImJlAuY3J2IT09IlAtMjU2Iik6Y2FzZShYPT09IkVTMzg0IiYmUC5jcnYhPT0iUC0zODQiKTpjYXNlKFg9PT0iRVM1MTIiJiZQLmNydiE9PSJQLTUyMSIpOmNhc2UoWD09PSJFZDI1NTE5IiYmUC5jcnYhPT0iRWQyNTUxOSIpOmNhc2UoWD09PSJFZERTQSImJlAuY3J2IT09IkVkMjU1MTkiKTpyZXR1cm4hMX1yZXR1cm4hMH0pLHswOnosbGVuZ3RoOnF9PUg7aWYoIXEpe2lmKFk+PTYwKXJldHVybiB0TSgkLFo/LlskWV0pLE56KCQsWixRKTt0aHJvdyBNMCgiZXJyb3Igd2hlbiBzZWxlY3RpbmcgYSBKV1QgdmVyaWZpY2F0aW9uIGtleSwgbm8gYXBwbGljYWJsZSBrZXlzIGZvdW5kIixlTSx7aGVhZGVyOlEsY2FuZGlkYXRlczpILGp3a3NfdXJpOm5ldyBVUkwoJC5qd2tzX3VyaSl9KX1pZihxIT09MSl0aHJvdyBNMCgnZXJyb3Igd2hlbiBzZWxlY3RpbmcgYSBKV1QgdmVyaWZpY2F0aW9uIGtleSwgbXVsdGlwbGUgYXBwbGljYWJsZSBrZXlzIGZvdW5kLCBhICJraWQiIEpXVCBIZWFkZXIgUGFyYW1ldGVyIGlzIHJlcXVpcmVkJyxlTSx7aGVhZGVyOlEsY2FuZGlkYXRlczpILGp3a3NfdXJpOm5ldyBVUkwoJC5qd2tzX3VyaSl9KTtyZXR1cm4gRUwoWCx6KX1mdW5jdGlvbiBNTCgkKXtyZXR1cm4gJC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik/LnNwbGl0KCI7IilbMF19ZnVuY3Rpb24gU0UoJCxaKXtpZihBcnJheS5pc0FycmF5KFouY2xhaW1zLmF1ZCkpe2lmKCFaLmNsYWltcy5hdWQuaW5jbHVkZXMoJCkpdGhyb3cgTTAoJ3VuZXhwZWN0ZWQgSldUICJhdWQiIChhdWRpZW5jZSkgY2xhaW0gdmFsdWUnLHg2LHtleHBlY3RlZDokLGNsYWltczpaLmNsYWltcyxjbGFpbToiYXVkIn0pfWVsc2UgaWYoWi5jbGFpbXMuYXVkIT09JCl0aHJvdyBNMCgndW5leHBlY3RlZCBKV1QgImF1ZCIgKGF1ZGllbmNlKSBjbGFpbSB2YWx1ZScseDYse2V4cGVjdGVkOiQsY2xhaW1zOlouY2xhaW1zLGNsYWltOiJhdWQifSk7cmV0dXJuIFp9ZnVuY3Rpb24gQkUoJCxaKXtsZXQgUT0kW2xFXT8uKFopPz8kLmlzc3VlcjtpZihaLmNsYWltcy5pc3MhPT1RKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAiaXNzIiAoaXNzdWVyKSBjbGFpbSB2YWx1ZScseDYse2V4cGVjdGVkOlEsY2xhaW1zOlouY2xhaW1zLGNsYWltOiJpc3MifSk7cmV0dXJuIFp9ZnVuY3Rpb24gTEwoJCxaKXtmb3IobGV0IFEgb2YgJClpZihaLmNsYWltc1tRXT09PXZvaWQgMCl0aHJvdyBNMChgSldUICIke1F9IiAoJHtJRVtRXX0pIGNsYWltIG1pc3NpbmdgLCRaLHtjbGFpbXM6Wi5jbGFpbXN9KTtyZXR1cm4gWn1mdW5jdGlvbiBETCgkLFope2lmKHR5cGVvZiBaLmhlYWRlci50eXAhPT0ic3RyaW5nInx8SkUoWi5oZWFkZXIudHlwKSE9PSQpdGhyb3cgTTAoJ3VuZXhwZWN0ZWQgSldUICJ0eXAiIGhlYWRlciBwYXJhbWV0ZXIgdmFsdWUnLCRaLHtoZWFkZXI6Wi5oZWFkZXJ9KTtyZXR1cm4gWn1mdW5jdGlvbiBPTCgkKXtpZigkLmJvZHlVc2VkKXRocm93IFpaKCcicmVzcG9uc2UiIGJvZHkgaGFzIGJlZW4gdXNlZCBhbHJlYWR5JyxOWCl9YXN5bmMgZnVuY3Rpb24gYkUoJCxaKXtOTCgkKTtsZXQgUT1PRSgkLCJqd2tzX3VyaSIsITEsWj8uW1hMXSE9PSEwKSxYPUdMKFo/LmhlYWRlcnMpO3JldHVybiBYLnNldCgiYWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpLFguYXBwZW5kKCJhY2NlcHQiLCJhcHBsaWNhdGlvbi9qd2stc2V0K2pzb24iKSwoWj8uW0pMXXx8ZmV0Y2gpKFEuaHJlZix7Ym9keTp2b2lkIDAsaGVhZGVyczpPYmplY3QuZnJvbUVudHJpZXMoWC5lbnRyaWVzKCkpLG1ldGhvZDoiR0VUIixyZWRpcmVjdDoibWFudWFsIixzaWduYWw6S0woUSxaPy5zaWduYWwpfSl9YXN5bmMgZnVuY3Rpb24gbUUoJCl7aWYoIXY1KCQsUmVzcG9uc2UpKXRocm93IFpaKCcicmVzcG9uc2UiIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgUmVzcG9uc2UnLGlYKTtpZigkLnN0YXR1cyE9PTIwMCl0aHJvdyBNMCgnInJlc3BvbnNlIiBpcyBub3QgYSBjb25mb3JtIEpTT04gV2ViIEtleSBTZXQgcmVzcG9uc2UgKHVuZXhwZWN0ZWQgSFRUUCBzdGF0dXMgY29kZSknLEFMLCQpO09MKCQpO2xldCBaPWF3YWl0IFNMKCQsKFEpPT5IRShRLCJhcHBsaWNhdGlvbi9qc29uIiwiYXBwbGljYXRpb24vandrLXNldCtqc29uIikpO2lmKCFBcnJheS5pc0FycmF5KFoua2V5cykpdGhyb3cgTTAoJyJyZXNwb25zZSIgYm9keSAia2V5cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheScsJFose2JvZHk6Wn0pO2lmKCFBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChaLmtleXMsaEopKXRocm93IE0wKCcicmVzcG9uc2UiIGJvZHkgImtleXMiIHByb3BlcnR5IG1lbWJlcnMgbXVzdCBiZSBKV0sgZm9ybWF0dGVkIG9iamVjdHMnLCRaLHtib2R5Olp9KTtyZXR1cm4gWn1mdW5jdGlvbiBPeigkKXtzd2l0Y2goJCl7Y2FzZSJQUzI1NiI6Y2FzZSJFUzI1NiI6Y2FzZSJSUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJFUzM4NCI6Y2FzZSJSUzM4NCI6Y2FzZSJQUzUxMiI6Y2FzZSJFUzUxMiI6Y2FzZSJSUzUxMiI6Y2FzZSJFZDI1NTE5IjpjYXNlIkVkRFNBIjpjYXNlIk1MLURTQS00NCI6Y2FzZSJNTC1EU0EtNjUiOmNhc2UiTUwtRFNBLTg3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBmRSgkKXtpZighT3ooJC5hbGcpKXRocm93IG5ldyBQWigndW5zdXBwb3J0ZWQgSldTICJhbGciIGlkZW50aWZpZXInLHtjYXVzZTp7YWxnOiQuYWxnfX0pfWZ1bmN0aW9uICRMKCQpe2xldHthbGdvcml0aG06Wn09JDtpZih0eXBlb2YgWi5tb2R1bHVzTGVuZ3RoIT09Im51bWJlciJ8fFoubW9kdWx1c0xlbmd0aDwyMDQ4KXRocm93IG5ldyBQWihgdW5zdXBwb3J0ZWQgJHtaLm5hbWV9IG1vZHVsdXNMZW5ndGhgLHtjYXVzZTokfSl9ZnVuY3Rpb24gdUUoJCl7bGV0e2FsZ29yaXRobTpafT0kO3N3aXRjaChaLm5hbWVkQ3VydmUpe2Nhc2UiUC0yNTYiOnJldHVybiJTSEEtMjU2IjtjYXNlIlAtMzg0IjpyZXR1cm4iU0hBLTM4NCI7Y2FzZSJQLTUyMSI6cmV0dXJuIlNIQS01MTIiO2RlZmF1bHQ6dGhyb3cgbmV3IFBaKCJ1bnN1cHBvcnRlZCBFQ0RTQSBuYW1lZEN1cnZlIix7Y2F1c2U6JH0pfX1mdW5jdGlvbiBDTCgkKXtzd2l0Y2goJC5hbGdvcml0aG0ubmFtZSl7Y2FzZSJFQ0RTQSI6cmV0dXJue25hbWU6JC5hbGdvcml0aG0ubmFtZSxoYXNoOnVFKCQpfTtjYXNlIlJTQS1QU1MiOnN3aXRjaCgkTCgkKSwkLmFsZ29yaXRobS5oYXNoLm5hbWUpe2Nhc2UiU0hBLTI1NiI6Y2FzZSJTSEEtMzg0IjpjYXNlIlNIQS01MTIiOnJldHVybntuYW1lOiQuYWxnb3JpdGhtLm5hbWUsc2FsdExlbmd0aDpwYXJzZUludCgkLmFsZ29yaXRobS5oYXNoLm5hbWUuc2xpY2UoLTMpLDEwKT4+M307ZGVmYXVsdDp0aHJvdyBuZXcgUFooInVuc3VwcG9ydGVkIFJTQS1QU1MgaGFzaCBuYW1lIix7Y2F1c2U6JH0pfWNhc2UiUlNBU1NBLVBLQ1MxLXYxXzUiOnJldHVybiAkTCgkKSwkLmFsZ29yaXRobS5uYW1lO2Nhc2UiTUwtRFNBLTQ0IjpjYXNlIk1MLURTQS02NSI6Y2FzZSJNTC1EU0EtODciOmNhc2UiRWQyNTUxOSI6cmV0dXJuICQuYWxnb3JpdGhtLm5hbWV9dGhyb3cgbmV3IFBaKCJ1bnN1cHBvcnRlZCBDcnlwdG9LZXkgYWxnb3JpdGhtIG5hbWUiLHtjYXVzZTokfSl9YXN5bmMgZnVuY3Rpb24gakwoJCxaLFEsWCl7bGV0IEo9c1goYCR7JH0uJHtafWApLFc9Q0woUSk7aWYoIWF3YWl0IGNyeXB0by5zdWJ0bGUudmVyaWZ5KFcsUSxYLEopKXRocm93IE0wKCJKV1Qgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQiLCRaLHtrZXk6USxkYXRhOkosc2lnbmF0dXJlOlgsYWxnb3JpdGhtOld9KX1hc3luYyBmdW5jdGlvbiBWTCgkLFosUSxYLEope2xldHswOlcsMTpZLGxlbmd0aDpHfT0kLnNwbGl0KCIuIik7aWYoRz09PTUpaWYoSiE9PXZvaWQgMCkkPWF3YWl0IEooJCksezA6VywxOlksbGVuZ3RoOkd9PSQuc3BsaXQoIi4iKTtlbHNlIHRocm93IG5ldyBQWigiSldFIGRlY3J5cHRpb24gaXMgbm90IGNvbmZpZ3VyZWQiLHtjYXVzZTokfSk7aWYoRyE9PTMpdGhyb3cgTTAoIkludmFsaWQgSldUIiwkWiwkKTtsZXQgSDt0cnl7SD1KU09OLnBhcnNlKHNYKHY4KFcpKSl9Y2F0Y2goUCl7dGhyb3cgTTAoImZhaWxlZCB0byBwYXJzZSBKV1QgSGVhZGVyIGJvZHkgYXMgYmFzZTY0dXJsIGVuY29kZWQgSlNPTiIsVXosUCl9aWYoIWhKKEgpKXRocm93IE0wKCJKV1QgSGVhZGVyIG11c3QgYmUgYSB0b3AgbGV2ZWwgb2JqZWN0IiwkWiwkKTtpZihaKEgpLEguY3JpdCE9PXZvaWQgMCl0aHJvdyBuZXcgUFooJ25vIEpXVCAiY3JpdCIgaGVhZGVyIHBhcmFtZXRlciBleHRlbnNpb25zIGFyZSBzdXBwb3J0ZWQnLHtjYXVzZTp7aGVhZGVyOkh9fSk7bGV0IHo7dHJ5e3o9SlNPTi5wYXJzZShzWCh2OChZKSkpfWNhdGNoKFApe3Rocm93IE0wKCJmYWlsZWQgdG8gcGFyc2UgSldUIFBheWxvYWQgYm9keSBhcyBiYXNlNjR1cmwgZW5jb2RlZCBKU09OIixVeixQKX1pZighaEooeikpdGhyb3cgTTAoIkpXVCBQYXlsb2FkIG11c3QgYmUgYSB0b3AgbGV2ZWwgb2JqZWN0IiwkWiwkKTtsZXQgcT1RWSgpK1E7aWYoei5leHAhPT12b2lkIDApe2lmKHR5cGVvZiB6LmV4cCE9PSJudW1iZXIiKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAiZXhwIiAoZXhwaXJhdGlvbiB0aW1lKSBjbGFpbSB0eXBlJywkWix7Y2xhaW1zOnp9KTtpZih6LmV4cDw9cS1YKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAiZXhwIiAoZXhwaXJhdGlvbiB0aW1lKSBjbGFpbSB2YWx1ZSwgZXhwaXJhdGlvbiBpcyBwYXN0IGN1cnJlbnQgdGltZXN0YW1wJyxNeix7Y2xhaW1zOnosbm93OnEsdG9sZXJhbmNlOlgsY2xhaW06ImV4cCJ9KX1pZih6LmlhdCE9PXZvaWQgMCl7aWYodHlwZW9mIHouaWF0IT09Im51bWJlciIpdGhyb3cgTTAoJ3VuZXhwZWN0ZWQgSldUICJpYXQiIChpc3N1ZWQgYXQpIGNsYWltIHR5cGUnLCRaLHtjbGFpbXM6en0pfWlmKHouaXNzIT09dm9pZCAwKXtpZih0eXBlb2Ygei5pc3MhPT0ic3RyaW5nIil0aHJvdyBNMCgndW5leHBlY3RlZCBKV1QgImlzcyIgKGlzc3VlcikgY2xhaW0gdHlwZScsJFose2NsYWltczp6fSl9aWYoei5uYmYhPT12b2lkIDApe2lmKHR5cGVvZiB6Lm5iZiE9PSJudW1iZXIiKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAibmJmIiAobm90IGJlZm9yZSkgY2xhaW0gdHlwZScsJFose2NsYWltczp6fSk7aWYoei5uYmY+cStYKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAibmJmIiAobm90IGJlZm9yZSkgY2xhaW0gdmFsdWUnLE16LHtjbGFpbXM6eixub3c6cSx0b2xlcmFuY2U6WCxjbGFpbToibmJmIn0pfWlmKHouYXVkIT09dm9pZCAwKXtpZih0eXBlb2Ygei5hdWQhPT0ic3RyaW5nIiYmIUFycmF5LmlzQXJyYXkoei5hdWQpKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAiYXVkIiAoYXVkaWVuY2UpIGNsYWltIHR5cGUnLCRaLHtjbGFpbXM6en0pfXJldHVybntoZWFkZXI6SCxjbGFpbXM6eixqd3Q6JH19ZnVuY3Rpb24gUkwoJCxaLFEsWCl7aWYoJCE9PXZvaWQgMCl7aWYodHlwZW9mICQ9PT0ic3RyaW5nIj9YLmFsZyE9PSQ6ISQuaW5jbHVkZXMoWC5hbGcpKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAiYWxnIiBoZWFkZXIgcGFyYW1ldGVyJywkWix7aGVhZGVyOlgsZXhwZWN0ZWQ6JCxyZWFzb246ImNsaWVudCBjb25maWd1cmF0aW9uIn0pO3JldHVybn1pZihBcnJheS5pc0FycmF5KFopKXtpZighWi5pbmNsdWRlcyhYLmFsZykpdGhyb3cgTTAoJ3VuZXhwZWN0ZWQgSldUICJhbGciIGhlYWRlciBwYXJhbWV0ZXInLCRaLHtoZWFkZXI6WCxleHBlY3RlZDpaLHJlYXNvbjoiYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGEifSk7cmV0dXJufWlmKFEhPT12b2lkIDApe2lmKHR5cGVvZiBRPT09InN0cmluZyI/WC5hbGchPT1ROnR5cGVvZiBRPT09ImZ1bmN0aW9uIj8hUShYLmFsZyk6IVEuaW5jbHVkZXMoWC5hbGcpKXRocm93IE0wKCd1bmV4cGVjdGVkIEpXVCAiYWxnIiBoZWFkZXIgcGFyYW1ldGVyJywkWix7aGVhZGVyOlgsZXhwZWN0ZWQ6USxyZWFzb246ImRlZmF1bHQgdmFsdWUifSk7cmV0dXJufXRocm93IE0wKCdtaXNzaW5nIGNsaWVudCBvciBzZXJ2ZXIgY29uZmlndXJhdGlvbiB0byB2ZXJpZnkgdXNlZCBKV1QgImFsZyIgaGVhZGVyIHBhcmFtZXRlcicsdm9pZCAwLHtjbGllbnQ6JCxpc3N1ZXI6WixmYWxsYmFjazpRfSl9ZnVuY3Rpb24gcEUoJCl7c3dpdGNoKCQpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnJldHVybntuYW1lOiJSU0EtUFNTIixoYXNoOmBTSEEtJHskLnNsaWNlKC0zKX1gfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0keyQuc2xpY2UoLTMpfWB9O2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOnJldHVybntuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTpgUC0keyQuc2xpY2UoLTMpfWB9O2Nhc2UiRVM1MTIiOnJldHVybntuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtjYXNlIkVkRFNBIjpyZXR1cm4iRWQyNTUxOSI7Y2FzZSJFZDI1NTE5IjpjYXNlIk1MLURTQS00NCI6Y2FzZSJNTC1EU0EtNjUiOmNhc2UiTUwtRFNBLTg3IjpyZXR1cm4gJDtkZWZhdWx0OnRocm93IG5ldyBQWigidW5zdXBwb3J0ZWQgSldTIGFsZ29yaXRobSIse2NhdXNlOnthbGc6JH19KX19YXN5bmMgZnVuY3Rpb24gRUwoJCxaKXtsZXR7ZXh0OlEsa2V5X29wczpYLHVzZTpKLC4uLld9PVo7cmV0dXJuIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLFcscEUoJCksITAsWyJ2ZXJpZnkiXSl9ZnVuY3Rpb24gSHooJCl7bGV0IFo9bmV3IFVSTCgkKTtyZXR1cm4gWi5zZWFyY2g9IiIsWi5oYXNoPSIiLFouaHJlZn1hc3luYyBmdW5jdGlvbiBjRSgkLFosUSxYKXtsZXQgSj0kLmhlYWRlcnMuZ2V0KCJkcG9wIik7aWYoSj09PW51bGwpdGhyb3cgTTAoIm9wZXJhdGlvbiBpbmRpY2F0ZWQgRFBvUCB1c2UgYnV0IHRoZSByZXF1ZXN0IGhhcyBubyBEUG9QIEhUVFAgSGVhZGVyIixGWCx7aGVhZGVyczokLmhlYWRlcnN9KTtpZigkLmhlYWRlcnMuZ2V0KCJhdXRob3JpemF0aW9uIik/LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiZHBvcCAiKT09PSExKXRocm93IE0wKCJvcGVyYXRpb24gaW5kaWNhdGVkIERQb1AgdXNlIGJ1dCB0aGUgcmVxdWVzdCdzIEF1dGhvcml6YXRpb24gSFRUUCBIZWFkZXIgc2NoZW1lIGlzIG5vdCBEUG9QIixGWCx7aGVhZGVyczokLmhlYWRlcnN9KTtpZih0eXBlb2YgUS5jbmY/LmprdCE9PSJzdHJpbmciKXRocm93IE0wKCJvcGVyYXRpb24gaW5kaWNhdGVkIERQb1AgdXNlIGJ1dCB0aGUgSldUIEFjY2VzcyBUb2tlbiBoYXMgbm8gamt0IGNvbmZpcm1hdGlvbiBjbGFpbSIsRlgse2NsYWltczpRfSk7bGV0IFc9RHooWCksWT1hd2FpdCBWTChKLFJMLmJpbmQodm9pZCAwLFg/LnNpZ25pbmdBbGdvcml0aG1zLHZvaWQgMCxPeiksVyxGTChYKSx2b2lkIDApLnRoZW4oREwuYmluZCh2b2lkIDAsImRwb3Arand0IikpLnRoZW4oTEwuYmluZCh2b2lkIDAsWyJpYXQiLCJqdGkiLCJhdGgiLCJodG0iLCJodHUiXSkpLEc9UVkoKStXO2lmKE1hdGguYWJzKEctWS5jbGFpbXMuaWF0KT4zMDApdGhyb3cgTTAoIkRQb1AgUHJvb2YgaWF0IGlzIG5vdCByZWNlbnQgZW5vdWdoIixNeix7bm93OkcsY2xhaW1zOlkuY2xhaW1zLGNsYWltOiJpYXQifSk7aWYoWS5jbGFpbXMuaHRtIT09JC5tZXRob2QpdGhyb3cgTTAoIkRQb1AgUHJvb2YgaHRtIG1pc21hdGNoIix4Nix7ZXhwZWN0ZWQ6JC5tZXRob2QsY2xhaW1zOlkuY2xhaW1zLGNsYWltOiJodG0ifSk7aWYodHlwZW9mIFkuY2xhaW1zLmh0dSE9PSJzdHJpbmcifHxIeihZLmNsYWltcy5odHUpIT09SHooJC51cmwpKXRocm93IE0wKCJEUG9QIFByb29mIGh0dSBtaXNtYXRjaCIseDYse2V4cGVjdGVkOkh6KCQudXJsKSxjbGFpbXM6WS5jbGFpbXMsY2xhaW06Imh0dSJ9KTt7bGV0IFI9djgoYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLHNYKFopKSk7aWYoWS5jbGFpbXMuYXRoIT09Uil0aHJvdyBNMCgiRFBvUCBQcm9vZiBhdGggbWlzbWF0Y2giLHg2LHtleHBlY3RlZDpSLGNsYWltczpZLmNsYWltcyxjbGFpbToiYXRoIn0pfWxldHtqd2s6eixhbGc6cX09WS5oZWFkZXI7aWYoIWhKKHopKXRocm93IE0wKCJEUG9QIFByb29mIGp3ayBoZWFkZXIgcGFyYW1ldGVyIG11c3QgYmUgYSBKU09OIG9iamVjdCIsRlgse2hlYWRlcjpZLmhlYWRlcn0pO3tsZXQgUj1hd2FpdCBXTCh6KTtpZihRLmNuZi5qa3QhPT1SKXRocm93IE0wKCJKV1QgQWNjZXNzIFRva2VuIGNvbmZpcm1hdGlvbiBtaXNtYXRjaCIseDYse2V4cGVjdGVkOlIsY2xhaW1zOlEsY2xhaW06ImNuZi5qa3QifSl9bGV0ezA6UCwxOlUsMjpNfT1KLnNwbGl0KCIuIiksTD12OChNKSxEPWF3YWl0IEVMKHEseik7aWYoRC50eXBlIT09InB1YmxpYyIpdGhyb3cgTTAoIkRQb1AgUHJvb2YgandrIGhlYWRlciBwYXJhbWV0ZXIgbXVzdCBjb250YWluIGEgcHVibGljIGtleSIsRlgse2hlYWRlcjpZLmhlYWRlcn0pO2F3YWl0IGpMKFAsVSxELEwpfWFzeW5jIGZ1bmN0aW9uIHdMKCQsWixRLFgpe2lmKE5MKCQpLCF2NShaLFJlcXVlc3QpKXRocm93IFpaKCcicmVxdWVzdCIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBSZXF1ZXN0JyxpWCk7QXooUSwnImV4cGVjdGVkQXVkaWVuY2UiJyk7bGV0IEo9Wi5oZWFkZXJzLmdldCgiYXV0aG9yaXphdGlvbiIpO2lmKEo9PT1udWxsKXRocm93IE0wKCcicmVxdWVzdCIgaXMgbWlzc2luZyBhbiBBdXRob3JpemF0aW9uIEhUVFAgSGVhZGVyJyxGWCx7aGVhZGVyczpaLmhlYWRlcnN9KTtsZXR7MDpXLDE6WSxsZW5ndGg6R309Si5zcGxpdCgiICIpO3N3aXRjaChXPVcudG9Mb3dlckNhc2UoKSxXKXtjYXNlImRwb3AiOmNhc2UiYmVhcmVyIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBQWigidW5zdXBwb3J0ZWQgQXV0aG9yaXphdGlvbiBIVFRQIEhlYWRlciBzY2hlbWUiLHtjYXVzZTp7aGVhZGVyczpaLmhlYWRlcnN9fSl9aWYoRyE9PTIpdGhyb3cgTTAoImludmFsaWQgQXV0aG9yaXphdGlvbiBIVFRQIEhlYWRlciBmb3JtYXQiLEZYLHtoZWFkZXJzOlouaGVhZGVyc30pO2xldCBIPVsiaXNzIiwiZXhwIiwiYXVkIiwic3ViIiwiaWF0IiwianRpIiwiY2xpZW50X2lkIl07aWYoWD8ucmVxdWlyZURQb1B8fFc9PT0iZHBvcCJ8fFouaGVhZGVycy5oYXMoImRwb3AiKSlILnB1c2goImNuZiIpO2xldHtjbGFpbXM6eixoZWFkZXI6cX09YXdhaXQgVkwoWSxSTC5iaW5kKHZvaWQgMCxYPy5zaWduaW5nQWxnb3JpdGhtcyx2b2lkIDAsT3opLER6KFgpLEZMKFgpLHZvaWQgMCkudGhlbihETC5iaW5kKHZvaWQgMCwiYXQrand0IikpLnRoZW4oTEwuYmluZCh2b2lkIDAsSCkpLnRoZW4oQkUuYmluZCh2b2lkIDAsJCkpLnRoZW4oU0UuYmluZCh2b2lkIDAsUSkpLmNhdGNoKFpMKTtmb3IobGV0IFIgb2ZbImNsaWVudF9pZCIsImp0aSIsInN1YiJdKWlmKHR5cGVvZiB6W1JdIT09InN0cmluZyIpdGhyb3cgTTAoYHVuZXhwZWN0ZWQgSldUICIke1J9IiBjbGFpbSB0eXBlYCxGWCx7Y2xhaW1zOnp9KTtpZigiY25mImluIHope2lmKCFoSih6LmNuZikpdGhyb3cgTTAoJ3VuZXhwZWN0ZWQgSldUICJjbmYiIChjb25maXJtYXRpb24pIGNsYWltIHZhbHVlJyxGWCx7Y2xhaW1zOnp9KTtsZXR7MDpSLGxlbmd0aDpWfT1PYmplY3Qua2V5cyh6LmNuZik7aWYoVil7aWYoViE9PTEpdGhyb3cgbmV3IFBaKCJtdWx0aXBsZSBjb25maXJtYXRpb24gY2xhaW1zIGFyZSBub3Qgc3VwcG9ydGVkIix7Y2F1c2U6e2NsYWltczp6fX0pO2lmKFIhPT0iamt0Iil0aHJvdyBuZXcgUFooInVuc3VwcG9ydGVkIEpXVCBDb25maXJtYXRpb24gbWV0aG9kIix7Y2F1c2U6e2NsYWltczp6fX0pfX1sZXR7MDpQLDE6VSwyOk19PVkuc3BsaXQoIi4iKSxMPXY4KE0pLEQ9YXdhaXQgTnooJCxYLHEpO2lmKGF3YWl0IGpMKFAsVSxELEwpLFg/LnJlcXVpcmVEUG9QfHxXPT09ImRwb3AifHx6LmNuZj8uamt0IT09dm9pZCAwfHxaLmhlYWRlcnMuaGFzKCJkcG9wIikpYXdhaXQgY0UoWixZLHosWCkuY2F0Y2goWkwpO3JldHVybiB6fWZ1bmN0aW9uIFpMKCQpe2lmKCQgaW5zdGFuY2VvZiBMeiYmJD8uY29kZT09PUZYKSQuY29kZT0kWjt0aHJvdyAkfWFzeW5jIGZ1bmN0aW9uIFNMKCQsWj1LRSl7bGV0IFE7dHJ5e1E9YXdhaXQgJC5qc29uKCl9Y2F0Y2goWCl7dGhyb3cgWigkKSxNMCgnZmFpbGVkIHRvIHBhcnNlICJyZXNwb25zZSIgYm9keSBhcyBKU09OJyxVeixYKX1pZighaEooUSkpdGhyb3cgTTAoJyJyZXNwb25zZSIgYm9keSBtdXN0IGJlIGEgdG9wIGxldmVsIG9iamVjdCcsJFose2JvZHk6UX0pO3JldHVybiBRfXZhciB6eixOWD0iRVJSX0lOVkFMSURfQVJHX1ZBTFVFIixpWD0iRVJSX0lOVkFMSURfQVJHX1RZUEUiLFhMLGFSLHRSLEpMLGVSLGJjLCRZLCRFLFpFLHF6LFB6LFBaLEx6LEZ6LERFLHg1PSJbYS16QS1aMC05ISMkJSZcXCdcXCpcXCtcXC1cXC5cXF5fYFxcfH5dKyIsakU9IlthLXpBLVowLTlcXC1cXC5fXFx+XFwrXFwvXSs9ezAsMn0iLFZFPSciKCg/OlteIlxcXFxdfFxcXFxbXFxzXFxTXSkqKSInLFJFLEVFLG1jLGZjLHVjLHBjLFpZLGNjLGtFLGxjLElFLGRjLG5jLF9FPSJPQVVUSF9VTlNVUFBPUlRFRF9PUEVSQVRJT04iLFV6PSJPQVVUSF9QQVJTRV9FUlJPUiIsJFo9Ik9BVVRIX0lOVkFMSURfUkVTUE9OU0UiLEZYPSJPQVVUSF9JTlZBTElEX1JFUVVFU1QiLFRFPSJPQVVUSF9SRVNQT05TRV9JU19OT1RfSlNPTiIsQUw9Ik9BVVRIX1JFU1BPTlNFX0lTX05PVF9DT05GT1JNIixnRT0iT0FVVEhfSFRUUF9SRVFVRVNUX0ZPUkJJRERFTiIseEU9Ik9BVVRIX1JFUVVFU1RfUFJPVE9DT0xfRk9SQklEREVOIixNej0iT0FVVEhfSldUX1RJTUVTVEFNUF9DSEVDS19GQUlMRUQiLHg2PSJPQVVUSF9KV1RfQ0xBSU1fQ09NUEFSSVNPTl9GQUlMRUQiLHZFPSJPQVVUSF9KU09OX0FUVFJJQlVURV9DT01QQVJJU09OX0ZBSUxFRCIsZU09Ik9BVVRIX0tFWV9TRUxFQ1RJT05fRkFJTEVEIix5RT0iT0FVVEhfTUlTU0lOR19TRVJWRVJfTUVUQURBVEEiLGhFPSJPQVVUSF9JTlZBTElEX1NFUlZFUl9NRVRBREFUQSIsb2Msc2MsUUwsbEU7dmFyIEJMPU8oKCk9PntpZih0eXBlb2YgbmF2aWdhdG9yPiJ1Inx8IW5hdmlnYXRvci51c2VyQWdlbnQ/LnN0YXJ0c1dpdGg/LigiTW96aWxsYS81LjAgIikpeno9Im9hdXRoNHdlYmFwaS92My44LjciO1hMPVN5bWJvbCgpLGFSPVN5bWJvbCgpLHRSPVN5bWJvbCgpLEpMPVN5bWJvbCgpLGVSPVN5bWJvbCgpLGJjPVN5bWJvbCgpLCRZPVN5bWJvbCgpLCRFPW5ldyBUZXh0RW5jb2RlcixaRT1uZXcgVGV4dERlY29kZXI7aWYoVWludDhBcnJheS5wcm90b3R5cGUudG9CYXNlNjQpcXo9KCQpPT57aWYoJCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSQ9bmV3IFVpbnQ4QXJyYXkoJCk7cmV0dXJuICQudG9CYXNlNjQoe2FscGhhYmV0OiJiYXNlNjR1cmwiLG9taXRQYWRkaW5nOiEwfSl9O2Vsc2UgcXo9KFopPT57aWYoWiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKVo9bmV3IFVpbnQ4QXJyYXkoWik7bGV0IFE9W107Zm9yKGxldCBYPTA7WDxaLmJ5dGVMZW5ndGg7WCs9MzI3NjgpUS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxaLnN1YmFycmF5KFgsWCszMjc2OCkpKTtyZXR1cm4gYnRvYShRLmpvaW4oIiIpKS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9O2lmKFVpbnQ4QXJyYXkuZnJvbUJhc2U2NClQej0oJCk9Pnt0cnl7cmV0dXJuIFVpbnQ4QXJyYXkuZnJvbUJhc2U2NCgkLHthbHBoYWJldDoiYmFzZTY0dXJsIn0pfWNhdGNoKFope3Rocm93IFpaKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIixOWCxaKX19O2Vsc2UgUHo9KCQpPT57dHJ5e2xldCBaPWF0b2IoJC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKSksUT1uZXcgVWludDhBcnJheShaLmxlbmd0aCk7Zm9yKGxldCBYPTA7WDxaLmxlbmd0aDtYKyspUVtYXT1aLmNoYXJDb2RlQXQoWCk7cmV0dXJuIFF9Y2F0Y2goWil7dGhyb3cgWlooIlRoZSBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iLE5YLFopfX07UFo9Y2xhc3MgUFogZXh0ZW5kcyBFcnJvcntjb2RlO2NvbnN0cnVjdG9yKCQsWil7c3VwZXIoJCxaKTt0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1fRSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT8uKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9fTtMej1jbGFzcyBMeiBleHRlbmRzIEVycm9ye2NvZGU7Y29uc3RydWN0b3IoJCxaKXtzdXBlcigkLFopO2lmKHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsWj8uY29kZSl0aGlzLmNvZGU9Wj8uY29kZTtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT8uKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9fTtERT1VUkwucGFyc2U/KCQsWik9PlVSTC5wYXJzZSgkLFopOigkLFopPT57dHJ5e3JldHVybiBuZXcgVVJMKCQsWil9Y2F0Y2h7cmV0dXJuIG51bGx9fTtSRT0iKCIreDUrIilcXHMqPVxccyoiK1ZFLEVFPSIoIit4NSsiKVxccyo9XFxzKigiK3g1KyIpIixtYz1uZXcgUmVnRXhwKCJeWyxcXHNdKigiK3g1KyIpIiksZmM9bmV3IFJlZ0V4cCgiXlssXFxzXSoiK1JFKyJbLFxcc10qKC4qKSIpLHVjPW5ldyBSZWdFeHAoIl5bLFxcc10qIitFRSsiWyxcXHNdKiguKikiKSxwYz1uZXcgUmVnRXhwKCJeKCIrakUrIikoPzokfFssXFxzXSkoLiopIik7Y2M9U3ltYm9sKCk7a0U9bmV3IFdlYWtTZXQsbGM9U3ltYm9sKCksSUU9e2F1ZDoiYXVkaWVuY2UiLGNfaGFzaDoiY29kZSBoYXNoIixjbGllbnRfaWQ6ImNsaWVudCBpZCIsZXhwOiJleHBpcmF0aW9uIHRpbWUiLGlhdDoiaXNzdWVkIGF0Iixpc3M6Imlzc3VlciIsanRpOiJqd3QgaWQiLG5vbmNlOiJub25jZSIsc19oYXNoOiJzdGF0ZSBoYXNoIixzdWI6InN1YmplY3QiLGF0aDoiYWNjZXNzIHRva2VuIGhhc2giLGh0bToiaHR0cCBtZXRob2QiLGh0dToiaHR0cCB1cmkiLGNuZjoiY29uZmlybWF0aW9uIixhdXRoX3RpbWU6ImF1dGhlbnRpY2F0aW9uIHRpbWUifTtkYz1TeW1ib2woKSxuYz1TeW1ib2woKTtvYz1TeW1ib2woKSxzYz1TeW1ib2woKTtRTD1TeW1ib2woKSxsRT1TeW1ib2woKX0pO2Z1bmN0aW9uIEN6KCQpe2xldCBaPSQucHJpbmNpcGFsQ2xhaW0/PyJzdWIiLFE9JC5kb21haW4/PyJqd3QiLFg9JC5hdWRpZW5jZSxKPW51bGw7YXN5bmMgZnVuY3Rpb24gVygpe2lmKCQuandrc1VyaSlyZXR1cm57aXNzdWVyOiQuaXNzdWVyLGp3a3NfdXJpOiQuandrc1VyaX07bGV0IFk9bmV3IFVSTCgkLmlzc3VlciksRz1hd2FpdCB6TChZKTtyZXR1cm4gcUwoWSxHKX1yZXR1cm4gYXN5bmMgZnVuY3Rpb24oRyl7aWYoIUopSj1XKCk7bGV0IEg7dHJ5e0g9YXdhaXQgSn1jYXRjaChNKXt0aHJvdyBKPW51bGwsTX1sZXQgej1BcnJheS5pc0FycmF5KFgpP1g6W1hdLHEsUDtmb3IobGV0IE0gb2Ygeil0cnl7cT1hd2FpdCB3TChILEcsTSk7YnJlYWt9Y2F0Y2goTCl7UD1MfWlmKCFxKXRocm93IFA7bGV0IFU9cVtaXT8/bnVsbDtyZXR1cm4gbmV3IHpaKFEsITAsVSxxKX19dmFyIGtMPU8oKCk9PntCTCgpO3E2KCl9KTtmdW5jdGlvbiBfTCgpe2xldCAkPWltcG9ydC5tZXRhLnJlcXVpcmU/P2dsb2JhbFRoaXMucmVxdWlyZT8/bnVsbDtpZighJCl0aHJvdyBFcnJvcigibVRMUyBQRU0tYmFzZWQgYXV0aGVudGljYXRpb24gcmVxdWlyZXMgTm9kZS5qcyBvciBCdW4gKG5vZGU6Y3J5cHRvKS4iKTtsZXQgWj0kKG5FKTtyZXR1cm57WDUwOUNlcnRpZmljYXRlOlouWDUwOUNlcnRpZmljYXRlLGNyZWF0ZUhhc2g6Wi5jcmVhdGVIYXNofX1mdW5jdGlvbiBJTCgkLFope2xldCBRPVtdLFg9W10sSj0hMSxXPTA7d2hpbGUoVzwkLmxlbmd0aCl7bGV0IFk9JFtXXTtpZihZPT09JyInKUo9IUosWC5wdXNoKFkpO2Vsc2UgaWYoWT09PSJcXCImJkomJlcrMTwkLmxlbmd0aClYLnB1c2goWSksWC5wdXNoKCRbVysxXSksVysrO2Vsc2UgaWYoWT09PVomJiFKKVEucHVzaChYLmpvaW4oIiIpKSxYPVtdO2Vsc2UgWC5wdXNoKFkpO1crK31yZXR1cm4gUS5wdXNoKFguam9pbigiIikpLFF9ZnVuY3Rpb24gb0UoJCl7cmV0dXJuICQucmVwbGFjZSgvXFwoLikvZywiJDEiKX1mdW5jdGlvbiBzRSgkKXtmb3IobGV0IFogb2YgJC5zcGxpdCgvKD88IVxcKSwvKSl7bGV0IFE9Wi50cmltKCk7aWYoUS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoIkNOPSIpKXJldHVybiBRLnNsaWNlKDMpfXJldHVybiIifWZ1bmN0aW9uIHk1KCQpe2xldCBaPVtdO2ZvcihsZXQgUSBvZiBJTCgkLCIsIikpe2xldCBYPVEudHJpbSgpO2lmKCFYKWNvbnRpbnVlO2xldCBKPUlMKFgsIjsiKSxXPXt9O2ZvcihsZXQgRyBvZiBKKXtsZXQgSD1HLnRyaW0oKTtpZighSCljb250aW51ZTtsZXQgej1ILmluZGV4T2YoIj0iKTtpZih6PDApY29udGludWU7bGV0IHE9SC5zbGljZSgwLHopLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFA9SC5zbGljZSh6KzEpLnRyaW0oKTtpZihQLmxlbmd0aD49MiYmUFswXT09PSciJyYmUFtQLmxlbmd0aC0xXT09PSciJylQPW9FKFAuc2xpY2UoMSwtMSkpO2lmKHE9PT0iY2VydCJ8fHE9PT0idXJpInx8cT09PSJieSIpUD1kZWNvZGVVUklDb21wb25lbnQoUCk7aWYocT09PSJkbnMiKXtsZXQgVT1XLmRucztpZihBcnJheS5pc0FycmF5KFUpKVUucHVzaChQKTtlbHNlIFcuZG5zPVtQXX1lbHNlIFdbcV09UH1sZXQgWT1BcnJheS5pc0FycmF5KFcuZG5zKT9XLmRuczpbXTtaLnB1c2goe2hhc2g6dHlwZW9mIFcuaGFzaD09PSJzdHJpbmciP1cuaGFzaDpudWxsLGNlcnQ6dHlwZW9mIFcuY2VydD09PSJzdHJpbmciP1cuY2VydDpudWxsLHN1YmplY3Q6dHlwZW9mIFcuc3ViamVjdD09PSJzdHJpbmciP1cuc3ViamVjdDpudWxsLHVyaTp0eXBlb2YgVy51cmk9PT0ic3RyaW5nIj9XLnVyaTpudWxsLGRuczpZLGJ5OnR5cGVvZiBXLmJ5PT09InN0cmluZyI/Vy5ieTpudWxsfSl9cmV0dXJuIFp9ZnVuY3Rpb24ganooJCl7bGV0IFo9JD8udmFsaWRhdGUsUT0kPy5kb21haW4/PyJtdGxzIixYPSQ/LnNlbGVjdEVsZW1lbnQ/PyJmaXJzdCI7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKFcpe2xldCBZPVcuaGVhZGVycy5nZXQoIngtZm9yd2FyZGVkLWNsaWVudC1jZXJ0Iik7aWYoIVkpdGhyb3cgRXJyb3IoIk1pc3NpbmcgeC1mb3J3YXJkZWQtY2xpZW50LWNlcnQgaGVhZGVyIik7bGV0IEc9eTUoWSk7aWYoRy5sZW5ndGg9PT0wKXRocm93IEVycm9yKCJFbXB0eSB4LWZvcndhcmRlZC1jbGllbnQtY2VydCBoZWFkZXIiKTtsZXQgSD1YPT09ImZpcnN0Ij9HWzBdOkdbRy5sZW5ndGgtMV07aWYoWilyZXR1cm4gWihIKTtsZXQgej1ILnN1YmplY3Q/c0UoSC5zdWJqZWN0KToiIixxPXt9O2lmKEguaGFzaClxLmhhc2g9SC5oYXNoO2lmKEguc3ViamVjdClxLnN1YmplY3Q9SC5zdWJqZWN0O2lmKEgudXJpKXEudXJpPUgudXJpO2lmKEguZG5zLmxlbmd0aD4wKXEuZG5zPVsuLi5ILmRuc107aWYoSC5ieSlxLmJ5PUguYnk7cmV0dXJuIG5ldyB6WihRLCEwLHoscSl9fWZ1bmN0aW9uIGlFKCQsWil7bGV0IFE9JC5oZWFkZXJzLmdldChaKTtpZighUSl0aHJvdyBFcnJvcihgTWlzc2luZyAke1p9IGhlYWRlcmApO2xldCBYPWRlY29kZVVSSUNvbXBvbmVudChRKTtpZighWC5zdGFydHNXaXRoKCItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0iKSl0aHJvdyBFcnJvcigiSGVhZGVyIHZhbHVlIGlzIG5vdCBhIFBFTSBjZXJ0aWZpY2F0ZSIpO2xldHtYNTA5Q2VydGlmaWNhdGU6Sn09X0woKTt0cnl7cmV0dXJuIG5ldyBKKFgpfWNhdGNoKFcpe3Rocm93IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgUEVNIGNlcnRpZmljYXRlOiAke1d9YCl9fWZ1bmN0aW9uIHJFKCQpe2xldCBaPW5ldyBEYXRlLFE9bmV3IERhdGUoJC52YWxpZEZyb20pLFg9bmV3IERhdGUoJC52YWxpZFRvKTtpZihaPFEpdGhyb3cgRXJyb3IoIkNlcnRpZmljYXRlIGlzIG5vdCB5ZXQgdmFsaWQiKTtpZihaPlgpdGhyb3cgRXJyb3IoIkNlcnRpZmljYXRlIGhhcyBleHBpcmVkIil9ZnVuY3Rpb24gaDEoJCl7bGV0e3ZhbGlkYXRlOlosaGVhZGVyOlE9IlgtU1NMLUNsaWVudC1DZXJ0IixjaGVja0V4cGlyeTpYPSExfT0kO3JldHVybiBhc3luYyBmdW5jdGlvbihXKXtsZXQgWT1pRShXLFEpO2lmKFgpckUoWSk7cmV0dXJuIFooWSl9fWZ1bmN0aW9uIFZ6KCQpe2xldHtmaW5nZXJwcmludHM6WixoZWFkZXI6USxhbGdvcml0aG06WD0ic2hhMjU2IixjaGVja0V4cGlyeTpKfT0kO2lmKCFhRS5oYXMoWCkpdGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtOiAke1h9YCk7bGV0IFc9WiBpbnN0YW5jZW9mIE1hcD9aOm5ldyBNYXAoT2JqZWN0LmVudHJpZXMoWikpO2Z1bmN0aW9uIFkoRyl7bGV0e2NyZWF0ZUhhc2g6SH09X0woKSx6PUgoWCkudXBkYXRlKEcucmF3KS5kaWdlc3QoImhleCIpLHE9Vy5nZXQoeik7aWYoIXEpdGhyb3cgRXJyb3IoYFVua25vd24gY2VydGlmaWNhdGUgZmluZ2VycHJpbnQ6ICR7en1gKTtyZXR1cm4gcX1yZXR1cm4gaDEoe3ZhbGlkYXRlOlksaGVhZGVyOlEsY2hlY2tFeHBpcnk6Sn0pfWZ1bmN0aW9uIFJ6KCQpe2xldHtoZWFkZXI6Wixkb21haW46UT0ibXRscyIsYWxsb3dlZFN1YmplY3RzOlg9bnVsbCxjaGVja0V4cGlyeTpKfT0kPz97fTtmdW5jdGlvbiBXKFkpe2xldCBHPVkuc3ViamVjdC5zcGxpdChgCmApLm1hcCgoVSk9PlUudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksSD1HLmpvaW4oIiwgIiksej0iIjtmb3IobGV0IFUgb2YgRylpZihVLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aCgiQ049Iikpe3o9VS5zbGljZSgzKTticmVha31pZihYIT09bnVsbCYmIVguaGFzKHopKXRocm93IEVycm9yKGBTdWJqZWN0IENOICcke3p9JyBub3QgaW4gYWxsb3dlZCBzdWJqZWN0c2ApO2xldCBxPUJpZ0ludChgMHgke1kuc2VyaWFsTnVtYmVyfWApLnRvU3RyaW5nKDE2KSxQPW5ldyBEYXRlKFkudmFsaWRUbykudG9JU09TdHJpbmcoKTtyZXR1cm4gbmV3IHpaKFEsITAseix7c3ViamVjdF9kbjpILHNlcmlhbDpxLG5vdF92YWxpZF9hZnRlcjpQfSl9cmV0dXJuIGgxKHt2YWxpZGF0ZTpXLGhlYWRlcjpaLGNoZWNrRXhwaXJ5Okp9KX12YXIgbkU9Im5vZGU6Y3J5cHRvIixhRTt2YXIgVEw9TygoKT0+e3E2KCk7YUU9bmV3IFNldChbInNoYTI1NiIsInNoYTEiLCJzaGEzODQiLCJzaGE1MTIiXSl9KTtmdW5jdGlvbiB2NigkKXtsZXQgWj14TCgkKTtpZihaKXJldHVybiBaLmpvaW4oIi4iKTtpZighJC5pbmNsdWRlcygiOiIpfHwkLmluY2x1ZGVzKCIlIil8fCQuaW5jbHVkZXMoIlsiKXx8JC5pbmNsdWRlcygiXSIpKXJldHVybiBudWxsO2xldCBRPSQudG9Mb3dlckNhc2UoKS5zcGxpdCgiOjoiKTtpZihRLmxlbmd0aD4yKXJldHVybiBudWxsO2xldCBYPWdMKFFbMF0sUS5sZW5ndGg9PT0xKSxKPWdMKFEubGVuZ3RoPT09Mj9RWzFdOiIiLCEwKTtpZighWHx8IUopcmV0dXJuIG51bGw7bGV0IFc7aWYoUS5sZW5ndGg9PT0xKXtpZihYLmxlbmd0aCE9PTgpcmV0dXJuIG51bGw7Vz1YfWVsc2V7bGV0IHE9OC1YLmxlbmd0aC1KLmxlbmd0aDtpZihxPDEpcmV0dXJuIG51bGw7Vz1bLi4uWCwuLi5BcnJheShxKS5maWxsKDApLC4uLkpdfWlmKFcubGVuZ3RoIT09OClyZXR1cm4gbnVsbDtpZihXLnNsaWNlKDAsNSkuZXZlcnkoKHEpPT5xPT09MCkmJldbNV09PT02NTUzNSlyZXR1cm5gJHtXWzZdPj4+OH0uJHtXWzZdJjI1NX0uJHtXWzddPj4+OH0uJHtXWzddJjI1NX1gO2xldCBZPS0xLEc9MDtmb3IobGV0IHE9MDtxPFcubGVuZ3RoOyl7aWYoV1txXSE9PTApe3ErKztjb250aW51ZX1sZXQgUD1xO3doaWxlKFA8Vy5sZW5ndGgmJldbUF09PT0wKVArKztpZihQLXE+RyYmUC1xPj0yKVk9cSxHPVAtcTtxPVB9aWYoWTwwKXJldHVybiBXLm1hcCgocSk9PnEudG9TdHJpbmcoMTYpKS5qb2luKCI6Iik7bGV0IEg9Vy5zbGljZSgwLFkpLm1hcCgocSk9PnEudG9TdHJpbmcoMTYpKS5qb2luKCI6Iiksej1XLnNsaWNlKFkrRykubWFwKChxKT0+cS50b1N0cmluZygxNikpLmpvaW4oIjoiKTtyZXR1cm5gJHtIfTo6JHt6fWB9ZnVuY3Rpb24gaDUoJCxaKXtsZXQgUT1uZXcgU2V0LFg9MDtmb3IobGV0IEogb2YgJCl7WCsrO2xldCBXPXY2KEopO2lmKCFXKXRocm93IFR5cGVFcnJvcihgJHtafSBtdXN0IGNvbnRhaW4gZXhhY3QgSVAgbGl0ZXJhbHNgKTtpZihRLmhhcyhXKSl0aHJvdyBUeXBlRXJyb3IoYCR7Wn0gY29udGFpbnMgYSBkdXBsaWNhdGUgbm9ybWFsaXplZCBhZGRyZXNzYCk7US5hZGQoVyl9aWYoWD09PTApdGhyb3cgVHlwZUVycm9yKGAke1p9IG11c3Qgbm90IGJlIGVtcHR5YCk7cmV0dXJuIFF9ZnVuY3Rpb24geEwoJCl7bGV0IFo9JC5zcGxpdCgiLiIpO2lmKFoubGVuZ3RoIT09NClyZXR1cm4gbnVsbDtsZXQgUT1bXTtmb3IobGV0IFggb2YgWil7aWYoIS9eKD86MHxbMS05XVswLTldezAsMn0pJC91LnRlc3QoWCkpcmV0dXJuIG51bGw7bGV0IEo9TnVtYmVyKFgpO2lmKEo+MjU1KXJldHVybiBudWxsO1EucHVzaChKKX1yZXR1cm4gUX1mdW5jdGlvbiBnTCgkLFope2lmKCQ9PT0iIilyZXR1cm5bXTtsZXQgUT0kLnNwbGl0KCI6IiksWD1bXTtmb3IobGV0IEo9MDtKPFEubGVuZ3RoO0orKyl7bGV0IFc9UVtKXTtpZihXLmluY2x1ZGVzKCIuIikpe2lmKCFafHxKIT09US5sZW5ndGgtMSlyZXR1cm4gbnVsbDtsZXQgWT14TChXKTtpZighWSlyZXR1cm4gbnVsbDtYLnB1c2goWVswXTw8OHxZWzFdLFlbMl08PDh8WVszXSl9ZWxzZXtpZighL15bMC05YS1mXXsxLDR9JC91LnRlc3QoVykpcmV0dXJuIG51bGw7WC5wdXNoKE51bWJlci5wYXJzZUludChXLDE2KSl9fXJldHVybiBYfWZ1bmN0aW9uIFh3KCl7cmV0dXJuIHlMPz89KGFzeW5jKCk9PntsZXQgJD1pbXBvcnQubWV0YS5yZXF1aXJlPz9nbG9iYWxUaGlzLnJlcXVpcmU/P251bGw7aWYoJClyZXR1cm4gJCh2TCkuWDUwOUNlcnRpZmljYXRlO2xldCBaPWF3YWl0IGltcG9ydCh2TCk7aWYoIVouWDUwOUNlcnRpZmljYXRlKXRocm93IEVycm9yKCJub2RlOmNyeXB0byBYNTA5Q2VydGlmaWNhdGUgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gWi5YNTA5Q2VydGlmaWNhdGV9KSgpLHlMfWZ1bmN0aW9uIG0xKCQpe2ZvcihsZXQgWj0wO1o8JC5sZW5ndGg7WisrKWlmKCQuY2hhckNvZGVBdChaKT4xMjcpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRXooJCl7Zm9yKGxldCBaPTA7WjwkLmxlbmd0aDtaKyspe2xldCBRPSQuY2hhckNvZGVBdChaKTtpZihRPD0zMXx8UT09PTEyNylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBiMSgkKXtyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCQpLmxlbmd0aH1mdW5jdGlvbiB3eigkKXtpZigkLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgQSQoInJhd0hlYWRlcnMgY29udGFpbnMgYW4gdW5tYXRjaGVkIG5hbWUiKTtsZXQgWj1uZXcgTWFwO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7USs9Mil7bGV0IFg9JFtRXSxKPSRbUSsxXSxXPVouZ2V0KFgpPz9bXTtXLnB1c2goSiksWi5zZXQoWCxXKX1yZXR1cm4gbmV3IE1hcChbLi4uWl0ubWFwKChbUSxYXSk9PltRLE9iamVjdC5mcmVlemUoWCldKSl9ZnVuY3Rpb24gU3ooJCxaKXtsZXQgUT1uZXcgU2V0KCQpLFg9aDUoWiwidHJ1c3RlZFByb3h5QWRkcmVzc2VzIik7aWYoUS5zaXplPT09MCl0aHJvdyBUeXBlRXJyb3IoInRydXN0RG9tYWlucyBhbmQgdHJ1c3RlZFByb3h5QWRkcmVzc2VzIG11c3Qgbm90IGJlIGVtcHR5Iik7Zm9yKGxldCBKIG9mIFEpaWYoIW1MLnRlc3QoSikpdGhyb3cgVHlwZUVycm9yKGBpbnZhbGlkIFNQSUZGRSB0cnVzdCBkb21haW46ICR7SlNPTi5zdHJpbmdpZnkoSil9YCk7cmV0dXJue2RvbWFpbnM6USxwcm94aWVzOlh9fWZ1bmN0aW9uIGI1KCQsWil7aWYoIWVFLnRlc3QoJCkpdGhyb3cgVHlwZUVycm9yKGAke1p9IG11c3QgYmUgYSB2YWxpZCBIVFRQIGZpZWxkIG5hbWVgKX1mdW5jdGlvbiBXWSgkLFope2lmKCEkfHwhbTEoJCl8fGIxKCQpPjIwNDh8fCQuaW5jbHVkZXMoIiUiKSl0aHJvdyBUeXBlRXJyb3IoIlNQSUZGRSBJRCBpcyBlbXB0eSwgbm9uLUFTQ0lJLCBwZXJjZW50LWVuY29kZWQsIG9yIGV4Y2VlZHMgMjA0OCBieXRlcyIpO2lmKCQuaW5jbHVkZXMoIj8iKXx8JC5pbmNsdWRlcygiIyIpKXRocm93IFR5cGVFcnJvcigiU1BJRkZFIElEIGNhbm5vdCBjb250YWluIHF1ZXJ5IG9yIGZyYWdtZW50Iik7bGV0IFE9L15zcGlmZmU6XC9cLyhbXi9dKykoXC8uKikkLy5leGVjKCQpO2lmKCFRKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBTUElGRkUgSUQgc2NoZW1lIG9yIGF1dGhvcml0eSIpO2xldCBYPVFbMV0sSj1RWzJdO2lmKCFtTC50ZXN0KFgpfHwhdEUudGVzdChKKSl0aHJvdyBUeXBlRXJyb3IoIlNQSUZGRSBJRCB0cnVzdCBkb21haW4gb3IgcGF0aCBpcyBub3QgY2Fub25pY2FsIik7aWYoSi5zcGxpdCgiLyIpLnNvbWUoKFcpPT5XPT09Ii4ifHxXPT09Ii4uIikpdGhyb3cgVHlwZUVycm9yKCJTUElGRkUgSUQgcGF0aCBjYW5ub3QgY29udGFpbiBkb3Qgc2VnbWVudHMiKTtpZighWi5oYXMoWCkpdGhyb3cgVHlwZUVycm9yKCJTUElGRkUgdHJ1c3QgZG9tYWluIGlzIG5vdCBhbGxvd2VkIik7cmV0dXJuIFh9ZnVuY3Rpb24gWFkoJCxaKXtpZihaKzI+JC5sZW5ndGgpdGhyb3cgVHlwZUVycm9yKCJ0cnVuY2F0ZWQgREVSIHZhbHVlIik7bGV0IFE9JFtaXSxYPSRbWisxXSxKPTAsVz0yO2lmKChYJjEyOCk9PT0wKUo9WDtlbHNle2xldCBIPVgmMTI3O2lmKEg9PT0wfHxIPjR8fForMitIPiQubGVuZ3RoKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBERVIgbGVuZ3RoIik7Vys9SDtmb3IobGV0IHo9MDt6PEg7eisrKUo9SioyNTYrJFtaKzIrel07aWYoSjwxMjgpdGhyb3cgVHlwZUVycm9yKCJub24tY2Fub25pY2FsIERFUiBsZW5ndGgiKX1sZXQgWT1aK1csRz1ZK0o7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKEcpfHxHPiQubGVuZ3RoKXRocm93IFR5cGVFcnJvcigidHJ1bmNhdGVkIERFUiBib2R5Iik7cmV0dXJue3RhZzpRLHN0YXJ0OlksZW5kOkcsYnl0ZXM6JH19ZnVuY3Rpb24gYkooJCl7bGV0IFo9W10sUT0kLnN0YXJ0O3doaWxlKFE8JC5lbmQpe2xldCBYPVhZKCQuYnl0ZXMsUSk7aWYoWC5lbmQ+JC5lbmQpdGhyb3cgVHlwZUVycm9yKCJERVIgY2hpbGQgZXhjZWVkcyBwYXJlbnQiKTtaLnB1c2goWCksUT1YLmVuZH1pZihRIT09JC5lbmQpdGhyb3cgVHlwZUVycm9yKCJtYWxmb3JtZWQgREVSIGNoaWxkcmVuIik7cmV0dXJuIFp9ZnVuY3Rpb24gSlkoJCl7cmV0dXJuICQuYnl0ZXMuc3ViYXJyYXkoJC5zdGFydCwkLmVuZCl9ZnVuY3Rpb24gaEwoJCl7aWYoJC50YWchPT02KXRocm93IFR5cGVFcnJvcigiZXhwZWN0ZWQgREVSIE9JRCIpO2xldCBaPUpZKCQpO2lmKFoubGVuZ3RoPT09MCl0aHJvdyBUeXBlRXJyb3IoImVtcHR5IERFUiBPSUQiKTtsZXQgUT1bTWF0aC5taW4oMixNYXRoLmZsb29yKFpbMF0vNDApKSwwXTtRWzFdPVpbMF0tUVswXSo0MDtsZXQgWD0wO2ZvcihsZXQgSj0xO0o8Wi5sZW5ndGg7SisrKXtpZihYPVgqMTI4KyhaW0pdJjEyNyksIU51bWJlci5pc1NhZmVJbnRlZ2VyKFgpKXRocm93IFR5cGVFcnJvcigib3ZlcnNpemVkIERFUiBPSUQiKTtpZigoWltKXSYxMjgpPT09MClRLnB1c2goWCksWD0wfWlmKChaW1oubGVuZ3RoLTFdJjEyOCkhPT0wKXRocm93IFR5cGVFcnJvcigidHJ1bmNhdGVkIERFUiBPSUQiKTtyZXR1cm4gUS5qb2luKCIuIil9ZnVuY3Rpb24gSncoJCl7bGV0IFo9WFkoJCwwKTtpZihaLnRhZyE9PTQ4fHxaLmVuZCE9PSQubGVuZ3RoKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBjZXJ0aWZpY2F0ZSBERVIiKTtsZXQgUT1iSihaKTtpZihRLmxlbmd0aCE9PTN8fFFbMF0udGFnIT09NDgpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIGNlcnRpZmljYXRlIHNoYXBlIik7bGV0IFg9UVswXSxKPWJKKFgpLFc9SlswXT8udGFnPT09MTYwPzE6MDtpZihKLmxlbmd0aDxXKzZ8fEpbVys0XS50YWchPT00OCl0aHJvdyBUeXBlRXJyb3IoImludmFsaWQgVEJTQ2VydGlmaWNhdGUiKTtsZXQgWT1KW1crNF0uc3RhcnQ9PT1KW1crNF0uZW5kLEc9Si5maW5kKCh5KT0+eS50YWc9PT0xNjMpO2lmKCFHKXRocm93IFR5cGVFcnJvcigiWC41MDktU1ZJRCBleHRlbnNpb25zIGFyZSBtaXNzaW5nIik7bGV0IEg9YkooRyk7aWYoSC5sZW5ndGghPT0xfHxIWzBdLnRhZyE9PTQ4KXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBjZXJ0aWZpY2F0ZSBleHRlbnNpb25zIik7bGV0IHo9bmV3IE1hcDtmb3IobGV0IHkgb2YgYkooSFswXSkpe2lmKHkudGFnIT09NDgpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIGNlcnRpZmljYXRlIGV4dGVuc2lvbiIpO2xldCBoPWJKKHkpO2lmKGgubGVuZ3RoPDJ8fGgubGVuZ3RoPjMpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIGNlcnRpZmljYXRlIGV4dGVuc2lvbiBzaGFwZSIpO2xldCBzPWhMKGhbMF0pLGY9ITEsYz1oWzFdO2lmKGhbMV0udGFnPT09MSl7bGV0IG89SlkoaFsxXSk7aWYoby5sZW5ndGghPT0xfHxvWzBdIT09MCYmb1swXSE9PTI1NXx8aC5sZW5ndGghPT0zKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBleHRlbnNpb24gY3JpdGljYWwgZmxhZyIpO2Y9b1swXT09PTI1NSxjPWhbMl19aWYoYy50YWchPT00fHx6LmhhcyhzKSl0aHJvdyBUeXBlRXJyb3IoImludmFsaWQgb3IgZHVwbGljYXRlIGV4dGVuc2lvbiIpO3ouc2V0KHMse2NyaXRpY2FsOmYsdmFsdWU6SlkoYyl9KX1sZXQgcT16LmdldCgiMi41LjI5LjE3IiksUD16LmdldCgiMi41LjI5LjE5IiksVT16LmdldCgiMi41LjI5LjE1Iik7aWYoIXF8fCFQfHwhVSl0aHJvdyBUeXBlRXJyb3IoInJlcXVpcmVkIFguNTA5LVNWSUQgZXh0ZW5zaW9uIGlzIG1pc3NpbmciKTtsZXQgTT1YWShxLnZhbHVlLDApO2lmKE0udGFnIT09NDh8fE0uZW5kIT09cS52YWx1ZS5sZW5ndGgpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIFNBTiBleHRlbnNpb24iKTtsZXQgTD1iSihNKS5maWx0ZXIoKHkpPT55LnRhZz09PTEzNCkubWFwKCh5KT0+e2xldCBoPW5ldyBUZXh0RGVjb2RlcigiYXNjaWkiLHtmYXRhbDohMH0pLmRlY29kZShKWSh5KSk7aWYoIW0xKGgpKXRocm93IFR5cGVFcnJvcigibm9uLUFTQ0lJIFVSSSBTQU4iKTtyZXR1cm4gaH0pO2lmKEwubGVuZ3RoIT09MSl0aHJvdyBUeXBlRXJyb3IoIlguNTA5LVNWSUQgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIFVSSSBTQU4iKTtsZXQgRD1YWShQLnZhbHVlLDApO2lmKEQudGFnIT09NDh8fEQuZW5kIT09UC52YWx1ZS5sZW5ndGgpdGhyb3cgVHlwZUVycm9yKCJpbnZhbGlkIGJhc2ljIGNvbnN0cmFpbnRzIik7bGV0IFI9YkooRCksVj1SWzBdPy50YWc9PT0xJiZKWShSWzBdKVswXSE9PTAsZz1YWShVLnZhbHVlLDApO2lmKGcudGFnIT09M3x8Zy5lbmQhPT1VLnZhbHVlLmxlbmd0aCl0aHJvdyBUeXBlRXJyb3IoImludmFsaWQga2V5IHVzYWdlIik7bGV0IHc9SlkoZyk7aWYody5sZW5ndGg8Mnx8d1swXT43KXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgdXNhZ2UgYml0cyIpO2xldCBUPSh5KT0+e2xldCBoPXdbMStNYXRoLmZsb29yKHkvOCldO3JldHVybiBoIT09dm9pZCAwJiYoaCYxMjg+PnklOCkhPT0wfSxFPXouZ2V0KCIyLjUuMjkuMzciKSxfO2lmKEUpe2xldCB5PVhZKEUudmFsdWUsMCk7aWYoeS50YWchPT00OHx8eS5lbmQhPT1FLnZhbHVlLmxlbmd0aCl0aHJvdyBUeXBlRXJyb3IoImludmFsaWQgZXh0ZW5kZWQga2V5IHVzYWdlIik7Xz1uZXcgU2V0KGJKKHkpLm1hcChoTCkpfXJldHVybntzcGlmZmVJZDpMWzBdLHN1YmplY3RFbXB0eTpZLHNhbkNyaXRpY2FsOnEuY3JpdGljYWwsY2E6VixrZXlVc2FnZUNyaXRpY2FsOlUuY3JpdGljYWwsZGlnaXRhbFNpZ25hdHVyZTpUKDApLGtleUNlcnRTaWduOlQoNSksY3JsU2lnbjpUKDYpLGV4dGVuZGVkS2V5VXNhZ2U6X319ZnVuY3Rpb24gV3coJCxaLFEsWCl7bGV0IEo9RGF0ZS5ub3coKSxXPURhdGUucGFyc2UoJC52YWxpZEZyb20pLFk9RGF0ZS5wYXJzZSgkLnZhbGlkVG8pO2lmKCFOdW1iZXIuaXNGaW5pdGUoVyl8fCFOdW1iZXIuaXNGaW5pdGUoWSl8fEo8V3x8Sj5ZKXRocm93IFR5cGVFcnJvcigiWC41MDktU1ZJRCBpcyBvdXRzaWRlIGl0cyB2YWxpZGl0eSBwZXJpb2QiKTtsZXQgRz1KdyhuZXcgVWludDhBcnJheSgkLnJhdykpO2lmKEcuc3ViamVjdEVtcHR5JiYhRy5zYW5Dcml0aWNhbCl0aHJvdyBUeXBlRXJyb3IoInN1YmplY3RsZXNzIFNWSUQgcmVxdWlyZXMgY3JpdGljYWwgU0FOIik7aWYoRy5jYSl0aHJvdyBUeXBlRXJyb3IoIlguNTA5LVNWSUQgbGVhZiBjYW5ub3QgYmUgYSBDQSIpO2lmKCFHLmtleVVzYWdlQ3JpdGljYWx8fCFHLmRpZ2l0YWxTaWduYXR1cmV8fEcua2V5Q2VydFNpZ258fEcuY3JsU2lnbil0aHJvdyBUeXBlRXJyb3IoImludmFsaWQgWC41MDktU1ZJRCBrZXkgdXNhZ2UiKTtpZihHLmV4dGVuZGVkS2V5VXNhZ2UmJighRy5leHRlbmRlZEtleVVzYWdlLmhhcygiMS4zLjYuMS41LjUuNy4zLjEiKXx8IUcuZXh0ZW5kZWRLZXlVc2FnZS5oYXMoIjEuMy42LjEuNS41LjcuMy4yIikpKXRocm93IFR5cGVFcnJvcigiWC41MDktU1ZJRCBleHRlbmRlZCBrZXkgdXNhZ2UgbXVzdCBpbmNsdWRlIGNsaWVudEF1dGggYW5kIHNlcnZlckF1dGgiKTtsZXQgSD1XWShHLnNwaWZmZUlkLFopO3JldHVybiBuZXcgcFgoe3Byb3ZpZGVyOlFaLGV2aWRlbmNlU291cmNlOlgsYXNzdXJhbmNlOktYLkNPTkZJR1VSRURfUFJPWFksaXNzdWVyOmBzcGlmZmU6Ly8ke0h9YCx0cmFuc3BvcnQ6Imh0dHAiLHN1YmplY3RLaW5kOkhYLldPUktMT0FELHN1YmplY3RLZXk6Ry5zcGlmZmVJZCxzdWJqZWN0U3RhYmlsaXR5Olc4LlNUQUJMRSxzdWJqZWN0VmVyaWZpZWQ6ITAsc291cmNlQWRkcmVzczpRLmFzc2VydGVkUGVlcixwcm94eUFkZHJlc3M6US5pbW1lZGlhdGVQZWVyfSl9ZnVuY3Rpb24gbTUoJCl7bGV0e2RvbWFpbnM6Wixwcm94aWVzOlF9PVN6KCQudHJ1c3REb21haW5zLCQudHJ1c3RlZFByb3h5QWRkcmVzc2VzKTtpZihiNSgkLmNlcnRpZmljYXRlSGVhZGVyLCJjZXJ0aWZpY2F0ZUhlYWRlciIpLCQudmVyaWZpY2F0aW9uSGVhZGVyIT09dm9pZCAwKXtpZihiNSgkLnZlcmlmaWNhdGlvbkhlYWRlciwidmVyaWZpY2F0aW9uSGVhZGVyIiksJC5jZXJ0aWZpY2F0ZUhlYWRlci50b0xvd2VyQ2FzZSgpPT09JC52ZXJpZmljYXRpb25IZWFkZXIudG9Mb3dlckNhc2UoKSl0aHJvdyBUeXBlRXJyb3IoImNlcnRpZmljYXRlIGFuZCB2ZXJpZmljYXRpb24gaGVhZGVycyBtdXN0IGJlIGRpc3RpbmN0Iik7aWYoRXooJC52ZXJpZmljYXRpb25WYWx1ZT8/IiIpKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCB2ZXJpZmljYXRpb24gdmFsdWUiKX1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoJC5tYXhIZWFkZXJCeXRlcyl8fCQubWF4SGVhZGVyQnl0ZXM8PTApdGhyb3cgVHlwZUVycm9yKCJtYXhIZWFkZXJCeXRlcyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO3JldHVybntwcm92aWRlcjpRWixhc3luYyByZXNvbHZlKFgpe2xldCBKPXY2KFguaW1tZWRpYXRlUGVlcj8/IiIpO2lmKCFKfHwhUS5oYXMoSikpcmV0dXJuIG5ldyBQJChRWixDMC5VTlRSVVNURURfUFJPWFkpO2xldCBXLFk7dHJ5e2lmKFc9WC5oZWFkZXIoJC5jZXJ0aWZpY2F0ZUhlYWRlciksJC52ZXJpZmljYXRpb25IZWFkZXIpWT1YLmhlYWRlcigkLnZlcmlmaWNhdGlvbkhlYWRlcil9Y2F0Y2goRyl7aWYoRyBpbnN0YW5jZW9mIEEkKXJldHVybiBuZXcgUCQoUVosQzAuSU5WQUxJRCk7dGhyb3cgR31pZighVylyZXR1cm4gbmV3IFAkKFFaLEMwLk5PX01BVENIKTtpZighbTEoVyl8fGIxKFcpPiQubWF4SGVhZGVyQnl0ZXMpcmV0dXJuIG5ldyBQJChRWixDMC5JTlZBTElEKTtpZigkLnZlcmlmaWNhdGlvbkhlYWRlciYmKFk9PT12b2lkIDB8fGIxKFkpPjY0fHxZIT09JC52ZXJpZmljYXRpb25WYWx1ZSkpcmV0dXJuIG5ldyBQJChRWixDMC5JTlZBTElEKTt0cnl7bGV0IEc9ZGVjb2RlVVJJQ29tcG9uZW50KFcpO2lmKCFtMShHKXx8YjEoRyk+JC5tYXhIZWFkZXJCeXRlc3x8Ry5zcGxpdCgiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIikubGVuZ3RoLTEhPT0xfHxHLnNwbGl0KCItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIikubGVuZ3RoLTEhPT0xfHwhRy50cmltKCkuZW5kc1dpdGgoIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0iKSl0aHJvdyBUeXBlRXJyb3IoImludmFsaWQgY2VydGlmaWNhdGUgaGVhZGVyIik7bGV0IEg9YXdhaXQgWHcoKSx6PVd3KG5ldyBIKEcpLFosWCwkLmV2aWRlbmNlU291cmNlKTtyZXR1cm4gUCQuYXZhaWxhYmxlKHopfWNhdGNoe3JldHVybiBuZXcgUCQoUVosQzAuSU5WQUxJRCl9fX19ZnVuY3Rpb24gQnooJCl7aWYoISQuY2hhaW5WZXJpZmllZEhlYWRlcil0aHJvdyBUeXBlRXJyb3IoImNoYWluVmVyaWZpZWRIZWFkZXIgaXMgcmVxdWlyZWQiKTtyZXR1cm4gbTUoe3RydXN0RG9tYWluczokLnRydXN0RG9tYWlucyx0cnVzdGVkUHJveHlBZGRyZXNzZXM6JC50cnVzdGVkUHJveHlBZGRyZXNzZXMsY2VydGlmaWNhdGVIZWFkZXI6JC5oZWFkZXI/PyJYLVNTTC1DbGllbnQtQ2VydCIsdmVyaWZpY2F0aW9uSGVhZGVyOiQuY2hhaW5WZXJpZmllZEhlYWRlcix2ZXJpZmljYXRpb25WYWx1ZTokLmNoYWluVmVyaWZpZWRWYWx1ZT8/InRydWUiLG1heEhlYWRlckJ5dGVzOiQubWF4SGVhZGVyQnl0ZXM/PzE2Mzg0LGV2aWRlbmNlU291cmNlOiJ2ZXJpZmllZF9jZXJ0aWZpY2F0ZV9oZWFkZXIifSl9ZnVuY3Rpb24ga3ooJCl7cmV0dXJuIG01KHt0cnVzdERvbWFpbnM6JC50cnVzdERvbWFpbnMsdHJ1c3RlZFByb3h5QWRkcmVzc2VzOiQudHJ1c3RlZFByb3h5QWRkcmVzc2VzLGNlcnRpZmljYXRlSGVhZGVyOiQuY2VydGlmaWNhdGVIZWFkZXI/PyJYLVNTTC1DbGllbnQtQ2VydCIsdmVyaWZpY2F0aW9uSGVhZGVyOiQudmVyaWZpY2F0aW9uSGVhZGVyPz8iWC1TU0wtQ2xpZW50LVZlcmlmeSIsdmVyaWZpY2F0aW9uVmFsdWU6IlNVQ0NFU1MiLG1heEhlYWRlckJ5dGVzOiQubWF4SGVhZGVyQnl0ZXM/PzE2Mzg0LGV2aWRlbmNlU291cmNlOiJuZ2lueF9tdGxzIn0pfWZ1bmN0aW9uIEl6KCQpe3JldHVybiBtNSh7dHJ1c3REb21haW5zOiQudHJ1c3REb21haW5zLHRydXN0ZWRQcm94eUFkZHJlc3NlczokLnRydXN0ZWRQcm94eUFkZHJlc3NlcyxjZXJ0aWZpY2F0ZUhlYWRlcjokLmNlcnRpZmljYXRlSGVhZGVyPz8iWC1DbGllbnQtQ2VydGlmaWNhdGUiLHZlcmlmaWNhdGlvbkhlYWRlcjokLnZlcmlmaWNhdGlvbkhlYWRlcj8/IlgtQ2xpZW50LUNlcnRpZmljYXRlLVZlcmlmaWNhdGlvbiIsdmVyaWZpY2F0aW9uVmFsdWU6IlNVQ0NFU1MiLG1heEhlYWRlckJ5dGVzOiQubWF4SGVhZGVyQnl0ZXM/PzE2Mzg0LGV2aWRlbmNlU291cmNlOiJhenVyZV9hcHBsaWNhdGlvbl9nYXRld2F5X210bHNfc3RyaWN0In0pfWZ1bmN0aW9uIF96KCQpe3JldHVybiBtNSh7dHJ1c3REb21haW5zOiQudHJ1c3REb21haW5zLHRydXN0ZWRQcm94eUFkZHJlc3NlczokLnRydXN0ZWRQcm94eUFkZHJlc3NlcyxjZXJ0aWZpY2F0ZUhlYWRlcjokLmxlYWZIZWFkZXI/PyJYLUFtem4tTXRscy1DbGllbnRjZXJ0LUxlYWYiLG1heEhlYWRlckJ5dGVzOiQubWF4SGVhZGVyQnl0ZXM/PzE2Mzg0LGV2aWRlbmNlU291cmNlOiJhd3NfYWxiX210bHNfdmVyaWZ5In0pfWZ1bmN0aW9uIFR6KCQpe2xldHtkb21haW5zOloscHJveGllczpRfT1TeigkLnRydXN0RG9tYWlucywkLnRydXN0ZWRQcm94eUFkZHJlc3NlcyksWD17c3BpZmZlOiQuc3BpZmZlSWRIZWFkZXI/PyJYLUNsaWVudC1DZXJ0LVNwaWZmZS1JZCIscHJlc2VudDokLnByZXNlbnRIZWFkZXI/PyJYLUNsaWVudC1DZXJ0LVByZXNlbnQiLHZlcmlmaWVkOiQuY2hhaW5WZXJpZmllZEhlYWRlcj8/IlgtQ2xpZW50LUNlcnQtQ2hhaW4tVmVyaWZpZWQiLGVycm9yOiQuZXJyb3JIZWFkZXI/PyJYLUNsaWVudC1DZXJ0LUVycm9yIn07Zm9yKGxldFtKLFddb2YgT2JqZWN0LmVudHJpZXMoWCkpYjUoVyxKKTtpZihuZXcgU2V0KE9iamVjdC52YWx1ZXMoWCkubWFwKChKKT0+Si50b0xvd2VyQ2FzZSgpKSkuc2l6ZSE9PTQpdGhyb3cgVHlwZUVycm9yKCJHQ1AgbVRMUyBoZWFkZXIgbmFtZXMgbXVzdCBiZSBkaXN0aW5jdCIpO3JldHVybntwcm92aWRlcjpRWixyZXNvbHZlKEope2xldCBXPXY2KEouaW1tZWRpYXRlUGVlcj8/IiIpO2lmKCFXfHwhUS5oYXMoVykpcmV0dXJuIG5ldyBQJChRWixDMC5VTlRSVVNURURfUFJPWFkpO3RyeXtsZXQgWT1KLmhlYWRlcihYLnByZXNlbnQpLEc9Si5oZWFkZXIoWC52ZXJpZmllZCksSD1KLmhlYWRlcihYLnNwaWZmZSksej1KLmhlYWRlcihYLmVycm9yKTtpZihZPT09ImZhbHNlIiYmKEc9PT12b2lkIDB8fEc9PT0iZmFsc2UiKSYmSD09PXZvaWQgMClyZXR1cm4gbmV3IFAkKFFaLEMwLk5PX01BVENIKTtpZihZIT09InRydWUifHxHIT09InRydWUifHx6IT09dm9pZCAwJiZ6IT09IiJ8fCFIKXJldHVybiBuZXcgUCQoUVosQzAuSU5WQUxJRCk7bGV0IHE9V1koSCxaKTtyZXR1cm4gUCQuYXZhaWxhYmxlKG5ldyBwWCh7cHJvdmlkZXI6UVosZXZpZGVuY2VTb3VyY2U6ImdjcF9sb2FkX2JhbGFuY2VyX210bHMiLGFzc3VyYW5jZTpLWC5DT05GSUdVUkVEX1BST1hZLGlzc3Vlcjpgc3BpZmZlOi8vJHtxfWAsdHJhbnNwb3J0OiJodHRwIixzdWJqZWN0S2luZDpIWC5XT1JLTE9BRCxzdWJqZWN0S2V5Okgsc3ViamVjdFN0YWJpbGl0eTpXOC5TVEFCTEUsc3ViamVjdFZlcmlmaWVkOiEwLGF0dHJpYnV0ZXM6e2NsaWVudF9jZXJ0aWZpY2F0ZV9wcmVzZW50OiEwLGNsaWVudF9jZXJ0aWZpY2F0ZV9jaGFpbl92ZXJpZmllZDohMH0sc291cmNlQWRkcmVzczpKLmFzc2VydGVkUGVlcixwcm94eUFkZHJlc3M6Si5pbW1lZGlhdGVQZWVyfSkpfWNhdGNoe3JldHVybiBuZXcgUCQoUVosQzAuSU5WQUxJRCl9fX19ZnVuY3Rpb24gYkwoJCxaKXtsZXQgUT1bXSxYPSIiLEo9ITEsVz0hMTtmb3IobGV0IFkgb2YgJClpZihXKXtpZihZIT09JyInJiZZIT09IlxcIil0aHJvdyBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIFhGQ0MgcXVvdGVkIGVzY2FwZSIpO1grPVksVz0hMX1lbHNlIGlmKEomJlk9PT0iXFwiKVc9ITA7ZWxzZSBpZihZPT09JyInKUo9IUosWCs9WTtlbHNlIGlmKFk9PT1aJiYhSilRLnB1c2goWCksWD0iIjtlbHNlIFgrPVk7aWYoSnx8Vyl0aHJvdyBUeXBlRXJyb3IoInVudGVybWluYXRlZCBYRkNDIHF1b3RlZCB2YWx1ZSIpO3JldHVybiBRLnB1c2goWCksUX1mdW5jdGlvbiBZdygkKXtpZigkLnN0YXJ0c1dpdGgoJyInKXx8JC5lbmRzV2l0aCgnIicpKXtpZigkLmxlbmd0aDwyfHwhJC5zdGFydHNXaXRoKCciJyl8fCEkLmVuZHNXaXRoKCciJykpdGhyb3cgVHlwZUVycm9yKCJtYWxmb3JtZWQgcXVvdGVkIFhGQ0MiKTtyZXR1cm4gJC5zbGljZSgxLC0xKX1pZighJHx8L1ssOz1dLy50ZXN0KCQpKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCB1bnF1b3RlZCBYRkNDIHZhbHVlIik7cmV0dXJuICR9ZnVuY3Rpb24gR3coJCl7aWYoJC5yZXBsYWNlKFF3LCIiKS5pbmNsdWRlcygiJSIpKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBYRkNDIHBlcmNlbnQgZXNjYXBlIik7bGV0IFo9ZGVjb2RlVVJJQ29tcG9uZW50KCQpO2lmKEV6KFopKXRocm93IFR5cGVFcnJvcigiZGVjb2RlZCBYRkNDIHZhbHVlIGNvbnRhaW5zIGNvbnRyb2xzIik7cmV0dXJuIFp9ZnVuY3Rpb24gS3coJCxaKXtpZighbTEoJCl8fGIxKCQpPlp8fEV6KCQpKXRocm93IFR5cGVFcnJvcigiaW52YWxpZCBYRkNDIGJ5dGVzIik7bGV0IFE9YkwoJCwiLCIpO2lmKFEubGVuZ3RoIT09MXx8IVFbMF0udHJpbSgpKXRocm93IFR5cGVFcnJvcigiWEZDQyBtdXN0IGNvbnRhaW4gb25lIGVsZW1lbnQiKTtsZXQgWD1uZXcgTWFwO2ZvcihsZXQgSiBvZiBiTChRWzBdLCI7Iikpe2xldCBXPUoudHJpbSgpLFk9Vy5pbmRleE9mKCI9Iik7aWYoIVd8fFk8MCl0aHJvdyBUeXBlRXJyb3IoIm1hbGZvcm1lZCBYRkNDIGZpZWxkIik7bGV0IEc9Vy5zbGljZSgwLFkpLnRyaW0oKSxIPUcudG9Mb3dlckNhc2UoKTtpZighJHcudGVzdChHKXx8IVsiYnkiLCJoYXNoIiwiY2VydCIsImNoYWluIiwic3ViamVjdCIsInVyaSIsImRucyIsImlzc3VlciJdLmluY2x1ZGVzKEgpKXRocm93IFR5cGVFcnJvcigidW5zdXBwb3J0ZWQgWEZDQyBmaWVsZCIpO2xldCB6PVl3KFcuc2xpY2UoWSsxKS50cmltKCkpO2lmKFsiYnkiLCJ1cmkiLCJjZXJ0IiwiY2hhaW4iXS5pbmNsdWRlcyhIKSl6PUd3KHopO2lmKCFbImJ5IiwidXJpIiwiZG5zIl0uaW5jbHVkZXMoSCkmJlguaGFzKEgpKXRocm93IFR5cGVFcnJvcigiZHVwbGljYXRlIFhGQ0Mgc2luZ2xldG9uIik7bGV0IHE9WC5nZXQoSCk/P1tdO3EucHVzaCh6KSxYLnNldChILHEpfXJldHVybiBYfWZ1bmN0aW9uIGd6KCQpe2xldHtkb21haW5zOloscHJveGllczpRfT1TeigkLnRydXN0RG9tYWlucywkLnRydXN0ZWRQcm94eUFkZHJlc3NlcyksWD0kLmhlYWRlcj8/IlgtRm9yd2FyZGVkLUNsaWVudC1DZXJ0IixKPSQubWF4SGVhZGVyQnl0ZXM/PzE2Mzg0O2lmKGI1KFgsImhlYWRlciIpLCFOdW1iZXIuaXNTYWZlSW50ZWdlcihKKXx8Sjw9MCl0aHJvdyBUeXBlRXJyb3IoIm1heEhlYWRlckJ5dGVzIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm57cHJvdmlkZXI6UVoscmVzb2x2ZShXKXtsZXQgWT12NihXLmltbWVkaWF0ZVBlZXI/PyIiKTtpZighWXx8IVEuaGFzKFkpKXJldHVybiBuZXcgUCQoUVosQzAuVU5UUlVTVEVEX1BST1hZKTt0cnl7bGV0IEc9Vy5oZWFkZXIoWCk7aWYoRz09PXZvaWQgMClyZXR1cm4gbmV3IFAkKFFaLEMwLk5PX01BVENIKTtsZXQgSD1LdyhHLEopLHo9SC5nZXQoInVyaSIpPz9bXSxxPUguZ2V0KCJoYXNoIik/P1tdO2lmKHoubGVuZ3RoIT09MXx8cS5sZW5ndGghPT0xfHwhWncudGVzdChxWzBdKSl0aHJvdyBUeXBlRXJyb3IoImFtYmlndW91cyBYRkNDIGlkZW50aXR5Iik7bGV0IFA9V1koelswXSxaKSxVPUguZ2V0KCJieSIpPz9bXTtyZXR1cm4gUCQuYXZhaWxhYmxlKG5ldyBwWCh7cHJvdmlkZXI6UVosZXZpZGVuY2VTb3VyY2U6ImVudm95X3hmY2Nfc2FuaXRpemVfc2V0Iixhc3N1cmFuY2U6S1guQ09ORklHVVJFRF9QUk9YWSxpc3N1ZXI6YHNwaWZmZTovLyR7UH1gLHRyYW5zcG9ydDoiaHR0cCIsc3ViamVjdEtpbmQ6SFguV09SS0xPQUQsc3ViamVjdEtleTp6WzBdLHN1YmplY3RTdGFiaWxpdHk6VzguU1RBQkxFLHN1YmplY3RWZXJpZmllZDohMCxhdHRyaWJ1dGVzOntjZXJ0aWZpY2F0ZV9zaGEyNTY6cVswXS50b0xvd2VyQ2FzZSgpLC4uLlUubGVuZ3RoPjA/e3Byb3h5X2lkZW50aXRpZXM6VX06e319LHNvdXJjZUFkZHJlc3M6Vy5hc3NlcnRlZFBlZXIscHJveHlBZGRyZXNzOlcuaW1tZWRpYXRlUGVlcn0pKX1jYXRjaHtyZXR1cm4gbmV3IFAkKFFaLEMwLklOVkFMSUQpfX19fXZhciBRWj0ic3BpZmZlIixtTCx0RSxlRSwkdyxadyxRdyx2TD0ibm9kZTpjcnlwdG8iLHlMO3ZhciBmTD1PKCgpPT57bVcoKTttTD0vXlthLXowLTldKD86W2EtejAtOS5fLV17MCwyNTN9W2EtejAtOV0pPyQvLHRFPS9eXC8oPzpbQS1aYS16MC05Ll8tXSspKD86XC9bQS1aYS16MC05Ll8tXSspKiQvLGVFPS9eWyEjJCUmJyorXC0uXl9gfH4wLTlBLVphLXpdKyQvLCR3PS9eW0EtWmEtel1bQS1aYS16MC05Xy1dKiQvLFp3PS9eWzAtOUEtRmEtZl17NjR9JC8sUXc9LyUoPzpbMC05QS1GYS1mXXsyfSkvZ30pO3ZhciB1TD1PKCgpPT57djcoKTtKOCgpO2lNKCk7a0woKTtUTCgpO2ZMKCk7dzUoKTtHeigpO1IxKCl9KTtmdW5jdGlvbiBwTCgkKXtyZXR1cm57cGVlcklkZW50aXR5UHJvdmlkZXJzOlt5eih7aXNzdWVyOiQuaXNzdWVyLHRydXN0ZWRQcm94eUFkZHJlc3NlczokLnRydXN0ZWRQcm94eUFkZHJlc3Nlcz8/WyIxMjcuMC4wLjEiXX0pXSxwZWVyQXV0aGVudGljYXRpb25Qb2xpY3k6JC5hdXRoZW50aWNhdGU9PT0hMT9aNTpiVygiaXJvaCIpLHBlZXJSZXNvbHV0aW9uQ29udGV4dDokLnBlZXJSZXNvbHV0aW9uQ29udGV4dH19ZnVuY3Rpb24gencoJCl7aWYodHlwZW9mICQhPT0ic3RyaW5nInx8ISQpdGhyb3cgVHlwZUVycm9yKCJJcm9oIGlzc3VlciBtdXN0IGJlIG5vbi1lbXB0eSB0ZXh0IHdpdGhvdXQgY29udHJvbHMiKTtmb3IobGV0IFo9MDtaPCQubGVuZ3RoO1orKyl7bGV0IFE9JC5jaGFyQ29kZUF0KFopO2lmKFE+PTU1Mjk2JiZRPD01NjMxOSl7bGV0IFg9JC5jaGFyQ29kZUF0KForMSk7aWYoIShYPj01NjMyMCYmWDw9NTczNDMpKXRocm93IFR5cGVFcnJvcigiSXJvaCBpc3N1ZXIgY29udGFpbnMgYW4gdW5wYWlyZWQgc3Vycm9nYXRlIik7WisrfWVsc2UgaWYoUT49NTYzMjAmJlE8PTU3MzQzKXRocm93IFR5cGVFcnJvcigiSXJvaCBpc3N1ZXIgY29udGFpbnMgYW4gdW5wYWlyZWQgc3Vycm9nYXRlIil9aWYoQXJyYXkuZnJvbSgkKS5zb21lKChaKT0+e2xldCBRPVouY29kZVBvaW50QXQoMCk7cmV0dXJuIFE8PTMxfHxRPT09MTI3fSkpdGhyb3cgVHlwZUVycm9yKCJJcm9oIGlzc3VlciBtdXN0IGJlIG5vbi1lbXB0eSB0ZXh0IHdpdGhvdXQgY29udHJvbHMiKX1mdW5jdGlvbiB5eigkKXt6dygkLmlzc3Vlcik7bGV0IFo9aDUoJC50cnVzdGVkUHJveHlBZGRyZXNzZXMsIklyb2ggdHJ1c3RlZFByb3h5QWRkcmVzc2VzIiksUT0oWCxKKT0+bmV3IFAkKHh6LFgsSj9bSl06W10pO3JldHVybntwcm92aWRlcjp4eixyZXNvbHZlKFgpe2xldCBKPVg/djYoWC5pbW1lZGlhdGVQZWVyPz8iIik6bnVsbDtpZighSnx8IVouaGFzKEopKXJldHVybiBRKEMwLlVOVFJVU1RFRF9QUk9YWSk7dHJ5e2xldCBXPVguaGVhZGVyKHZ6KTtpZihXPT09dm9pZCAwKXJldHVybiBRKEMwLk5PX01BVENIKTtpZighSHcudGVzdChXKSlyZXR1cm4gUShDMC5JTlZBTElEKTtyZXR1cm4gUShDMC5BVkFJTEFCTEUsbmV3IHBYKHtwcm92aWRlcjp4eixldmlkZW5jZVNvdXJjZToiaHR0cF9wcm94eSIsYXNzdXJhbmNlOktYLkNPTkZJR1VSRURfUFJPWFksaXNzdWVyOiQuaXNzdWVyLHRyYW5zcG9ydDoiaHR0cCIsc3ViamVjdEtpbmQ6SFguRU5EUE9JTlQsc3ViamVjdEtleTpXLHN1YmplY3RTdGFiaWxpdHk6VzguU1RBQkxFLHN1YmplY3RWZXJpZmllZDohMCxhdHRyaWJ1dGVzOntvcmlnaW5hbF9hc3N1cmFuY2U6S1guQ1JZUFRPR1JBUEhJQ19QRUVSfSxzb3VyY2VBZGRyZXNzOlcscHJveHlBZGRyZXNzOkp9KSl9Y2F0Y2h7cmV0dXJuIFEoQzAuSU5WQUxJRCl9fX19dmFyIHh6PSJpcm9oIixIdyx2ej0iVkdJLUZvcndhcmRlZC1Jcm9oLUVuZHBvaW50Ijt2YXIgY0w9TygoKT0+e21XKCk7SHc9L15bMC05YS1mXXs2NH0kL3V9KTthc3luYyBmdW5jdGlvbiBsTCgkLFosUSxYLEosVyxZLEcsSCx6KXtsZXQgcT0hISQucHJvZHVjZXJGbixQO3RyeXtpZihxKVA9YXdhaXQgJC5wcm9kdWNlckluaXQoWik7ZWxzZSBQPWF3YWl0ICQuZXhjaGFuZ2VJbml0KFopfWNhdGNoKFYpe2xldCBnPSQuaGVhZGVyU2NoZW1hPz9xdyx3PXEkKGcsVixKLFcpO2lmKGF3YWl0IFEud3JpdGVTdHJlYW0oZyxbd10pLGF3YWl0IFgub3Blbk5leHRTdHJlYW0oKSl3aGlsZShhd2FpdCBYLnJlYWROZXh0QmF0Y2goKSE9PW51bGwpO3JldHVybn1sZXQgVT1QPy5fX291dHB1dFNjaGVtYT8/JC5vdXRwdXRTY2hlbWEsTT1QPy5fX2lzUHJvZHVjZXI/P3E7aWYoJC5oZWFkZXJTY2hlbWEmJiQuaGVhZGVySW5pdCl0cnl7bGV0IFY9bmV3IHhRKCQuaGVhZGVyU2NoZW1hLCEwLEosVyxILHZvaWQgMCxHLHtwZWVyRXZpZGVuY2U6en0pLGc9JC5oZWFkZXJJbml0KFosUCxWKSx3PUQ2KCQuaGVhZGVyU2NoZW1hLGcsSixXKSxUPVsuLi5WLmJhdGNoZXMubWFwKChFKT0+RS5iYXRjaCksd107YXdhaXQgUS53cml0ZVN0cmVhbSgkLmhlYWRlclNjaGVtYSxUKX1jYXRjaChWKXtsZXQgZz1xJCgkLmhlYWRlclNjaGVtYSxWLEosVyk7aWYoYXdhaXQgUS53cml0ZVN0cmVhbSgkLmhlYWRlclNjaGVtYSxbZ10pLGF3YWl0IFgub3Blbk5leHRTdHJlYW0oKSl3aGlsZShhd2FpdCBYLnJlYWROZXh0QmF0Y2goKSE9PW51bGwpO3JldHVybn1pZighYXdhaXQgWC5vcGVuTmV4dFN0cmVhbSgpKXtsZXQgVj1xJChVLEVycm9yKCJFeHBlY3RlZCBpbnB1dCBzdHJlYW0gYnV0IGdvdCBFT0YiKSxKLFcpO2F3YWl0IFEud3JpdGVTdHJlYW0oVSxbVl0pO3JldHVybn1sZXQgRD1RLm9wZW5TdHJlYW0oVSksUj1QPy5fX2lucHV0U2NoZW1hPz8kLmlucHV0U2NoZW1hO3RyeXt3aGlsZSghMCl7bGV0IFY9YXdhaXQgWC5yZWFkTmV4dEJhdGNoKCk7aWYoIVYpYnJlYWs7aWYoVi5tZXRhZGF0YT8uZ2V0KGJYKSl7aWYoJC5vbkNhbmNlbCl0cnl7YXdhaXQgJC5vbkNhbmNlbChQKX1jYXRjaCh3KXtjb25zb2xlLmRlYnVnPy4oYG9uQ2FuY2VsIGhvb2sgZmFpbGVkOiAke3cgaW5zdGFuY2VvZiBFcnJvcj93Lm1lc3NhZ2U6d31gKX1icmVha31pZihSJiYhTSYmVi5zY2hlbWEhPT1SKXRyeXtWPVU2KFYsUil9Y2F0Y2godyl7aWYodyBpbnN0YW5jZW9mIFR5cGVFcnJvcil0aHJvdyB3O2NvbnNvbGUuZGVidWc/LihgU2NoZW1hIGNvbmZvcm1hbmNlIHNraXBwZWQ6ICR7dyBpbnN0YW5jZW9mIEVycm9yP3cubWVzc2FnZTp3fWApfWxldCBnPW5ldyB4UShVLE0sSixXLEgsdm9pZCAwLEcse2lucHV0TWV0YWRhdGE6Vi5tZXRhZGF0YT8/dm9pZCAwLHBlZXJFdmlkZW5jZTp6fSk7aWYocSlhd2FpdCAkLnByb2R1Y2VyRm4oUCxnKTtlbHNlIGF3YWl0ICQuZXhjaGFuZ2VGbihQLFYsZyk7Zm9yKGxldCB3IG9mIGcuYmF0Y2hlcyl7bGV0IFQ9dy5iYXRjaDtpZih3Lm1ldGFkYXRhJiZ3Lm1ldGFkYXRhLnNpemU+MCl7bGV0IEU9bmV3IE1hcChULm1ldGFkYXRhPz9bXSk7Zm9yKGxldFtfLHldb2Ygdy5tZXRhZGF0YSlFLnNldChfLHkpO1Q9ZSQoVCxFKX1pZihZKVQ9YXdhaXQga0ooVCxZKTthd2FpdCBELndyaXRlKFQpfWlmKGcuZmluaXNoZWQpYnJlYWt9fWNhdGNoKFYpe2F3YWl0IEQud3JpdGUocSQoVSxWLEosVykpfWF3YWl0IEQuY2xvc2UoKTt0cnl7d2hpbGUoYXdhaXQgWC5yZWFkTmV4dEJhdGNoKCkhPT1udWxsKTt9Y2F0Y2h7fX12YXIgcXc7dmFyIGRMPU8oKCk9PntxWigpO0k4KCk7bFgoKTttWCgpO3F3PUUwKFtdKX0pO2FzeW5jIGZ1bmN0aW9uIG5MKCQsWixRLFgsSixXLFksRyxIKXtsZXQgej0kLnJlc3VsdFNjaGVtYSxxPW5ldyB4USh6LCEwLFgsSixHLHZvaWQgMCxZLHtwZWVyRXZpZGVuY2U6SH0pO3RyeXtsZXQgUD1hd2FpdCAkLmhhbmRsZXIoWixxKSxVPUQ2KHosUCxYLEopO2lmKFcpVT1hd2FpdCBrSihVLFcpO2xldCBNPVsuLi5xLmJhdGNoZXMubWFwKChMKT0+TC5iYXRjaCksVV07YXdhaXQgUS53cml0ZVN0cmVhbSh6LE0pfWNhdGNoKFApe2xldCBVPXEkKHosUCxYLEopO2F3YWl0IFEud3JpdGVTdHJlYW0oeixbVV0pfX12YXIgb0w9TygoKT0+e0k4KCk7bFgoKTttWCgpfSk7YXN5bmMgZnVuY3Rpb24gaUwoJCl7cmV0dXJuIGVHKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgkKSl9ZnVuY3Rpb24gZnooJCl7bGV0IFo9bmV3IFNldChbLi4uJD8/W11dLmZpbHRlcigoUSk9PlEpKTtpZihaLnNpemU9PT0wKXRocm93IEVycm9yKCJpbnRyb3NwZWN0UHJpbmNpcGFscyBtdXN0IG5hbWUgYXQgbGVhc3Qgb25lIHByaW5jaXBhbC4gSW50cm9zcGVjdGlvbiBpcyBhIGRpc3RpbmN0IGNhcGFiaWxpdHkgZnJvbSBhdXRoZW50aWNhdGlvbjogYWxsb3dpbmcgYW55IGF1dGhlbnRpY2F0ZWQgY2FsbGVyIGxldHMgYW55IHVzZXIgcmVzb2x2ZSBhbnkgb3RoZXIgdXNlcidzIGNyZWRlbnRpYWwgdG8gaXRzIG93bmVyLiIpO3JldHVybiBafWZ1bmN0aW9uIHV6KCQsWil7bGV0IFE9JC5wcmluY2lwYWw/PyIiO2lmKCEkLmF1dGhlbnRpY2F0ZWR8fCFaLmhhcyhRKSl0aHJvdyBuZXcgdTEoImNhbGxlciBpcyBub3QgYW4gaW50cm9zcGVjdG9yIik7cmV0dXJuIFF9ZnVuY3Rpb24gc0woJCl7cmV0dXJuIEZ3LmhhcygkKXx8JC50cmltKCk9PT0iIn1mdW5jdGlvbiBwNSgkKXtsZXQgWj0wLFE9JC5sZW5ndGg7d2hpbGUoWjxRJiZzTCgkW1pdKSlaKys7d2hpbGUoUT5aJiZzTCgkW1EtMV0pKVEtLTtyZXR1cm4gJC5zbGljZShaLFEpfWZ1bmN0aW9uIHB6KCQpe3JldHVybiBQdy50ZXN0KHA1KCQpKX1mdW5jdGlvbiBjeigkKXtpZighcDUoJCl8fGx6KCQpPmh6fHxweigkKSl0aHJvdyBuZXcgcDEoInVucmVzb2x2ZWQiKX1mdW5jdGlvbiBseigkKXtyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCQpLmxlbmd0aH1mdW5jdGlvbiBkeigkLFosUSl7aWYoISQuYXV0aGVudGljYXRlZHx8ISQucHJpbmNpcGFsKXRocm93IG5ldyB5NigiY2FsbGVyIGlzIG5vdCBhdXRoZW50aWNhdGVkIik7bGV0IFg9JC5jbGFpbXM/LmF1dGhfdGltZTtpZihYPT09dm9pZCAwfHxYPT09bnVsbCl0aHJvdyBuZXcgeTYoImNyZWRlbnRpYWwgY2FycmllcyBubyBhdXRoX3RpbWU7IG9ubHkgYSByZWNlbnRseSBhdXRoZW50aWNhdGVkIHVzZXIgbWF5IG1pbnQgYSBncmFudCIpO2xldCBKPXR5cGVvZiBYPT09Im51bWJlciI/WDpOdW1iZXIoWCk7aWYoIU51bWJlci5pc0Zpbml0ZShKKSl0aHJvdyBuZXcgeTYoImNyZWRlbnRpYWwgY2FycmllcyBhbiB1bnVzYWJsZSBhdXRoX3RpbWUiKTtsZXQgVz0oUT8/RGF0ZS5ub3coKS8xMDAwKS1KO2lmKFc+Wil0aHJvdyBuZXcgeTYoYGxhc3QgYXV0aGVudGljYXRpb24gd2FzICR7Vy50b0ZpeGVkKDApfXMgYWdvLCB3aGljaCBleGNlZWRzIHRoZSAke1oudG9GaXhlZCgwKX1zIGNlaWxpbmcgZm9yIG1pbnRpbmcgYSBncmFudDsgcmUtYXV0aGVudGljYXRlYCk7cmV0dXJuIEp9ZnVuY3Rpb24gc3ooJCl7cmV0dXJuIG1aKFlRKG56LHtwcmluY2lwYWw6WyQucHJpbmNpcGFsXSx0b2tlbl9uYW1lOlskLnRva2VuTmFtZT8/IiJdLHR0bF9zZWNvbmRzOltCaWdJbnQoTWF0aC50cnVuYygkLnR0bFNlY29uZHM/P2J6KSldfSkpfWZ1bmN0aW9uIGl6KCQpe3JldHVybiBtWihZUShveix7dG9rZW46WyQudG9rZW5dLGV4cGlyZXNfYXQ6WyQuZXhwaXJlc0F0XSxncmFudF9pZDpbJC5ncmFudElkPz8iIl19KSl9Y2xhc3Mgcnp7cmVzb2x2ZVRva2VuSG9vazttaW50R3JhbnRIb29rO3ByaW5jaXBhbHM7bWF4QXV0aEFnZTtjb25zdHJ1Y3RvcigkPXt9KXt0aGlzLnJlc29sdmVUb2tlbkhvb2s9JC5yZXNvbHZlVG9rZW4sdGhpcy5taW50R3JhbnRIb29rPSQubWludEdyYW50LHRoaXMubWF4QXV0aEFnZT0kLm1heEF1dGhBZ2U/P216LHRoaXMucHJpbmNpcGFscz10aGlzLnJlc29sdmVUb2tlbkhvb2s/ZnooJC5pbnRyb3NwZWN0UHJpbmNpcGFscyk6bmV3IFNldH1vZmZlcmVkTWV0aG9kcygpe2xldCAkPW5ldyBTZXQ7aWYodGhpcy5yZXNvbHZlVG9rZW5Ib29rKSQuYWRkKCJpbnRyb3NwZWN0X3Rva2VuIik7aWYodGhpcy5taW50R3JhbnRIb29rKSQuYWRkKCJpc3N1ZV9ncmFudCIpO3JldHVybiAkfWFzeW5jIGludHJvc3BlY3RUb2tlbigkLFope2lmKCF0aGlzLnJlc29sdmVUb2tlbkhvb2spdGhyb3cgbmV3IHUxKCJ0aGlzIHdvcmtlciBkb2VzIG5vdCByZXNvbHZlIGNyZWRlbnRpYWxzIik7dXooWix0aGlzLnByaW5jaXBhbHMpLGN6KCQpO2xldCBRO3RyeXtRPWF3YWl0IHRoaXMucmVzb2x2ZVRva2VuSG9vaygkKX1jYXRjaChYKXtpZihYIGluc3RhbmNlb2YgcVgpdGhyb3cgbmV3IHU1KFguZGV0YWlsLFgucmV0cnlBZnRlcik7dGhyb3cgWH1pZihRPT1udWxsKXRocm93IG5ldyBwMSgidW5yZXNvbHZlZCIpO3JldHVybiBRfWFzeW5jIGlzc3VlR3JhbnQoJCxaLFEsWCl7aWYoIXRoaXMubWludEdyYW50SG9vayl0aHJvdyBuZXcgZjUoInRoaXMgd29ya2VyIGRvZXMgbm90IG1pbnQgZ3JhbnRzIik7cmV0dXJuIGR6KFgsdGhpcy5tYXhBdXRoQWdlKSx0aGlzLm1pbnRHcmFudEhvb2soWC5wcmluY2lwYWw/PyIiLCQsWixRKX19ZnVuY3Rpb24gTncoJCl7aWYoJD09bnVsbClyZXR1cm5bXTtyZXR1cm4oQXJyYXkuaXNBcnJheSgkKT8kOlsuLi4kXSkubWFwKChRKT0+UT09bnVsbD8iIjpTdHJpbmcoUSkpfWZ1bmN0aW9uIGM1KCQpe2xldCBaPSQub2ZmZXJlZE1ldGhvZHMoKTtpZihaLnNpemU9PT0wKXJldHVybiBudWxsO2xldCBRPW5ldyBFNihmMSk7aWYoWi5oYXMoImludHJvc3BlY3RfdG9rZW4iKSlRLnVuYXJ5KCJpbnRyb3NwZWN0X3Rva2VuIix7cGFyYW1zOnt0b2tlbjpaJCgpfSxyZXN1bHQ6e3Jlc3VsdDpYOCgpfSxkb2M6IlJlc29sdmUgYW4gb3BhcXVlIGJlYXJlciBjcmVkZW50aWFsIHRvIHRoZSBpZGVudGl0eSBpdCBhdXRoZW50aWNhdGVzIGFzLiIsaGFuZGxlcjphc3luYyhYLEopPT57bGV0IFc9Si5hdXRoO3JldHVybntyZXN1bHQ6c3ooYXdhaXQgJC5pbnRyb3NwZWN0VG9rZW4oU3RyaW5nKFgudG9rZW4/PyIiKSxXKSl9fX0pO2lmKFouaGFzKCJpc3N1ZV9ncmFudCIpKVEudW5hcnkoImlzc3VlX2dyYW50Iix7cGFyYW1zOntwdXJwb3NlOlokKCksc2NvcGVzOlA2KE8wKCJpdGVtIixaJCgpLCEwKSksdHRsX3NlY29uZHM6VkooKX0scmVzdWx0OntyZXN1bHQ6WDgoKX0sZG9jOiJNaW50IGEgc3RhbmRpbmcgZGVsZWdhdGlvbiBjcmVkZW50aWFsIGZvciB0aGUgY2FsbGluZyB1c2VyLiIsaGFuZGxlcjphc3luYyhYLEopPT57bGV0IFc9Si5hdXRoLFk9YXdhaXQgJC5pc3N1ZUdyYW50KFN0cmluZyhYLnB1cnBvc2U/PyIiKSxOdyhYLnNjb3BlcyksTnVtYmVyKFgudHRsX3NlY29uZHM/PzApLFcpO3JldHVybntyZXN1bHQ6aXooWSl9fX0pO3JldHVybiBRfXZhciBmMT0idmdpX3JwYy5JZGVudGl0eS52MSIsUHcsaHo9NDA5Nixiej0zMDAsbXo9OTAwLHUxLHAxLHk2LGY1LHU1LEZ3LG56LG96O3ZhciBhej1PKCgpPT57cVooKTtSMSgpO1g1KCk7UjYoKTtQdz0vXltBLVphLXowLTlfLV0rXC5bQS1aYS16MC05Xy1dK1wuW0EtWmEtejAtOV8tXSokLzt1MT1jbGFzcyB1MSBleHRlbmRzIEVycm9ye3N0YXRpYyBlcnJvcktpbmQ9ImludHJvc3BlY3Rpb25fcmVmdXNlZCI7ZXJyb3JLaW5kPSJpbnRyb3NwZWN0aW9uX3JlZnVzZWQiO2NvbnN0cnVjdG9yKCQpe3N1cGVyKCQpO3RoaXMubmFtZT0iSW50cm9zcGVjdGlvblJlZnVzZWRFcnJvciJ9fTtwMT1jbGFzcyBwMSBleHRlbmRzIEVycm9ye3N0YXRpYyBlcnJvcktpbmQ9InRva2VuX3VucmVzb2x2ZWQiO2Vycm9yS2luZD0idG9rZW5fdW5yZXNvbHZlZCI7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJUb2tlblVucmVzb2x2ZWRFcnJvciJ9fTt5Nj1jbGFzcyB5NiBleHRlbmRzIEVycm9ye3N0YXRpYyBlcnJvcktpbmQ9InN0YWxlX2F1dGgiO2Vycm9yS2luZD0ic3RhbGVfYXV0aCI7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJTdGFsZUF1dGhFcnJvciJ9fTtmNT1jbGFzcyBmNSBleHRlbmRzIEVycm9ye3N0YXRpYyBlcnJvcktpbmQ9ImdyYW50X3JlZnVzZWQiO2Vycm9yS2luZD0iZ3JhbnRfcmVmdXNlZCI7Y29uc3RydWN0b3IoJCl7c3VwZXIoJCk7dGhpcy5uYW1lPSJHcmFudFJlZnVzZWRFcnJvciJ9fTt1NT1jbGFzcyB1NSBleHRlbmRzIEVycm9ye3N0YXRpYyBlcnJvcktpbmQ9ImlkZW50aXR5X3VuYXZhaWxhYmxlIjtlcnJvcktpbmQ9ImlkZW50aXR5X3VuYXZhaWxhYmxlIjtyZXRyeUFmdGVyO2RldGFpbDtjb25zdHJ1Y3RvcigkPSIiLFo9NSl7c3VwZXIoJHx8ImlkZW50aXR5IGxvb2t1cCB1bmF2YWlsYWJsZSIpO3RoaXMubmFtZT0iSWRlbnRpdHlVbmF2YWlsYWJsZUVycm9yIix0aGlzLmRldGFpbD0kLHRoaXMucmV0cnlBZnRlcj1afX07Rnc9bmV3IFNldChbIlx0IixgCmAsIlx2IiwiXGYiLCJcciIsIiAiLCLChSIsIsKgIl0pO256PUUwKFtPMCgicHJpbmNpcGFsIixaJCgpLCExKSxPMCgidG9rZW5fbmFtZSIsWiQoKSwhMSksTzAoInR0bF9zZWNvbmRzIixWSigpLCExKV0pLG96PUUwKFtPMCgidG9rZW4iLFokKCksITEpLE8wKCJleHBpcmVzX2F0Iix0WSgpLCExKSxPMCgiZ3JhbnRfaWQiLFokKCksITEpXSl9KTtmdW5jdGlvbiBVdygpe2xldCAkPW5ldyBVaW50OEFycmF5KDE2KTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCQpO2xldCBaPSIiO2ZvcihsZXQgUT0wO1E8JC5sZW5ndGg7USsrKVorPSRbUV0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4gWn1jbGFzcyBjMXtwcm90b2NvbDtzZXJ2ZXJJZDtwcm90b2NvbFZlcnNpb247ZGlzcGF0Y2hIb29rPW51bGw7ZXh0ZXJuYWxDb25maWc7b25TZXJ2ZVN0YXJ0PW51bGw7c2VydmVTdGFydEZpcmVkPSExO2V4dHJhQmluZGluZ3M9bmV3IE1hcDtjb25zdHJ1Y3RvcigkLFope2lmKHRoaXMucHJvdG9jb2w9JCx0aGlzLnNlcnZlcklkPVo/LnNlcnZlcklkPz9jcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywiIikuc2xpY2UoMCwxMiksdGhpcy5kaXNwYXRjaEhvb2s9Wj8uZGlzcGF0Y2hIb29rPz9udWxsLHRoaXMuZXh0ZXJuYWxDb25maWc9Wj8uZXh0ZXJuYWxMb2NhdGlvbix0aGlzLnByb3RvY29sVmVyc2lvbj1aPy5wcm90b2NvbFZlcnNpb24/PyIiLHRoaXMub25TZXJ2ZVN0YXJ0PVo/Lm9uU2VydmVTdGFydD8/bnVsbCxaPy5lbmFibGVEZXNjcmliZT8/ITApdGhpcy5yZWdpc3RlclJlZmxlY3Rpb24oKX1iaW5kaW5ncygpe2xldCAkPW5ldyBNYXA7JC5zZXQodGhpcy5wcm90b2NvbC5uYW1lLHtuYW1lOnRoaXMucHJvdG9jb2wubmFtZSxwcm90b2NvbDp0aGlzLnByb3RvY29sLHZlcnNpb25FeGVtcHQ6ITF9KTtmb3IobGV0W1osUV1vZiB0aGlzLmV4dHJhQmluZGluZ3MpJC5zZXQoWixRKTtyZXR1cm4gJH1yZWdpc3RlclJlZmxlY3Rpb24oKXtpZih0aGlzLmV4dHJhQmluZGluZ3MuaGFzKHVaKSlyZXR1cm47bGV0ICQ9ejUoe2xpc3RCaW5kaW5nczooKT0+dGhpcy5iaW5kaW5ncygpLGhhc2hGb3I6KFopPT57bGV0IFE9dGhpcy5iaW5kaW5ncygpLmdldChaKTtyZXR1cm4gUT9jVyhRKTpQcm9taXNlLnJlc29sdmUoIiIpfSxzZXJ2ZXJJZDooKT0+dGhpcy5zZXJ2ZXJJZCxzZXJ2ZXJWZXJzaW9uOigpPT4iIn0pO3RoaXMuYWRkUHJvdG9jb2woe25hbWU6dVoscHJvdG9jb2w6JCx2ZXJzaW9uRXhlbXB0OiEwfSwhMCl9cmVnaXN0ZXJJZGVudGl0eSgkKXtsZXQgWj1jNSgkKTtpZighWilyZXR1cm47dGhpcy5hZGRQcm90b2NvbCh7bmFtZTpmMSxwcm90b2NvbDpaLHZlcnNpb25FeGVtcHQ6ITF9LCEwKX1hZGRQcm90b2NvbCgkLFo9ITEpe2lmKHhXKCQubmFtZSxaKSwkLm5hbWU9PT10aGlzLnByb3RvY29sLm5hbWV8fHRoaXMuZXh0cmFCaW5kaW5ncy5oYXMoJC5uYW1lKSl0aHJvdyBFcnJvcihgVHdvIHByb3RvY29scyBhcmUgaG9zdGVkIHVuZGVyIHRoZSBzYW1lIG5hbWUgJyR7JC5uYW1lfScuIFRoZSBuYW1lIGlzIHRoZSByb3V0aW5nIGtleSwgc28gaXQgbXVzdCBiZSB1bmlxdWUuYCk7dGhpcy5leHRyYUJpbmRpbmdzLnNldCgkLm5hbWUsJCl9cmVzb2x2ZSgkLFope2lmKFo9PT1wVyl0aHJvdyBuZXcgWFgoVTEoKSk7bGV0IFE9dGhpcy5iaW5kaW5ncygpLFg9Wy4uLlEua2V5cygpXS5zb3J0KCk7aWYoISQpdGhyb3cgbmV3IHZXKFgpO3RyeXt4VygkLCEwKX1jYXRjaChZKXt0aHJvdyBuZXcgVDgoYCd2Z2lfcnBjLnByb3RvY29sJyBpcyBub3QgYSBwcm90b2NvbCBuYW1lOiAke1kubWVzc2FnZX1gKX1sZXQgSj1RLmdldCgkKTtpZighSil0aHJvdyBUOC5ub3RIb3N0ZWQoJCxYKTtsZXQgVz1KLnByb3RvY29sLmdldE1ldGhvZChaKTtpZighVyl7bGV0IFk9Si5wcm90b2NvbC5tZXRob2ROYW1lcygpLnNvcnQoKTt0aHJvdyBuZXcgWFgoYFByb3RvY29sICckeyR9JyBoYXMgbm8gbWV0aG9kICcke1p9Jy4gQXZhaWxhYmxlOiBbJHtZLmpvaW4oIiwgIil9XS5gKX1yZXR1cm57bWV0aG9kOlcsYmluZGluZzpKfX1hc3luYyBub3RpZnlUcmFuc3BvcnQoJCl7aWYodGhpcy5zZXJ2ZVN0YXJ0RmlyZWQpcmV0dXJuO2lmKHRoaXMub25TZXJ2ZVN0YXJ0KWF3YWl0IHRoaXMub25TZXJ2ZVN0YXJ0KCQpO3RoaXMuc2VydmVTdGFydEZpcmVkPSEwfWNoZWNrUHJvdG9jb2xWZXJzaW9uKCQsWil7bGV0IFE9Wj8ucHJvdG9jb2w/P3RoaXMucHJvdG9jb2wsWD1RLnByb3RvY29sVmVyc2lvblBhcnRzLEo9US5wcm90b2NvbFZlcnNpb247aWYoJD09PXZvaWQgMCl0aHJvdyBuZXcgeFgoYFZHSSBjbGllbnQvd29ya2VyIHByb3RvY29sX3ZlcnNpb24gbWlzbWF0Y2guCiAgQ2xpZW50OiA8bm90IGRlY2xhcmVkPgogIFNlcnZlcjogJHtKfQogIERpcmVjdGlvbjogdGhlIGNsaWVudCBkaWQgbm90IHNlbmQgYSB2Z2lfcnBjLnByb3RvY29sX3ZlcnNpb24gbWV0YWRhdGEga2V5LiBUaGlzIGlzIGVpdGhlciBhIHZnaS1ycGMgZnJhbWV3b3JrIGJ1ZyBvciBhIG5vbi1WR0kgY2xpZW50IGNvbm5lY3RpbmcgdG8gYSBWR0kgd29ya2VyLmApO2xldCBXO3RyeXtXPVZXKCQpfWNhdGNoe3Rocm93IG5ldyB4WChgVkdJIGNsaWVudC93b3JrZXIgcHJvdG9jb2xfdmVyc2lvbiBtaXNtYXRjaC4KICBDbGllbnQ6ICR7JH0KICBTZXJ2ZXI6ICR7Sn0KICBEaXJlY3Rpb246IGNsaWVudCBzZW50IGEgbWFsZm9ybWVkIHByb3RvY29sX3ZlcnNpb24uIEV4cGVjdGVkIGNhbm9uaWNhbCBzZW12ZXIgTUFKT1IuTUlOT1IuUEFUQ0guYCl9aWYoV1swXT09PVhbMF0mJldbMV09PT1YWzFdKXJldHVybjtsZXQgRz1XWzBdPFhbMF18fFdbMF09PT1YWzBdJiZXWzFdPFhbMV0/YGNsaWVudCBpcyB0b28gb2xkOyB1cGdyYWRlIHRoZSBWR0kgZXh0ZW5zaW9uL2NsaWVudCB0byBhIHZlcnNpb24gc3VwcG9ydGluZyBwcm90b2NvbF92ZXJzaW9uICR7Sn0uYDpgc2VydmVyIGlzIHRvbyBvbGQ7IHVwZ3JhZGUgdGhlIFZHSSB3b3JrZXIgdG8gYSB2ZXJzaW9uIHN1cHBvcnRpbmcgcHJvdG9jb2xfdmVyc2lvbiAkeyR9LmA7dGhyb3cgbmV3IHhYKGBWR0kgY2xpZW50L3dvcmtlciBwcm90b2NvbF92ZXJzaW9uIG1pc21hdGNoLgogIENsaWVudDogJHskfQogIFNlcnZlcjogJHtKfQogIERpcmVjdGlvbjogJHtHfWApfWFzeW5jIHJ1bigpe2lmKHByb2Nlc3Muc3RkaW4uaXNUVFl8fHByb2Nlc3Muc3Rkb3V0LmlzVFRZKXByb2Nlc3Muc3RkZXJyLndyaXRlKGBXQVJOSU5HOiBUaGlzIHByb2Nlc3MgY29tbXVuaWNhdGVzIHZpYSBBcnJvdyBJUEMgb24gc3RkaW4vc3Rkb3V0IGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgcnVuIGludGVyYWN0aXZlbHkuCkl0IHNob3VsZCBiZSBsYXVuY2hlZCBhcyBhIHN1YnByb2Nlc3MgYnkgYW4gUlBDIGNsaWVudCAoZS5nLiB2Z2lfcnBjLmNvbm5lY3QoKSkuCmApO2xldCAkPXByb2Nlc3Muc3RkaW47YXdhaXQgdGhpcy5zZXJ2ZUNvbm5lY3Rpb24oJCl9YXN5bmMgc2VydmVDb25uZWN0aW9uKCQsWixRPWdRLlBJUEUpe2xldCBYPWF3YWl0IHhKLmNyZWF0ZSgkKSxKPW5ldyBTNyhaKTt0cnl7d2hpbGUoITApYXdhaXQgdGhpcy5ub3RpZnlUcmFuc3BvcnQoUSksYXdhaXQgdGhpcy5zZXJ2ZU9uZShYLEosUSl9Y2F0Y2goVyl7aWYoVy5tZXNzYWdlPy5pbmNsdWRlcygiY2xvc2VkIil8fFcubWVzc2FnZT8uaW5jbHVkZXMoIkV4cGVjdGVkIFNjaGVtYSBNZXNzYWdlIil8fFcubWVzc2FnZT8uaW5jbHVkZXMoIm51bGwgb3IgbGVuZ3RoIDAiKXx8Vy5jb2RlPT09IkVQSVBFInx8Vy5jb2RlPT09IkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFInx8Vy5jb2RlPT09IkVSUl9TVFJFQU1fREVTVFJPWUVEInx8VyBpbnN0YW5jZW9mIEVycm9yJiZXLm1lc3NhZ2UuaW5jbHVkZXMoIkVPRiIpKXJldHVybjt0aHJvdyBXfWZpbmFsbHl7YXdhaXQgWC5jYW5jZWwoKX19YXN5bmMgc2VydmVPbmUoJCxaLFEpe2xldCBYPWF3YWl0ICQucmVhZFN0cmVhbSgpO2lmKCFYKXRocm93IEVycm9yKCJFT0YiKTtsZXR7c2NoZW1hOkosYmF0Y2hlczpXfT1YO2lmKFcubGVuZ3RoPT09MCl7bGV0IFQ9bmV3IGIoIlByb3RvY29sRXJyb3IiLCJSZXF1ZXN0IHN0cmVhbSBjb250YWlucyBubyBiYXRjaGVzIiwiIiksRT1xJChtSixULHRoaXMuc2VydmVySWQsbnVsbCk7YXdhaXQgWi53cml0ZVN0cmVhbShtSixbRV0pO3JldHVybn1sZXQgWT1XWzBdLEcsSCx6LHE7dHJ5e2xldCBUPXlKKEosWSk7Rz1ULm1ldGhvZE5hbWUsSD1ULnByb3RvY29sLHo9VC5wYXJhbXMscT1ULnJlcXVlc3RJZH1jYXRjaChUKXtsZXQgRT1xJChtSixULHRoaXMuc2VydmVySWQsbnVsbCk7aWYoYXdhaXQgWi53cml0ZVN0cmVhbShtSixbRV0pLFQgaW5zdGFuY2VvZiBnWHx8VCBpbnN0YW5jZW9mIGIpcmV0dXJuO3Rocm93IFR9bGV0IFAsVTt0cnl7KHttZXRob2Q6UCxiaW5kaW5nOlV9PXRoaXMucmVzb2x2ZShILEcpKX1jYXRjaChUKXtsZXQgRT1xJChtSixULHRoaXMuc2VydmVySWQscSk7YXdhaXQgWi53cml0ZVN0cmVhbShtSixbRV0pO3JldHVybn10cnl7azYoSixQLnBhcmFtc1NjaGVtYSxHKX1jYXRjaChUKXtsZXQgRT1QLnR5cGU9PT1TJC5VTkFSWT9QLnJlc3VsdFNjaGVtYTptSixfPXEkKEUsVCx0aGlzLnNlcnZlcklkLHEpO2F3YWl0IFoud3JpdGVTdHJlYW0oRSxbX10pO3JldHVybn1pZighVS52ZXJzaW9uRXhlbXB0JiZVLnByb3RvY29sLnByb3RvY29sVmVyc2lvblBhcnRzIT09bnVsbCl0cnl7bGV0IFQ9WS5tZXRhZGF0YTt0aGlzLmNoZWNrUHJvdG9jb2xWZXJzaW9uKFQ/LmdldChTSiksVSl9Y2F0Y2goVCl7bGV0IEU9UC50eXBlPT09UyQuVU5BUlk/UC5yZXN1bHRTY2hlbWE6bUosXz1xJChFLFQsdGhpcy5zZXJ2ZXJJZCxxKTthd2FpdCBaLndyaXRlU3RyZWFtKEUsW19dKTtyZXR1cm59bGV0IE09UC50eXBlPT09UyQuVU5BUlk/InVuYXJ5Ijoic3RyZWFtIixMO2lmKHRoaXMuZGlzcGF0Y2hIb29rKXRyeXtMPW1aKFkpfWNhdGNoe31sZXQgRDtpZihNPT09InN0cmVhbSIpRD1VdygpO2xldCBSPXttZXRob2Q6RyxtZXRob2RUeXBlOk0sc2VydmVySWQ6dGhpcy5zZXJ2ZXJJZCxyZXF1ZXN0SWQ6cSxwcm90b2NvbDpVLm5hbWUscHJvdG9jb2xIYXNoOmF3YWl0IGNXKFUpLHByb3RvY29sVmVyc2lvbjp0aGlzLnByb3RvY29sVmVyc2lvbixraW5kOlEscHJpbmNpcGFsOiIiLGF1dGhEb21haW46IiIsYXV0aGVudGljYXRlZDohMSxyZW1vdGVBZGRyOiIiLHJlcXVlc3REYXRhOkwsc3RyZWFtSWQ6RH0sVj17aW5wdXRCYXRjaGVzOjAsb3V0cHV0QmF0Y2hlczowLGlucHV0Um93czowLG91dHB1dFJvd3M6MCxpbnB1dEJ5dGVzOjAsb3V0cHV0Qnl0ZXM6MH0sZz10aGlzLmRpc3BhdGNoSG9vaz8ub25EaXNwYXRjaFN0YXJ0KFIpLHc7dzEoeixQLmRlZmF1bHRzKTt0cnl7aWYoUC50eXBlPT09UyQuVU5BUlkpYXdhaXQgbkwoUCx6LFosdGhpcy5zZXJ2ZXJJZCxxLHRoaXMuZXh0ZXJuYWxDb25maWcsUSk7ZWxzZSBhd2FpdCBsTChQLHosWiwkLHRoaXMuc2VydmVySWQscSx0aGlzLmV4dGVybmFsQ29uZmlnLFEpfWNhdGNoKFQpe3Rocm93IHc9VCBpbnN0YW5jZW9mIEVycm9yP1Q6RXJyb3IoU3RyaW5nKFQpKSxUfWZpbmFsbHl7dGhpcy5kaXNwYXRjaEhvb2s/Lm9uRGlzcGF0Y2hFbmQoZyxSLFYsdyl9fX12YXIgbUo7dmFyIHR6PU8oKCk9PntxWigpO3oxKCk7ZEwoKTtvTCgpO0haKCk7TTEoKTtheigpO2xYKCk7cTUoKTtTMSgpO21YKCk7QjcoKTttSj1FMChbXSl9KTthc3luYyBmdW5jdGlvbiByTCgkLFope2F3YWl0IG5ldyBjMSgkLFouc2VydmVyT3B0aW9ucykuc2VydmVDb25uZWN0aW9uKFoucmVhZGFibGUsWi53cml0YWJsZSxaLnRyYW5zcG9ydEtpbmQpfXZhciBhTD1PKCgpPT57dHooKX0pO2FzeW5jIGZ1bmN0aW9uIHRMKCQsWil7bGV0IFE9a1EoJCk7aWYoWilRPWF3YWl0IEUkKFEsWik7bGV0IFg9eUooUS5zY2hlbWEsUSk7cmV0dXJue21ldGhvZE5hbWU6WC5tZXRob2ROYW1lLHBhcmFtczpYLnBhcmFtcyxzY2hlbWE6US5zY2hlbWF9fWZ1bmN0aW9uIGVMKCQsWixRLFgpe3JldHVybiB2UShaLFEsJCx7cHJvdG9jb2xWZXJzaW9uOlh9KX1mdW5jdGlvbiAkQSgkLFosUT0iIixYPW51bGwpe2xldCBKPVo/P0UwKFtdKTtyZXR1cm4gZjAoSixbcSQoSiwkLFEsWCldKX1mdW5jdGlvbiBaQSgkKXtyZXR1cm4gWEEoJCx5JCl9ZnVuY3Rpb24gUUEoJCl7cmV0dXJuIFhBKCQsU0opfWFzeW5jIGZ1bmN0aW9uIFhBKCQsWil7dHJ5e2xldCBRPWF3YWl0IEwxKCQpO3doaWxlKCEwKXtsZXQgWD1hd2FpdCBRLnJlYWRTdHJlYW0oKTtpZighWClyZXR1cm4gbnVsbDtmb3IobGV0IEogb2YgWC5iYXRjaGVzKXtsZXQgVz1KLm1ldGFkYXRhPy5nZXQoWik7aWYoVylyZXR1cm4gV319fWNhdGNoe3JldHVybiBudWxsfX1hc3luYyBmdW5jdGlvbiBKQSgkKXtsZXQgUT1hd2FpdChhd2FpdCBMMSgkKSkucmVhZFN0cmVhbSgpO2lmKCFRKXJldHVybiBudWxsO2ZvcihsZXQgWCBvZiBRLmJhdGNoZXMpe2lmKFgubnVtUm93cz4wKXtsZXQgSj1YLmdldENoaWxkKCJyZXN1bHQiKTtpZighSilyZXR1cm4gbnVsbDtsZXQgVz1KLmdldCgwKTtpZihXPT1udWxsKXJldHVybiBudWxsO3JldHVybntlbnZlbG9wZVNjaGVtYTpYLnNjaGVtYSxyZXN1bHRCeXRlczpXfX1pZighWC5tZXRhZGF0YT8uaGFzKEtRKSlyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBXQSgkLFope2xldCBRPSQuZmllbGRzLmxlbmd0aD09PTA/R1EoJCxuZXcgTWFwKTp2WCgkLHtyZXN1bHQ6Wn0sbmV3IE1hcCk7cmV0dXJuIGYwKCQsW1FdKX12YXIgWUE9TygoKT0+e3FaKCk7UzYoKTtJOCgpO0o4KCk7UzEoKTttWCgpfSk7dmFyIEdBPU8oKCk9PntaTigpO3E2KCk7SFooKTtJOCgpO3VMKCk7bVcoKTtjTCgpO1g1KCk7WDcoKTthTCgpO3R6KCk7YXooKTtsWCgpO1lBKCk7RVUoKX0pO3ZhciBLQT17fTtQOChLQSx7d3JpdGVVbmFyeVJlc3VsdDooKT0+V0Esd3JpdGVSZXF1ZXN0OigpPT5lTCx2YWxpZGF0ZVNwaWZmZUlkOigpPT5XWSx1dGY4TGVuZ3RoOigpPT5seix1bnBhY2tTdGF0ZVRva2VuOigpPT54MSx1aW50ODooKT0+eE4sdWludDY0OigpPT5oTix1aW50MzI6KCk9PnlOLHVpbnQxNjooKT0+dk4sdHJpbUZvclNoYXBlVGVzdDooKT0+cDUsdG9rZW5EaWdlc3Q6KCk9PmlMLHRvU2NoZW1hOigpPT5UUSxzdWJwcm9jZXNzQ29ubmVjdDooKT0+VlUsc3RyOigpPT5CTixzcGlmZmVYNTA5SGVhZGVyUHJvdmlkZXI6KCk9PkJ6LHNlcnZlU3RyZWFtOigpPT5yTCxycGNQYXRoRnJvbVByZWZpeDooKT0+XzgscnBjUGF0aDooKT0+SzEscmVzb2x2ZUV4dGVybmFsTG9jYXRpb246KCk9PkUkLHJlc2VydmVkUGF0aDooKT0+ajYscmVxdWlyZVBlZXJJZGVudGl0eTooKT0+bE4scmVqZWN0SndzU2hhcGVkOigpPT5jeixyZWRhY3RDbGFpbXM6KCk9PnpILHJlYWRVbmFyeVJlc3VsdDooKT0+SkEscmVhZFJlcXVlc3Q6KCk9PnRMLHBpcGVDb25uZWN0OigpPT5rNyxwaWNrQXBwbGljYXRpb25Qcm90b2NvbDooKT0+RDEscGVlcklkZW50aXR5UHJpbWFyeTooKT0+YlcscGFyc2VYZmNjOigpPT55NSxwYXJzZVVzZUlkVG9rZW5Bc0JlYXJlcjooKT0+TlUscGFyc2VSZXNvdXJjZU1ldGFkYXRhVXJsOigpPT5xVSxwYXJzZURldmljZUNvZGVDbGllbnRTZWNyZXQ6KCk9Pk1VLHBhcnNlRGV2aWNlQ29kZUNsaWVudElkOigpPT5VVSxwYXJzZUNsaWVudFNlY3JldDooKT0+RlUscGFyc2VDbGllbnRJZDooKT0+UFUscGFyc2VDYXBhYmlsaXRpZXNGcm9tSGVhZGVyczooKT0+Zkcsb3RlbFRyYWNlQ29udGV4dDooKT0+cUgsb2JzZXJ2ZVBlZXJJZGVudGl0eTooKT0+WjUsb2F1dGhSZXNvdXJjZU1ldGFkYXRhVG9Kc29uOigpPT5WMSxub3JtYWxpc2VQcmluY2lwYWxzOigpPT5meixub1JlZGFjdGlvbjooKT0+ZUYsbmdpbnhTcGlmZmVQcm92aWRlcjooKT0+a3osbXRsc0F1dGhlbnRpY2F0ZVhmY2M6KCk9Pmp6LG10bHNBdXRoZW50aWNhdGVTdWJqZWN0OigpPT5SeixtdGxzQXV0aGVudGljYXRlRmluZ2VycHJpbnQ6KCk9PlZ6LG10bHNBdXRoZW50aWNhdGU6KCk9PmgxLG1heWJlRXh0ZXJuYWxpemVCYXRjaDooKT0+a0osbWFrZUV4dGVybmFsTG9jYXRpb25CYXRjaDooKT0+RzEsand0QXV0aGVudGljYXRlOigpPT5Deixqc29uU3RhdGVTZXJpYWxpemVyOigpPT55MSxpc0p3c1NoYXBlZDooKT0+cHosaXNFeHRlcm5hbExvY2F0aW9uQmF0Y2g6KCk9PkYkLGlzQ2FwYWJpbGl0eVNuYXBzaG90RnJlc2g6KCk9PnVHLGlyb2hIdHRwQnJpZGdlT3B0aW9uczooKT0+cEwsaXJvaEZvcndhcmRlZEhlYWRlcklkZW50aXR5UHJvdmlkZXI6KCk9Pnl6LGludDg6KCk9PmdOLGludDMyOigpPT5fTixpbnQxNjooKT0+VE4saW50OigpPT5JTixpbmZlclBhcmFtVHlwZXM6KCk9PnlXLGh0dHBzT25seVZhbGlkYXRvcjooKT0+c0csaHR0cE9BdXRoTWV0YWRhdGE6KCk9PnpVLGh0dHBJbnRyb3NwZWN0OigpPT5PMSxodHRwQ29ubmVjdDooKT0+VjcsaGVhZGVyc0Zyb21Ob2RlUmF3SGVhZGVyczooKT0+d3osZ2NwTG9hZEJhbGFuY2VyU3BpZmZlUHJvdmlkZXI6KCk9PlR6LGZsb2F0MzI6KCk9Pm1OLGZsb2F0OigpPT5iTixmaW5kU3RhdGVUb2tlbjooKT0+WkEsZmluZFByb3RvY29sVmVyc2lvbjooKT0+UUEsZmV0Y2hPQXV0aE1ldGFkYXRhOigpPT5FNyxlbnZveVhmY2NTcGlmZmVQcm92aWRlcjooKT0+Z3osZW5jb2RlVG9rZW5JZGVudGl0eTooKT0+c3osZW5jb2RlSXNzdWVkR3JhbnQ6KCk9Pml6LGRpc2NvdmVySHR0cENhcGFiaWxpdGllczooKT0+azgsZGVjb2RlQ29udGVudEVuY29kaW5nOigpPT50SCxjcmVhdGVIdHRwSGFuZGxlcjooKT0+S3osY2hlY2tJbnRyb3NwZWN0b3I6KCk9PnV6LGNoZWNrRnJlc2huZXNzOigpPT5keixjaGFpbkF1dGhlbnRpY2F0ZTooKT0+RTEsYnl0ZXM6KCk9PmtOLGJ1aWxkSWRlbnRpdHlQcm90b2NvbDooKT0+YzUsYnVpbGRFcnJvclN0cmVhbTooKT0+JEEsYm9vbDooKT0+Zk4sYmVhcmVyQXV0aGVudGljYXRlU3RhdGljOigpPT54NyxiZWFyZXJBdXRoZW50aWNhdGU6KCk9Pkw1LGF6dXJlQXBwbGljYXRpb25HYXRld2F5U3BpZmZlUHJvdmlkZXI6KCk9Pkl6LGF3c0FsYlNwaWZmZVByb3ZpZGVyOigpPT5feixhbnlPZlBlZXJJZGVudGl0aWVzOigpPT5kTixhbGxPZlBlZXJJZGVudGl0aWVzOigpPT5uTixhZGFwdFNlcnZpY2VEZXNjcmlwdGlvbjooKT0+QTEsVmdpUnBjU2VydmVyOigpPT5jMSxWZXJzaW9uRXJyb3I6KCk9PmdYLFVQTE9BRF9VUkxfUkVTUE9OU0VfU0NIRU1BOigpPT5USixVUExPQURfVVJMX1BBUkFNU19TQ0hFTUE6KCk9PlY2LFVQTE9BRF9VUkxfTUVUSE9EOigpPT5fUSxUcmFuc3BvcnRLaW5kOigpPT5nUSxUb2tlblVucmVzb2x2ZWRFcnJvcjooKT0+cDEsVE9LRU5fSURFTlRJVFlfU0NIRU1BOigpPT5ueixTdWJqZWN0U3RhYmlsaXR5OigpPT5XOCxTdGFsZUF1dGhFcnJvcjooKT0+eTYsU2Vzc2lvbkxvc3RFcnJvcjooKT0+QjgsU2VydmVyRHJhaW5pbmdFcnJvcjooKT0+c1ksU1RBVEVfS0VZOigpPT55JCxTRVJWRVJfU0NPUEU6KCk9PnJXLFNFUlZFUl9JRF9LRVk6KCk9PndXLFJwY0Vycm9yOigpPT5iLFJQQ19NRVRIT0RfS0VZOigpPT55WCxSUENfRVJST1JfSEVBREVSOigpPT5CSixSRVFVRVNUX1ZFUlNJT05fS0VZOigpPT5oWCxSRVFVRVNUX1ZFUlNJT046KCk9PklRLFJFUVVFU1RfSURfS0VZOigpPT53SixSRURBQ1RFRDooKT0+SEgsUHJvdG9jb2w6KCk9PkU2LFBpcGVTdHJlYW1TZXNzaW9uOigpPT5qMSxQZWVyU3ViamVjdEtpbmQ6KCk9PkhYLFBlZXJSZXNvbHV0aW9uQ29udGV4dDooKT0+UDEsUGVlcklkZW50aXR5VW5hdmFpbGFibGVFcnJvcjooKT0+QlosUGVlcklkZW50aXR5U3RhdHVzOigpPT5DMCxQZWVySWRlbnRpdHlSZXN1bHQ6KCk9PlAkLFBlZXJJZGVudGl0eVJlamVjdGVkRXJyb3I6KCk9PkEkLFBlZXJJZGVudGl0eTooKT0+cFgsUGVlckV2aWRlbmNlU2V0OigpPT5jWCxPdXRwdXRDb2xsZWN0b3I6KCk9PnhRLE1ldGhvZFR5cGU6KCk9PlMkLE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3I6KCk9PlhYLE1BWF9VUExPQURfVVJMX0NPVU5UOigpPT5JVyxNQVhfVE9LRU5fQllURVM6KCk9Pmh6LExPR19NRVNTQUdFX0tFWTooKT0+TTYsTE9HX0xFVkVMX0tFWTooKT0+S1EsTE9HX0VYVFJBX0tFWTooKT0+RUosSW50cm9zcGVjdGlvblJlZnVzZWRFcnJvcjooKT0+dTEsSWRlbnRpdHlVbmF2YWlsYWJsZUVycm9yOigpPT51NSxJZGVudGl0eUltcGw6KCk9PnJ6LElkZW50aXR5QXNzdXJhbmNlOigpPT5LWCxJU1NVRURfR1JBTlRfU0NIRU1BOigpPT5veixJUk9IX0ZPUldBUkRFRF9FTkRQT0lOVF9IRUFERVI6KCk9PnZ6LElERU5USVRZX1BST1RPQ09MX05BTUU6KCk9PmYxLEh0dHBTdHJlYW1TZXNzaW9uOigpPT5CNixHcmFudFJlZnVzZWRFcnJvcjooKT0+ZjUsRmRTaW5rOigpPT5LSCxFUlJPUl9LSU5EX1NFU1NJT05fTE9TVDooKT0+dkcsRVJST1JfS0lORF9TRVJWRVJfRFJBSU5JTkc6KCk9PnlHLEVSUk9SX0tJTkRfTUVUSE9EX05PVF9JTVBMRU1FTlRFRDooKT0+eEcsRVJST1JfS0lORF9LRVk6KCk9PmRHLERFRkFVTFRfTUFYX0FVVEhfQUdFX1NFQ09ORFM6KCk9Pm16LERFRkFVTFRfSURFTlRJVFlfVFRMX1NFQ09ORFM6KCk9PmJ6LEF1dGhVbmF2YWlsYWJsZUVycm9yOigpPT5xWCxBdXRoUmVhc29uOigpPT5DWixBdXRoRmFpbHVyZTooKT0+cVEsQXV0aENvbnRleHQ6KCk9PnpaLEFjY2Vzc0xvZ1NhbXBsZXI6KCk9PmdHLEFjY2Vzc0xvZ0hvb2s6KCk9PlBILEFVVEhfUkVBU09OX0hFQURFUjooKT0+blcsQVVUSF9QUk9YWV9SRVFVSVJFRF9IRUFERVI6KCk9Pm9XLEFSUk9XX0NPTlRFTlRfVFlQRTooKT0+T1p9KTt2YXIgZXo9TygoKT0+e0dBKCl9KTtKUSgpO0pRKCk7SlEoKTtKUSgpO0pRKCk7SlEoKTtKUSgpO0pRKCk7ZXooKTt2YXIgTXc9T2JqZWN0LmRlZmluZVByb3BlcnR5LEx3PSgkKT0+JDtmdW5jdGlvbiBBdygkLFope3RoaXNbJF09THcuYmluZChudWxsLFopfXZhciBEdz0oJCxaKT0+e2Zvcih2YXIgUSBpbiBaKU13KCQsUSx7Z2V0OlpbUV0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsc2V0OkF3LmJpbmQoWixRKX0pfSxRJD17TnVsbDoxLEludDoyLEZsb2F0OjMsQmluYXJ5OjQsVXRmODo1LEJvb2w6NixEZWNpbWFsOjcsRGF0ZTo4LFRpbWU6OSxUaW1lc3RhbXA6MTAsSW50ZXJ2YWw6MTEsTGlzdDoxMixTdHJ1Y3Q6MTMsVW5pb246MTQsRml4ZWRTaXplQmluYXJ5OjE1LEZpeGVkU2l6ZUxpc3Q6MTYsTWFwOjE3LER1cmF0aW9uOjE4LExhcmdlQmluYXJ5OjE5LExhcmdlVXRmODoyMCxEaWN0aW9uYXJ5Oi0xfTtmdW5jdGlvbiBROSgkKXtyZXR1cm4gJC50eXBlSWQ9PT1RJC5JbnR9ZnVuY3Rpb24gT3coJCl7cmV0dXJuICQudHlwZUlkPT09USQuQmluYXJ5fHwkLnR5cGVJZD09PVEkLkxhcmdlQmluYXJ5fWZ1bmN0aW9uIEN3KCQpe3JldHVybiAkLnR5cGVJZD09PVEkLkJvb2x9ZnVuY3Rpb24gancoJCl7cmV0dXJuICQudHlwZUlkPT09USQuTGlzdH1mdW5jdGlvbiBWdygkKXtyZXR1cm4gJC50eXBlSWQ9PT1RJC5TdHJ1Y3R9ZnVuY3Rpb24gUncoJCl7cmV0dXJuICQudHlwZUlkPT09USQuTWFwfWZ1bmN0aW9uIEV3KCQpe3JldHVybiAkLnR5cGVJZD09PVEkLkRpY3Rpb25hcnl9dmFyIE9BPXt9O0R3KE9BLHtEYXRlVW5pdDooKT0+d3csSW50ZXJ2YWxVbml0OigpPT5TdyxUaW1lVW5pdDooKT0+ZDEsVW5pb25Nb2RlOigpPT5CdyxhZG9wdEFycm93SnNTaGFwZTooKT0+aVMsYmFja2VuZDooKT0+c1MsYmF0Y2hGcm9tQ29sdW1uczooKT0+bEosYmF0Y2hGcm9tUm93czooKT0+ZkosYmF0Y2hUb1NjYWxhckRpY3Q6KCk9PmJBLGJhdGNoVG9TZWNyZXREaWN0OigpPT5mUyxiaW5hcnk6KCk9PmtBLGJvb2w6KCk9PmpBLGJ1aWxkU3RhdGlzdGljc0JhdGNoOigpPT5vUyxjb2x1bW5Gcm9tQXJyYXk6KCk9PmJTLGRhdGU6KCk9Pkc5LGRhdGVEYXk6KCk9Pmh3LGRhdGVNaWxsaXNlY29uZDooKT0+YncsZGVjaW1hbDooKT0+WTksZGVjaW1hbDEyODooKT0+dncsZGVjaW1hbDI1NjooKT0+eXcsZGVjb2RlRGljdFZhbHVlOigpPT5tUyxkZW5zZVVuaW9uOigpPT5vdyxkZXNlcmlhbGl6ZUJhdGNoOigpPT5HWSxkZXNlcmlhbGl6ZVNjaGVtYTooKT0+YTUsZGljdGlvbmFyeTooKT0+eEEsZHVyYXRpb246KCk9PmN3LGVtcHR5QmF0Y2g6KCk9PnI1LGZpZWxkOigpPT5jSixmaWx0ZXJCYXRjaDooKT0+Y1MsZml4ZWRTaXplQmluYXJ5OigpPT54dyxmaXhlZFNpemVMaXN0OigpPT5kdyxmbG9hdDE2OigpPT5fdyxmbG9hdDMyOigpPT5UdyxmbG9hdDY0OigpPT5TQSxpbnQ6KCk9Pkl3LGludDE2OigpPT5pNSxpbnQzMjooKT0+WDksaW50NjQ6KCk9Pko5LGludDg6KCk9PlZBLGludGVydmFsOigpPT5sdyxpdGVyUm93czooKT0+eTgsbGFyZ2VCaW5hcnk6KCk9PklBLGxhcmdlVXRmODooKT0+Z3csbGlzdDooKT0+VEEsbWFwOigpPT5nQSxudWxsVHlwZTooKT0+Q0EscHJvamVjdEJhdGNoOigpPT5sUyxwcm9qZWN0U2NoZW1hOigpPT51QSxyZWFkQ2Fub25pY2FsVmFsdWU6KCk9Pm04LHNhZmVOdW1iZXI6KCk9PnBTLHNjaGVtYTooKT0+a3csc2VyaWFsaXplQmF0Y2g6KCk9Pk1YLHNlcmlhbGl6ZVNjaGVtYTooKT0+bzUsc3BhcnNlVW5pb246KCk9Pm53LHN0cnVjdDooKT0+SzksdGltZTooKT0+czEsdGltZU1pY3Jvc2Vjb25kOigpPT51dyx0aW1lTWlsbGlzZWNvbmQ6KCk9PmZ3LHRpbWVOYW5vc2Vjb25kOigpPT5wdyx0aW1lU2Vjb25kOigpPT5tdyx0aW1lc3RhbXA6KCk9Pl9BLHVpbnQxNjooKT0+RUEsdWludDMyOigpPT53QSx1aW50NjQ6KCk9Plc5LHVpbnQ4OigpPT5SQSx1bmlvbjooKT0+SDksdXRmODooKT0+QkEsd2l0aEJhdGNoTWV0YWRhdGE6KCk9PmRTfSk7dmFyIGQxPXtTRUNPTkQ6bC5TRUNPTkQsTUlMTElTRUNPTkQ6bC5NSUxMSVNFQ09ORCxNSUNST1NFQ09ORDpsLk1JQ1JPU0VDT05ELE5BTk9TRUNPTkQ6bC5OQU5PU0VDT05EfSx3dz17REFZOnIwLkRBWSxNSUxMSVNFQ09ORDpyMC5NSUxMSVNFQ09ORH0sU3c9e1lFQVJfTU9OVEg6czAuWUVBUl9NT05USCxEQVlfVElNRTpzMC5EQVlfVElNRSxNT05USF9EQVlfTkFOTzpzMC5NT05USF9EQVlfTkFOT30sQnc9e1NwYXJzZTptMC5TcGFyc2UsRGVuc2U6bTAuRGVuc2V9O2Z1bmN0aW9uIGt3KCQsWil7cmV0dXJuIG5ldyBRMCgkLFo/P25ldyBNYXApfWZ1bmN0aW9uIGNKKCQsWixRPSEwLFgpe3JldHVybiBuZXcgYSgkLFosUSxYPz9uZXcgTWFwKX12YXIgQ0E9KCk9Pm5ldyBqJCxqQT0oKT0+bmV3IFYkLFZBPSgpPT5uZXcgczgsaTU9KCk9Pm5ldyBpOCxYOT0oKT0+bmV3IEdaLEo5PSgpPT5uZXcgQVosUkE9KCk9Pm5ldyByOCxFQT0oKT0+bmV3IGE4LHdBPSgpPT5uZXcgdDgsVzk9KCk9Pm5ldyBWUTtmdW5jdGlvbiBJdygkPTMyLFo9ITApe2lmKFopc3dpdGNoKCQpe2Nhc2UgODpyZXR1cm4gVkEoKTtjYXNlIDE2OnJldHVybiBpNSgpO2Nhc2UgMzI6cmV0dXJuIFg5KCk7Y2FzZSA2NDpyZXR1cm4gSjkoKX1lbHNlIHN3aXRjaCgkKXtjYXNlIDg6cmV0dXJuIFJBKCk7Y2FzZSAxNjpyZXR1cm4gRUEoKTtjYXNlIDMyOnJldHVybiB3QSgpO2Nhc2UgNjQ6cmV0dXJuIFc5KCl9dGhyb3cgRXJyb3IoYGludDogdW5zdXBwb3J0ZWQgYml0V2lkdGggJHskfWApfXZhciBfdz0oKT0+bmV3IHQ2LFR3PSgpPT5uZXcgZTgsU0E9KCk9Pm5ldyAkUSxCQT0oKT0+bmV3IFQkLGd3PSgpPT5uZXcgYVEsa0E9KCk9Pm5ldyB4WixJQT0oKT0+bmV3IHJRLHh3PSgkKT0+bmV3IGVRKCQpO2Z1bmN0aW9uIFk5KCQsWixRPTEyOCl7cmV0dXJuIG5ldyB0UShaLCQsUSl9dmFyIHZ3PSgkLFopPT5ZOSgkLFosMTI4KSx5dz0oJCxaKT0+WTkoJCxaLDI1NiksRzk9KCQ9cjAuTUlMTElTRUNPTkQpPT5uZXcgTzgoJCksaHc9KCk9Pkc5KHIwLkRBWSksYnc9KCk9Pkc5KHIwLk1JTExJU0VDT05EKTtmdW5jdGlvbiBzMSgkPWwuTUlMTElTRUNPTkQsWil7bGV0IFE9Wj8/KCQ8PWwuTUlMTElTRUNPTkQ/MzI6NjQpO3JldHVybiBuZXcgQzgoJCxRKX12YXIgbXc9KCk9PnMxKGwuU0VDT05ELDMyKSxmdz0oKT0+czEobC5NSUxMSVNFQ09ORCwzMiksdXc9KCk9PnMxKGwuTUlDUk9TRUNPTkQsNjQpLHB3PSgpPT5zMShsLk5BTk9TRUNPTkQsNjQpLF9BPSgkPWwuTUlMTElTRUNPTkQsWj1udWxsKT0+bmV3IHRaKCQsWiksY3c9KCQ9bC5NSUxMSVNFQ09ORCk9Pm5ldyBWOCgkKSxsdz0oJD1zMC5NT05USF9EQVlfTkFOTyk9Pm5ldyBqOCgkKTtmdW5jdGlvbiBUQSgkKXtsZXQgWj1vMSgkKT8kOmNKKCJpdGVtIiwkLCEwKTtyZXR1cm4gbmV3IExaKFopfWZ1bmN0aW9uIGR3KCQsWil7bGV0IFE9bzEoJCk/JDpjSigiaXRlbSIsJCwhMCk7cmV0dXJuIG5ldyBqUShaLFEpfWZ1bmN0aW9uIEs5KCQpe3JldHVybiBuZXcgajAoJCl9ZnVuY3Rpb24gZ0EoJCxaLFE9ITEpe2xldCBYPW8xKCQpPyQ6Y0ooImtleSIsJCwhMSksSj1vMShaKT9aOmNKKCJ2YWx1ZSIsWiwhMCksVz1jSigiZW50cmllcyIsSzkoW1gsSl0pLCExKTtyZXR1cm4gbmV3IGVaKFcsUSl9ZnVuY3Rpb24geEEoJCxaPWk1KCksUT0hMSxYKXtyZXR1cm4gbmV3IFlaKCQsWixYLFEpfWZ1bmN0aW9uIEg5KCQsWixRKXtsZXQgWD1aLm1hcCgoWSxHKT0+bzEoWSk/WTpjSihTdHJpbmcoRyksWSwhMCkpLEo9UT8/WC5tYXAoKFksRyk9PkcpO3JldHVybiBuZXcoJD09PW0wLkRlbnNlP0VZOkhKKShKLFgpfXZhciBudz0oJCxaKT0+SDkobTAuU3BhcnNlLCQsWiksb3c9KCQsWik9Pkg5KG0wLkRlbnNlLCQsWik7ZnVuY3Rpb24gbzEoJCl7cmV0dXJuIHR5cGVvZiAkLm5hbWU9PT0ic3RyaW5nIiYmJC50eXBlIT1udWxsfWZ1bmN0aW9uIG41KCQpe2xldCBaPSQudHlwZTtpZihrLmlzTGlzdChaKSl7bGV0IFE9Wi5jaGlsZHJlblswXTtyZXR1cm4gSSh7dHlwZTpaLGxlbmd0aDowLG51bGxDb3VudDowLGNoaWxkOm41KFEpLHZhbHVlT2Zmc2V0czpuZXcgSW50MzJBcnJheShbMF0pfSl9aWYoay5pc01hcChaKSl7bGV0IFE9Wi5jaGlsZHJlblswXTtyZXR1cm4gSSh7dHlwZTpaLGxlbmd0aDowLG51bGxDb3VudDowLGNoaWxkOm41KFEpLHZhbHVlT2Zmc2V0czpuZXcgSW50MzJBcnJheShbMF0pfSl9aWYoay5pc1N0cnVjdChaKSl7bGV0IFE9Wi5jaGlsZHJlbi5tYXAoKFgpPT5uNShYKSk7cmV0dXJuIEkoe3R5cGU6WixsZW5ndGg6MCxudWxsQ291bnQ6MCxjaGlsZHJlbjpRfSl9cmV0dXJuIEkoe3R5cGU6WixsZW5ndGg6MCxudWxsQ291bnQ6MH0pfWZ1bmN0aW9uIHI1KCQpe2xldCBaPSQsUT1aLmZpZWxkcy5tYXAoKFcpPT5uNShXKSksWD1uZXcgajAoWi5maWVsZHMpLEo9SSh7dHlwZTpYLGxlbmd0aDowLGNoaWxkcmVuOlEsbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IEQwKFosSil9dmFyIGwxPTg2NDAwMDAwO2Z1bmN0aW9uIGEwKCQpe3JldHVybiAkPT09bnVsbHx8JD09PXZvaWQgMH1mdW5jdGlvbiBfMCgkLFosUSl7bGV0IFg7dHJ5e1g9dHlwZW9mIFE9PT0iYmlnaW50Ij9gJHtRfW5gOnR5cGVvZiBRPT09Im9iamVjdCI/T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFEpOlN0cmluZyhRKX1jYXRjaHtYPSI8dW5wcmludGFibGU+In10aHJvdyBUeXBlRXJyb3IoYGNvZGVjWyR7JH1dOiAke1p9IChnb3QgJHt0eXBlb2YgUX06ICR7WH0pYCl9ZnVuY3Rpb24gYlEoJCxaKXtsZXQgUT0oWCk9PntpZihhMChYKSlyZXR1cm4gbnVsbDtyZXR1cm4gWihYKSxYfTtyZXR1cm57bGFiZWw6JCxyaWNoVG9DYW5vbmljYWw6USxjYW5vbmljYWxUb1JpY2g6USxyYXdUb0Nhbm9uaWNhbDpRLGNhbm9uaWNhbFRvUmF3OlF9fWZ1bmN0aW9uIHN3KCQpe3JldHVybihaKT0+e2lmKHR5cGVvZiBaIT09ImJvb2xlYW4iKV8wKCQsImV4cGVjdGVkIGJvb2xlYW4iLFopfX1mdW5jdGlvbiBLWSgkLFosUSl7cmV0dXJuKFgpPT57bGV0IEo7aWYodHlwZW9mIFg9PT0ibnVtYmVyIilKPVg7ZWxzZSBpZih0eXBlb2YgWD09PSJiaWdpbnQiKXtpZihYPEJpZ0ludChaKXx8WD5CaWdJbnQoUSkpXzAoJCxgYmlnaW50IG91dCBvZiAkeyR9IHJhbmdlYCxYKTtyZXR1cm59ZWxzZSByZXR1cm4gXzAoJCwiZXhwZWN0ZWQgbnVtYmVyIixYKTtpZighTnVtYmVyLmlzSW50ZWdlcihKKSlfMCgkLCJleHBlY3RlZCBhbiBpbnRlZ2VyIixYKTtpZihKPFp8fEo+USlfMCgkLGB2YWx1ZSBvdXQgb2YgJHskfSByYW5nZSBbJHtafSwgJHtRfV1gLFgpfX1mdW5jdGlvbiBpdygkKXtyZXR1cm4oWik9PntpZih0eXBlb2YgWj09PSJudW1iZXIiKXJldHVybjtpZih0eXBlb2YgWj09PSJiaWdpbnQiKXJldHVybjtfMCgkLCJleHBlY3RlZCBudW1iZXIiLFopfX1mdW5jdGlvbiB2QSgkLFosUSl7bGV0IFg9UT8oMW48PEJpZ0ludChaLTEpKS0xbjooMW48PEJpZ0ludChaKSktMW4sSj1RPy0oMW48PEJpZ0ludChaLTEpKTowbjtyZXR1cm4oVyk9PntsZXQgWTtpZih0eXBlb2YgVz09PSJiaWdpbnQiKVk9VztlbHNlIGlmKHR5cGVvZiBXPT09Im51bWJlciIpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKFcpKV8wKCQsImV4cGVjdGVkIGFuIGludGVnZXIiLFcpO1k9QmlnSW50KFcpfWVsc2UgcmV0dXJuIF8wKCQsImV4cGVjdGVkIGJpZ2ludCIsVyk7aWYoWTxKfHxZPlgpXzAoJCxgdmFsdWUgb3V0IG9mICR7JH0gcmFuZ2VgLFcpfX1mdW5jdGlvbiBIQSgkKXtyZXR1cm4oWik9PntpZih0eXBlb2YgWiE9PSJzdHJpbmciKV8wKCQsImV4cGVjdGVkIHN0cmluZyIsWil9fWZ1bmN0aW9uIG4xKCQsWil7aWYodHlwZW9mIFo9PT0iYmlnaW50IilyZXR1cm4gWjtpZih0eXBlb2YgWj09PSJudW1iZXIiKXtpZighTnVtYmVyLmlzSW50ZWdlcihaKSlfMCgkLCJleHBlY3RlZCBhbiBpbnRlZ2VyIHZhbHVlIixaKTtyZXR1cm4gQmlnSW50KFopfXJldHVybiBfMCgkLCJleHBlY3RlZCBudW1iZXIgb3IgYmlnaW50IixaKX1mdW5jdGlvbiBiNigkLFope2lmKFo8LTkwMDcxOTkyNTQ3NDA5OTFufHxaPjkwMDcxOTkyNTQ3NDA5OTFuKV8wKCQsImJpZ2ludCBvdmVyZmxvd3MgdGhlIHNhZmUtaW50ZWdlciByYW5nZSB3aGVuIG5hcnJvd2luZyB0byBudW1iZXIiLFopO3JldHVybiBOdW1iZXIoWil9ZnVuY3Rpb24gcncoKXtyZXR1cm57bGFiZWw6ImRhdGUzMiIscmljaFRvQ2Fub25pY2FsKFope2lmKGEwKFopKXJldHVybiBudWxsO2lmKFogaW5zdGFuY2VvZiBEYXRlKXtsZXQgUT1aLmdldFRpbWUoKTtpZihOdW1iZXIuaXNOYU4oUSkpXzAoImRhdGUzMiIsImludmFsaWQgRGF0ZSIsWik7aWYoUSVsMSE9PTApcmV0dXJuIE1hdGguZmxvb3IoUS9sMSk7cmV0dXJuIFEvbDF9aWYodHlwZW9mIFo9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0ludGVnZXIoWikpXzAoImRhdGUzMiIsImRheS1udW1iZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIixaKTtyZXR1cm4gWn1pZih0eXBlb2YgWj09PSJiaWdpbnQiKXJldHVybiBiNigiZGF0ZTMyIixaKTtyZXR1cm4gXzAoImRhdGUzMiIsImV4cGVjdGVkIERhdGUsIG51bWJlciAoZGF5cyksIG9yIGJpZ2ludCIsWil9LGNhbm9uaWNhbFRvUmljaChaKXtpZihhMChaKSlyZXR1cm4gbnVsbDtsZXQgUTtpZih0eXBlb2YgWj09PSJudW1iZXIiKXtpZighTnVtYmVyLmlzSW50ZWdlcihaKSlfMCgiZGF0ZTMyIiwiY2Fub25pY2FsIGRheS1udW1iZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIixaKTtRPVp9ZWxzZSBpZih0eXBlb2YgWj09PSJiaWdpbnQiKVE9YjYoImRhdGUzMiIsWik7ZWxzZSBpZihaIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gWjtlbHNlIHJldHVybiBfMCgiZGF0ZTMyIiwiZXhwZWN0ZWQgbnVtYmVyIChkYXlzKSBjYW5vbmljYWwiLFopO2xldCBYPVEqbDEsSj1uZXcgRGF0ZShYKTtpZihOdW1iZXIuaXNOYU4oSi5nZXRUaW1lKCkpKV8wKCJkYXRlMzIiLCJkYXktbnVtYmVyIHByb2R1Y2VzIGFuIGludmFsaWQgRGF0ZSIsWik7cmV0dXJuIEp9LHJhd1RvQ2Fub25pY2FsKFope2lmKGEwKFopKXJldHVybiBudWxsO2lmKHR5cGVvZiBaPT09Im51bWJlciIpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKFopKV8wKCJkYXRlMzIiLCJyYXcgZGF5LW51bWJlciBtdXN0IGJlIGFuIGludGVnZXIiLFopO3JldHVybiBafWlmKHR5cGVvZiBaPT09ImJpZ2ludCIpcmV0dXJuIGI2KCJkYXRlMzIiLFopO3JldHVybiBfMCgiZGF0ZTMyIiwiZXhwZWN0ZWQgYnJhbmRlZCBEYXRlMzIgKGRheS1udW1iZXIpIixaKX0sY2Fub25pY2FsVG9SYXcoWil7aWYoYTAoWikpcmV0dXJuIG51bGw7aWYodHlwZW9mIFo9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0ludGVnZXIoWikpXzAoImRhdGUzMiIsImNhbm9uaWNhbCBkYXktbnVtYmVyIG11c3QgYmUgYW4gaW50ZWdlciIsWik7cmV0dXJuIFp9aWYodHlwZW9mIFo9PT0iYmlnaW50IilyZXR1cm4gYjYoImRhdGUzMiIsWik7aWYoWiBpbnN0YW5jZW9mIERhdGUpe2xldCBRPVouZ2V0VGltZSgpO2lmKE51bWJlci5pc05hTihRKSlfMCgiZGF0ZTMyIiwiaW52YWxpZCBEYXRlIixaKTtyZXR1cm4gTWF0aC5mbG9vcihRL2wxKX1yZXR1cm4gXzAoImRhdGUzMiIsImV4cGVjdGVkIG51bWJlciAoZGF5cykgY2Fub25pY2FsIixaKX19fWZ1bmN0aW9uIGF3KCl7cmV0dXJue2xhYmVsOiJkYXRlNjQiLHJpY2hUb0Nhbm9uaWNhbChaKXtpZihhMChaKSlyZXR1cm4gbnVsbDtpZihaIGluc3RhbmNlb2YgRGF0ZSl7bGV0IFE9Wi5nZXRUaW1lKCk7aWYoTnVtYmVyLmlzTmFOKFEpKV8wKCJkYXRlNjQiLCJpbnZhbGlkIERhdGUiLFopO3JldHVybiBCaWdJbnQoUSl9aWYodHlwZW9mIFo9PT0iYmlnaW50IilyZXR1cm4gWjtpZih0eXBlb2YgWj09PSJudW1iZXIiKXtpZighTnVtYmVyLmlzSW50ZWdlcihaKSlfMCgiZGF0ZTY0IiwibXMgdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyIixaKTtyZXR1cm4gQmlnSW50KFopfXJldHVybiBfMCgiZGF0ZTY0IiwiZXhwZWN0ZWQgRGF0ZSwgYmlnaW50IChtcyksIG9yIG51bWJlciIsWil9LGNhbm9uaWNhbFRvUmljaChaKXtpZihhMChaKSlyZXR1cm4gbnVsbDtpZihaIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gWjtsZXQgUT1uMSgiZGF0ZTY0IixaKSxYPWI2KCJkYXRlNjQiLFEpLEo9bmV3IERhdGUoWCk7aWYoTnVtYmVyLmlzTmFOKEouZ2V0VGltZSgpKSlfMCgiZGF0ZTY0IiwibXMgdmFsdWUgcHJvZHVjZXMgYW4gaW52YWxpZCBEYXRlIixaKTtyZXR1cm4gSn0scmF3VG9DYW5vbmljYWwoWil7aWYoYTAoWikpcmV0dXJuIG51bGw7aWYoWiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIF8wKCJkYXRlNjQiLCJyYXcgRGF0ZTY0TXMgbXVzdCBiZSBhIGJpZ2ludCAobXMpLCBub3QgYSBEYXRlIixaKTtyZXR1cm4gbjEoImRhdGU2NCIsWil9LGNhbm9uaWNhbFRvUmF3KFope2lmKGEwKFopKXJldHVybiBudWxsO2lmKFogaW5zdGFuY2VvZiBEYXRlKXJldHVybiBCaWdJbnQoWi5nZXRUaW1lKCkpO3JldHVybiBuMSgiZGF0ZTY0IixaKX19fWZ1bmN0aW9uIHR3KCl7bGV0IFo9KFgpPT57aWYoYTAoWCkpcmV0dXJuIG51bGw7aWYodHlwZW9mIFg9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0ludGVnZXIoWCkpXzAoInRpbWUzMiIsInRpbWUzMiB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXIiLFgpO3JldHVybiBYfWlmKHR5cGVvZiBYPT09ImJpZ2ludCIpcmV0dXJuIGI2KCJ0aW1lMzIiLFgpO3JldHVybiBfMCgidGltZTMyIiwiZXhwZWN0ZWQgbnVtYmVyIChyYXcgdGltZSB1bml0KSIsWCl9LFE9KFgpPT57aWYoYTAoWCkpcmV0dXJuIG51bGw7aWYodHlwZW9mIFg9PT0ibnVtYmVyIilyZXR1cm4gWDtpZih0eXBlb2YgWD09PSJiaWdpbnQiKXJldHVybiBiNigidGltZTMyIixYKTtyZXR1cm4gXzAoInRpbWUzMiIsImV4cGVjdGVkIG51bWJlciBjYW5vbmljYWwiLFgpfTtyZXR1cm57bGFiZWw6InRpbWUzMiIscmljaFRvQ2Fub25pY2FsOlosY2Fub25pY2FsVG9SaWNoOlEscmF3VG9DYW5vbmljYWw6WixjYW5vbmljYWxUb1JhdzpRfX1mdW5jdGlvbiAkOSgkKXtsZXQgWj0oUSk9PntpZihhMChRKSlyZXR1cm4gbnVsbDtyZXR1cm4gbjEoJCxRKX07cmV0dXJue2xhYmVsOiQscmljaFRvQ2Fub25pY2FsOlosY2Fub25pY2FsVG9SaWNoOloscmF3VG9DYW5vbmljYWw6WixjYW5vbmljYWxUb1JhdzpafX1mdW5jdGlvbiBldygkKXtsZXQgWj1uZXcgVWludDhBcnJheSgkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsJC5ieXRlTGVuZ3RoKSxRPTBuO2ZvcihsZXQgWD1aLmxlbmd0aC0xO1g+PTA7WC0tKVE9UTw8OG58QmlnSW50KFpbWF0pO2lmKFoubGVuZ3RoPjAmJlpbWi5sZW5ndGgtMV0mMTI4KVEtPTFuPDxCaWdJbnQoWi5sZW5ndGgqOCk7cmV0dXJuIFF9ZnVuY3Rpb24gJFMoKXtsZXQgWj0oWCk9PntpZihhMChYKSlyZXR1cm4gbnVsbDtpZih0eXBlb2YgWD09PSJiaWdpbnQiKXJldHVybiBYO2lmKHR5cGVvZiBYPT09Im51bWJlciIpcmV0dXJuIG4xKCJkZWNpbWFsIixYKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoWCkpcmV0dXJuIGV3KFgpO3JldHVybiBfMCgiZGVjaW1hbCIsImV4cGVjdGVkIGJpZ2ludCwgbnVtYmVyLCBvciBkZWNpbWFsIGJ5dGUgdmlldyIsWCl9LFE9KFgpPT57aWYoYTAoWCkpcmV0dXJuIG51bGw7cmV0dXJuIFooWCl9O3JldHVybntsYWJlbDoiZGVjaW1hbCIscmljaFRvQ2Fub25pY2FsOlosY2Fub25pY2FsVG9SaWNoOlEscmF3VG9DYW5vbmljYWw6WixjYW5vbmljYWxUb1JhdzpRfX1mdW5jdGlvbiBaUygkKXtsZXQgUT0kLmNoaWxkcmVuLm1hcCgoSik9Pih7bmFtZTpKLm5hbWUsY29kZWM6YjgoSi50eXBlKX0pKSxYPSJzdHJ1Y3QiO3JldHVybntsYWJlbDoic3RydWN0IixyaWNoVG9DYW5vbmljYWwoSil7aWYoYTAoSikpcmV0dXJuIG51bGw7aWYodHlwZW9mIEohPT0ib2JqZWN0IilfMCgic3RydWN0IiwiZXhwZWN0ZWQgYW4gb2JqZWN0IixKKTtsZXQgVz1KLFk9e307Zm9yKGxldHtuYW1lOkcsY29kZWM6SH1vZiBRKVlbR109SC5yaWNoVG9DYW5vbmljYWwoV1tHXT8/bnVsbCk7cmV0dXJuIFl9LGNhbm9uaWNhbFRvUmljaChKKXtpZihhMChKKSlyZXR1cm4gbnVsbDtpZih0eXBlb2YgSiE9PSJvYmplY3QiKV8wKCJzdHJ1Y3QiLCJleHBlY3RlZCBhbiBvYmplY3QiLEopO2xldCBXPUosWT17fTtmb3IobGV0e25hbWU6Ryxjb2RlYzpIfW9mIFEpWVtHXT1ILmNhbm9uaWNhbFRvUmljaChXW0ddPz9udWxsKTtyZXR1cm4gWX0scmF3VG9DYW5vbmljYWwoSil7aWYoYTAoSikpcmV0dXJuIG51bGw7aWYodHlwZW9mIEohPT0ib2JqZWN0IilfMCgic3RydWN0IiwiZXhwZWN0ZWQgYW4gb2JqZWN0IixKKTtsZXQgVz1KLFk9e307Zm9yKGxldHtuYW1lOkcsY29kZWM6SH1vZiBRKVlbR109SC5yYXdUb0Nhbm9uaWNhbChXW0ddPz9udWxsKTtyZXR1cm4gWX0sY2Fub25pY2FsVG9SYXcoSil7aWYoYTAoSikpcmV0dXJuIG51bGw7aWYodHlwZW9mIEohPT0ib2JqZWN0IilfMCgic3RydWN0IiwiZXhwZWN0ZWQgYW4gb2JqZWN0IixKKTtsZXQgVz1KLFk9e307Zm9yKGxldHtuYW1lOkcsY29kZWM6SH1vZiBRKVlbR109SC5jYW5vbmljYWxUb1JhdyhXW0ddPz9udWxsKTtyZXR1cm4gWX19fWZ1bmN0aW9uIFFTKCQpe2xldCBaPSQuY2hpbGRyZW4/LlswXTtpZighWil0aHJvdyBFcnJvcigiY29kZWNbbGlzdF06IGxpc3QgdHlwZSBoYXMgbm8gY2hpbGQgZmllbGQiKTtsZXQgUT1iOChaLnR5cGUpLFg9Imxpc3QiLEo9KFcpPT57aWYoQXJyYXkuaXNBcnJheShXKSlyZXR1cm4gVztpZihXIT1udWxsJiZ0eXBlb2YgV1tTeW1ib2wuaXRlcmF0b3JdPT09ImZ1bmN0aW9uIilyZXR1cm4gQXJyYXkuZnJvbShXKTtyZXR1cm4gXzAoWCwiZXhwZWN0ZWQgYW4gYXJyYXkgb3IgaXRlcmFibGUiLFcpfTtyZXR1cm57bGFiZWw6WCxyaWNoVG9DYW5vbmljYWwoVyl7aWYoYTAoVykpcmV0dXJuIG51bGw7cmV0dXJuIEooVykubWFwKChZKT0+US5yaWNoVG9DYW5vbmljYWwoWSkpfSxjYW5vbmljYWxUb1JpY2goVyl7aWYoYTAoVykpcmV0dXJuIG51bGw7cmV0dXJuIEooVykubWFwKChZKT0+US5jYW5vbmljYWxUb1JpY2goWSkpfSxyYXdUb0Nhbm9uaWNhbChXKXtpZihhMChXKSlyZXR1cm4gbnVsbDtyZXR1cm4gSihXKS5tYXAoKFkpPT5RLnJhd1RvQ2Fub25pY2FsKFkpKX0sY2Fub25pY2FsVG9SYXcoVyl7aWYoYTAoVykpcmV0dXJuIG51bGw7cmV0dXJuIEooVykubWFwKChZKT0+US5jYW5vbmljYWxUb1JhdyhZKSl9fX1mdW5jdGlvbiBYUygkKXtsZXQgUT0kLmNoaWxkcmVuPy5bMF0/LnR5cGU/LmNoaWxkcmVuO2lmKCFRfHxRLmxlbmd0aDwyKXRocm93IEVycm9yKCJjb2RlY1ttYXBdOiBtYXAgdHlwZSBoYXMgbm8ga2V5L3ZhbHVlIGVudHJ5IGZpZWxkcyIpO2xldCBYPWI4KFFbMF0udHlwZSksSj1iOChRWzFdLnR5cGUpLFc9Im1hcCIsWT0oRyk9PntpZihBcnJheS5pc0FycmF5KEcpKXJldHVybiBHO2lmKEcgaW5zdGFuY2VvZiBNYXApcmV0dXJuIEFycmF5LmZyb20oRy5lbnRyaWVzKCkpO2lmKEchPW51bGwmJnR5cGVvZiBHW1N5bWJvbC5pdGVyYXRvcl09PT0iZnVuY3Rpb24iKXJldHVybiBBcnJheS5mcm9tKEcpO2lmKEchPW51bGwmJnR5cGVvZiBHPT09Im9iamVjdCIpcmV0dXJuIE9iamVjdC5lbnRyaWVzKEcpO3JldHVybiBfMChXLCJleHBlY3RlZCBNYXAsIGFycmF5IG9mIHBhaXJzLCBvciBvYmplY3QiLEcpfTtyZXR1cm57bGFiZWw6VyxyaWNoVG9DYW5vbmljYWwoRyl7aWYoYTAoRykpcmV0dXJuIG51bGw7cmV0dXJuIFkoRykubWFwKChbSCx6XSk9PltYLnJpY2hUb0Nhbm9uaWNhbChIKSxKLnJpY2hUb0Nhbm9uaWNhbCh6KV0pfSxjYW5vbmljYWxUb1JpY2goRyl7aWYoYTAoRykpcmV0dXJuIG51bGw7cmV0dXJuIFkoRykubWFwKChbSCx6XSk9PltYLmNhbm9uaWNhbFRvUmljaChIKSxKLmNhbm9uaWNhbFRvUmljaCh6KV0pfSxyYXdUb0Nhbm9uaWNhbChHKXtpZihhMChHKSlyZXR1cm4gbnVsbDtyZXR1cm4gWShHKS5tYXAoKFtILHpdKT0+W1gucmF3VG9DYW5vbmljYWwoSCksSi5yYXdUb0Nhbm9uaWNhbCh6KV0pfSxjYW5vbmljYWxUb1JhdyhHKXtpZihhMChHKSlyZXR1cm4gbnVsbDtyZXR1cm4gWShHKS5tYXAoKFtILHpdKT0+W1guY2Fub25pY2FsVG9SYXcoSCksSi5jYW5vbmljYWxUb1Jhdyh6KV0pfX19ZnVuY3Rpb24gSlMoJCl7bGV0IFo9JC5kaWN0aW9uYXJ5O2lmKCFaKXRocm93IEVycm9yKCJjb2RlY1tkaWN0aW9uYXJ5XTogbWlzc2luZyBkaWN0aW9uYXJ5IHZhbHVlIHR5cGUiKTtsZXQgUT1iOChaKTtyZXR1cm57bGFiZWw6YGRpY3Rpb25hcnk8JHtRLmxhYmVsfT5gLHJpY2hUb0Nhbm9uaWNhbDooWCk9PlEucmljaFRvQ2Fub25pY2FsKFgpLGNhbm9uaWNhbFRvUmljaDooWCk9PlEuY2Fub25pY2FsVG9SaWNoKFgpLHJhd1RvQ2Fub25pY2FsOihYKT0+US5yYXdUb0Nhbm9uaWNhbChYKSxjYW5vbmljYWxUb1JhdzooWCk9PlEuY2Fub25pY2FsVG9SYXcoWCl9fXZhciBXUz1iUSgiaW50OCIsS1koImludDgiLC0xMjgsMTI3KSksWVM9YlEoImludDE2IixLWSgiaW50MTYiLC0zMjc2OCwzMjc2NykpLEdTPWJRKCJpbnQzMiIsS1koImludDMyIiwtMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3KSksS1M9YlEoInVpbnQ4IixLWSgidWludDgiLDAsMjU1KSksSFM9YlEoInVpbnQxNiIsS1koInVpbnQxNiIsMCw2NTUzNSkpLHpTPWJRKCJ1aW50MzIiLEtZKCJ1aW50MzIiLDAsNDI5NDk2NzI5NSkpLHFTPWJRKCJpbnQ2NCIsdkEoImludDY0Iiw2NCwhMCkpLFBTPWJRKCJ1aW50NjQiLHZBKCJ1aW50NjQiLDY0LCExKSksRlM9YlEoImZsb2F0IixpdygiZmxvYXQiKSksTlM9YlEoImJvb2wiLHN3KCJib29sIikpLFVTPXtsYWJlbDoidXRmOCIscmljaFRvQ2Fub25pY2FsKCQpe2lmKGEwKCQpKXJldHVybiBudWxsO3JldHVybiB0eXBlb2YgJD09PSJzdHJpbmciPyQ6U3RyaW5nKCQpfSxjYW5vbmljYWxUb1JpY2goJCl7aWYoYTAoJCkpcmV0dXJuIG51bGw7cmV0dXJuIEhBKCJ1dGY4IikoJCksJH0scmF3VG9DYW5vbmljYWwoJCl7aWYoYTAoJCkpcmV0dXJuIG51bGw7cmV0dXJuIHR5cGVvZiAkPT09InN0cmluZyI/JDpTdHJpbmcoJCl9LGNhbm9uaWNhbFRvUmF3KCQpe2lmKGEwKCQpKXJldHVybiBudWxsO3JldHVybiBIQSgidXRmOCIpKCQpLCR9fTtmdW5jdGlvbiBNUygkLFope3JldHVybihRKT0+e2lmKGEwKFEpKXJldHVybiBudWxsO2xldCBYO2lmKFEgaW5zdGFuY2VvZiBVaW50OEFycmF5KVg9UTtlbHNlIGlmKEFycmF5QnVmZmVyLmlzVmlldyhRKSl7bGV0IEo9UTtYPW5ldyBVaW50OEFycmF5KEouYnVmZmVyLEouYnl0ZU9mZnNldCxKLmJ5dGVMZW5ndGgpfWVsc2UgcmV0dXJuIF8wKCQsImV4cGVjdGVkIFVpbnQ4QXJyYXkiLFEpO2lmKFohPW51bGwmJlgubGVuZ3RoIT09WilfMCgkLGBleHBlY3RlZCBleGFjdGx5ICR7Wn0gYnl0ZXNgLFEpO3JldHVybiBYfX1mdW5jdGlvbiB5QSgkLFope2xldCBRPU1TKCQsWik7cmV0dXJue2xhYmVsOiQscmljaFRvQ2Fub25pY2FsOlEsY2Fub25pY2FsVG9SaWNoOlEscmF3VG9DYW5vbmljYWw6USxjYW5vbmljYWxUb1JhdzpRfX12YXIgTFM9eUEoImJpbmFyeSIpLEFTPXtsYWJlbDoibnVsbCIscmljaFRvQ2Fub25pY2FsOigpPT5udWxsLGNhbm9uaWNhbFRvUmljaDooKT0+bnVsbCxyYXdUb0Nhbm9uaWNhbDooKT0+bnVsbCxjYW5vbmljYWxUb1JhdzooKT0+bnVsbH07ZnVuY3Rpb24gYjgoJCl7c3dpdGNoKCQudHlwZUlkKXtjYXNlIFEkLk51bGw6cmV0dXJuIEFTO2Nhc2UgUSQuQm9vbDpyZXR1cm4gTlM7Y2FzZSBRJC5JbnQ6e2xldCBaPSQuYml0V2lkdGg/PzMyLFE9JC5pc1NpZ25lZD8/JC5zaWduZWQ/PyEwO2lmKFo9PT02NClyZXR1cm4gUT9xUzpQUztpZihRKXtpZihaPT09OClyZXR1cm4gV1M7aWYoWj09PTE2KXJldHVybiBZUztyZXR1cm4gR1N9aWYoWj09PTgpcmV0dXJuIEtTO2lmKFo9PT0xNilyZXR1cm4gSFM7cmV0dXJuIHpTfWNhc2UgUSQuRmxvYXQ6cmV0dXJuIEZTO2Nhc2UgUSQuVXRmODpjYXNlIFEkLkxhcmdlVXRmODpyZXR1cm4gVVM7Y2FzZSBRJC5CaW5hcnk6Y2FzZSBRJC5MYXJnZUJpbmFyeTpyZXR1cm4gTFM7Y2FzZSBRJC5GaXhlZFNpemVCaW5hcnk6cmV0dXJuIHlBKCJmaXhlZFNpemVCaW5hcnkiLCQuYnl0ZVdpZHRoPz8kLnN0cmlkZSk7Y2FzZSBRJC5EZWNpbWFsOnJldHVybiAkUygpO2Nhc2UgUSQuRGF0ZTpyZXR1cm4gJC51bml0PT09MD9ydygpOmF3KCk7Y2FzZSBRJC5UaW1lOnJldHVybigkLmJpdFdpZHRoPz8zMik9PT02ND8kOSgidGltZTY0Iik6dHcoKTtjYXNlIFEkLlRpbWVzdGFtcDpyZXR1cm4gJDkoInRpbWVzdGFtcCIpO2Nhc2UgUSQuRHVyYXRpb246cmV0dXJuICQ5KCJkdXJhdGlvbiIpO2Nhc2UgUSQuU3RydWN0OnJldHVybiBaUygkKTtjYXNlIFEkLlVuaW9uOnJldHVybiBiUSgidW5pb24iLCgpPT57fSk7Y2FzZSBRJC5MaXN0OmNhc2UgUSQuRml4ZWRTaXplTGlzdDpyZXR1cm4gUVMoJCk7Y2FzZSBRJC5NYXA6cmV0dXJuIFhTKCQpO2Nhc2UgUSQuRGljdGlvbmFyeTpyZXR1cm4gSlMoJCk7Y2FzZSBRJC5JbnRlcnZhbDpyZXR1cm4gYlEoImludGVydmFsIiwoKT0+e30pO2RlZmF1bHQ6cmV0dXJuIGJRKGB0eXBlIyR7JC50eXBlSWR9YCwoKT0+e30pfX1mdW5jdGlvbiBoQSgkLFope3JldHVybiBZWShaLCQpfWZ1bmN0aW9uIFlZKCQsWil7aWYoay5pc0xpc3QoWikpcmV0dXJuIFJTKCQsWik7aWYoay5pc0ZpeGVkU2l6ZUxpc3QoWikpcmV0dXJuIEVTKCQsWik7aWYoay5pc01hcChaKSlyZXR1cm4gd1MoJCxaKTtpZihrLmlzU3RydWN0KFopKXJldHVybiBTUygkLFopO2lmKGsuaXNEZWNpbWFsKFopKXJldHVybiBDUygkLFopO2lmKGsuaXNEYXRlKFopfHxrLmlzVGltZShaKXx8ay5pc1RpbWVzdGFtcChaKXx8ay5pc0R1cmF0aW9uKFopKXtpZihEUyhaKT09PTY0KXJldHVybiB6QSgkLFopO3JldHVybiBPUygkLFopfWlmKGsuaXNJbnQoWikmJlouYml0V2lkdGg9PT02NClyZXR1cm4gekEoJCxaKTtyZXR1cm4gUVgoJCxaKS5kYXRhWzBdfWZ1bmN0aW9uIERTKCQpe2lmKGsuaXNEYXRlKCQpKXJldHVybiAkLnVuaXQ9PT1yMC5EQVk/MzI6NjQ7aWYoay5pc1RpbWUoJCkpcmV0dXJuICQuYml0V2lkdGg/PzMyO3JldHVybiA2NH1mdW5jdGlvbiBPUygkLFope2xldCBRPSQubGVuZ3RoLFg9bmV3IEludDMyQXJyYXkoUSksSj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoUS84KSksVz0wO2ZvcihsZXQgWT0wO1k8UTtZKyspe2xldCBHPSRbWV07aWYoRz09PW51bGx8fEc9PT12b2lkIDApe1crKztjb250aW51ZX1KW1k+PjNdfD0xPDwoWSY3KSxYW1ldPXR5cGVvZiBHPT09ImJpZ2ludCI/TnVtYmVyKEcpOkd9cmV0dXJuIEkoe3R5cGU6WixsZW5ndGg6USxudWxsQml0bWFwOlc+MD9KOnZvaWQgMCxkYXRhOlgsbnVsbENvdW50Old9KX1mdW5jdGlvbiB6QSgkLFope2xldCBRPSQubGVuZ3RoLFg9bmV3IEJpZ0ludDY0QXJyYXkoUSksSj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoUS84KSksVz0wO2ZvcihsZXQgRz0wO0c8UTtHKyspe2xldCBIPSRbR107aWYoSD09PW51bGx8fEg9PT12b2lkIDApe1crKztjb250aW51ZX1KW0c+PjNdfD0xPDwoRyY3KSxYW0ddPXR5cGVvZiBIPT09ImJpZ2ludCI/SDpCaWdJbnQoSCl9bGV0IFk9bmV3IEludDMyQXJyYXkoWC5idWZmZXIpO3JldHVybiBJKHt0eXBlOlosbGVuZ3RoOlEsbnVsbEJpdG1hcDpXPjA/Sjp2b2lkIDAsZGF0YTpZLG51bGxDb3VudDpXfSl9ZnVuY3Rpb24gQ1MoJCxaKXtsZXQgUT1aLmJ5dGVXaWR0aD8/KFouYml0V2lkdGg/Wi5iaXRXaWR0aC84OjE2KSxYPSQubGVuZ3RoLEo9bmV3IFVpbnQ4QXJyYXkoWCpRKSxXPW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChYLzgpKSxZPTA7Zm9yKGxldCBHPTA7RzxYO0crKyl7bGV0IEg9JFtHXTtpZihIPT09bnVsbHx8SD09PXZvaWQgMCl7WSsrO2NvbnRpbnVlfVdbRz4+M118PTE8PChHJjcpO2xldCB6O2lmKEggaW5zdGFuY2VvZiBVaW50OEFycmF5KXo9SDtlbHNlIGlmKEFycmF5QnVmZmVyLmlzVmlldyhIKSl7bGV0IHE9SDt6PW5ldyBVaW50OEFycmF5KHEuYnVmZmVyLHEuYnl0ZU9mZnNldCxxLmJ5dGVMZW5ndGgpfWVsc2Ugej1WUyhqUyhIKSxRKTtKLnNldCh6LnN1YmFycmF5KDAsUSksRypRKX1yZXR1cm4gSSh7dHlwZTpaLGxlbmd0aDpYLG51bGxCaXRtYXA6WT4wP1c6dm9pZCAwLGRhdGE6bmV3IFVpbnQzMkFycmF5KEouYnVmZmVyLEouYnl0ZU9mZnNldCxKLmJ5dGVMZW5ndGgvNCksbnVsbENvdW50Oll9KX1mdW5jdGlvbiBqUygkKXtyZXR1cm4gdHlwZW9mICQ9PT0iYmlnaW50Ij8kOkJpZ0ludChNYXRoLnRydW5jKE51bWJlcigkKSkpfWZ1bmN0aW9uIFZTKCQsWil7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoWiksWD0kO2lmKFg8MG4pWD0oMW48PEJpZ0ludChaKjgpKStYO2ZvcihsZXQgSj0wO0o8WjtKKyspUVtKXT1OdW1iZXIoWCYweGZmbiksWD4+PThuO3JldHVybiBRfWZ1bmN0aW9uIFJTKCQsWil7bGV0IFE9Wi5jaGlsZHJlblswXSxYPSQubGVuZ3RoLEo9bmV3IEludDMyQXJyYXkoWCsxKSxXPVtdLFk9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKFgvOCkpLEc9MDtmb3IobGV0IHo9MDt6PFg7eisrKXtKW3pdPVcubGVuZ3RoO2xldCBxPSRbel07aWYocT09bnVsbClHKys7ZWxzZXtZW3o+PjNdfD0xPDwoeiY3KTtsZXQgUD1BcnJheS5pc0FycmF5KHEpP3E6dHlwZW9mIHFbU3ltYm9sLml0ZXJhdG9yXT09PSJmdW5jdGlvbiI/QXJyYXkuZnJvbShxKTpudWxsO2lmKFApZm9yKGxldCBVIG9mIFApVy5wdXNoKFUpfX1KW1hdPVcubGVuZ3RoO2xldCBIPVcubGVuZ3RoPjA/WVkoVyxRLnR5cGUpOnBKKFEudHlwZSk7cmV0dXJuIEkoe3R5cGU6WixsZW5ndGg6WCxudWxsQ291bnQ6RyxudWxsQml0bWFwOkc+MD9ZOnZvaWQgMCxjaGlsZDpILG9mZnNldDowLHZhbHVlT2Zmc2V0czpKfSl9ZnVuY3Rpb24gRVMoJCxaKXtsZXQgUT1aLmNoaWxkcmVuWzBdLFg9Wi5saXN0U2l6ZSxKPSQubGVuZ3RoLFc9W10sWT1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoSi84KSksRz0wO2ZvcihsZXQgej0wO3o8Sjt6Kyspe2xldCBxPSRbel07aWYocT09bnVsbCl7RysrO2ZvcihsZXQgVT0wO1U8WDtVKyspVy5wdXNoKG51bGwpO2NvbnRpbnVlfVlbej4+M118PTE8PCh6JjcpO2xldCBQPUFycmF5LmlzQXJyYXkocSk/cTpBcnJheS5mcm9tKHEpO2lmKFAubGVuZ3RoIT09WCl0aHJvdyBUeXBlRXJyb3IoYGZpeGVkX3NpemVfbGlzdFske1h9XTogcm93ICR7en0gaGFzICR7UC5sZW5ndGh9IGl0ZW1zYCk7Zm9yKGxldCBVIG9mIFApVy5wdXNoKFUpfWxldCBIPVcubGVuZ3RoPjA/WVkoVyxRLnR5cGUpOnBKKFEudHlwZSk7cmV0dXJuIEkoe3R5cGU6WixsZW5ndGg6SixudWxsQ291bnQ6RyxudWxsQml0bWFwOkc+MD9ZOnZvaWQgMCxjaGlsZDpIfSl9ZnVuY3Rpb24gd1MoJCxaKXtsZXQgUT0kLmxlbmd0aCxYPVouY2hpbGRyZW5bMF0sSj1YLnR5cGUuY2hpbGRyZW5bMF0sVz1YLnR5cGUuY2hpbGRyZW5bMV0sWT1uZXcgSW50MzJBcnJheShRKzEpLEc9W10sSD1bXSx6PW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChRLzgpKSxxPTA7Zm9yKGxldCBMPTA7TDxRO0wrKyl7WVtMXT1HLmxlbmd0aDtsZXQgRD0kW0xdO2lmKEQ9PW51bGwpcSsrO2Vsc2V7eltMPj4zXXw9MTw8KEwmNyk7bGV0IFI9QXJyYXkuaXNBcnJheShEKT9EOkQgaW5zdGFuY2VvZiBNYXA/QXJyYXkuZnJvbShELmVudHJpZXMoKSk6dHlwZW9mIERbU3ltYm9sLml0ZXJhdG9yXT09PSJmdW5jdGlvbiI/QXJyYXkuZnJvbShEKTp0eXBlb2YgRD09PSJvYmplY3QiP09iamVjdC5lbnRyaWVzKEQpOltdO2ZvcihsZXRbVixnXW9mIFIpRy5wdXNoKFYpLEgucHVzaChnKX19WVtRXT1HLmxlbmd0aDtsZXQgUD1HLmxlbmd0aD4wP1lZKEcsSi50eXBlKTpwSihKLnR5cGUpLFU9SC5sZW5ndGg+MD9ZWShILFcudHlwZSk6cEooVy50eXBlKSxNPUkoe3R5cGU6WC50eXBlLGxlbmd0aDpHLmxlbmd0aCxjaGlsZHJlbjpbUCxVXSxudWxsQ291bnQ6MH0pO3JldHVybiBJKHt0eXBlOlosbGVuZ3RoOlEsbnVsbENvdW50OnEsbnVsbEJpdG1hcDpxPjA/ejp2b2lkIDAsY2hpbGQ6TSxvZmZzZXQ6MCx2YWx1ZU9mZnNldHM6WX0pfWZ1bmN0aW9uIFNTKCQsWil7bGV0IFE9Wi5jaGlsZHJlbixYPSQubGVuZ3RoLEo9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKFgvOCkpLFc9MCxZPVEubWFwKCgpPT5bXSk7Zm9yKGxldCBIPTA7SDxYO0grKyl7bGV0IHo9JFtIXTtpZih6PT1udWxsKXtXKys7Zm9yKGxldCBxPTA7cTxRLmxlbmd0aDtxKyspWVtxXS5wdXNoKG51bGwpfWVsc2V7SltIPj4zXXw9MTw8KEgmNyk7Zm9yKGxldCBxPTA7cTxRLmxlbmd0aDtxKyspe2xldCBQPVFbcV0ubmFtZTtZW3FdLnB1c2goeltQXT8/eltxXT8/bnVsbCl9fX1sZXQgRz1RLm1hcCgoSCx6KT0+WVkoWVt6XSxILnR5cGUpKTtyZXR1cm4gSSh7dHlwZTpaLGxlbmd0aDpYLG51bGxDb3VudDpXLG51bGxCaXRtYXA6Vz4wP0o6dm9pZCAwLGNoaWxkcmVuOkd9KX1mdW5jdGlvbiBwSigkKXtpZihrLmlzTGlzdCgkKSlyZXR1cm4gSSh7dHlwZTokLGxlbmd0aDowLG51bGxDb3VudDowLGNoaWxkOnBKKCQuY2hpbGRyZW5bMF0udHlwZSksdmFsdWVPZmZzZXRzOm5ldyBJbnQzMkFycmF5KFswXSl9KTtpZihrLmlzTWFwKCQpKXJldHVybiBJKHt0eXBlOiQsbGVuZ3RoOjAsbnVsbENvdW50OjAsY2hpbGQ6cEooJC5jaGlsZHJlblswXS50eXBlKSx2YWx1ZU9mZnNldHM6bmV3IEludDMyQXJyYXkoWzBdKX0pO2lmKGsuaXNGaXhlZFNpemVMaXN0KCQpKXJldHVybiBJKHt0eXBlOiQsbGVuZ3RoOjAsbnVsbENvdW50OjAsY2hpbGQ6cEooJC5jaGlsZHJlblswXS50eXBlKX0pO2lmKGsuaXNTdHJ1Y3QoJCkpe2xldCBaPSQuY2hpbGRyZW4ubWFwKChRKT0+cEooUS50eXBlKSk7cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6MCxudWxsQ291bnQ6MCxjaGlsZHJlbjpafSl9cmV0dXJuIEkoe3R5cGU6JCxsZW5ndGg6MCxudWxsQ291bnQ6MH0pfWZ1bmN0aW9uIG04KCQsWixRKXtsZXQgWD1aLEo9WD8uZGF0YT8uWzBdO3JldHVybiBrUygkLFgsSixRKX1mdW5jdGlvbiBCUygkLFosUSl7aWYodHlwZW9mICQ/LmlzVmFsaWQ9PT0iZnVuY3Rpb24iKXJldHVybiAkLmlzVmFsaWQoUSk7bGV0IFg9Wj8ubnVsbEJpdG1hcDtpZihYJiZYLmxlbmd0aD4wKXJldHVybihYW1E+PjNdPj4oUSY3KSYxKT09PTE7cmV0dXJuITB9ZnVuY3Rpb24ga1MoJCxaLFEsWCl7aWYoIUJTKFosUSxYKSlyZXR1cm4gbnVsbDtzd2l0Y2goJC50eXBlSWQpe2Nhc2UgMTpyZXR1cm4gbnVsbDtjYXNlIDY6cmV0dXJuIFouZ2V0KFgpO2Nhc2UgMjp7bGV0IFc9JC5iaXRXaWR0aD8/MzIsWT1RPy52YWx1ZXM/LltYXTtpZihXPT09NjQpcmV0dXJuIHR5cGVvZiBZPT09ImJpZ2ludCI/WTpCaWdJbnQoWSk7cmV0dXJuIE51bWJlcihZKX1jYXNlIDM6cmV0dXJuIE51bWJlcihRPy52YWx1ZXM/LltYXSk7Y2FzZSA1OmNhc2UgMjA6cmV0dXJuIFN0cmluZyhaLmdldChYKSk7Y2FzZSA0OmNhc2UgMTk6Y2FzZSAxNTpyZXR1cm4gSVMoWi5nZXQoWCkpO2Nhc2UgNzpyZXR1cm4gX1MoJCxRLFgpO2Nhc2UgODp7bGV0IFc9UT8udmFsdWVzPy5bWF07aWYoJC51bml0PT09cjAuREFZKXJldHVybiBOdW1iZXIoVyk7cmV0dXJuIHR5cGVvZiBXPT09ImJpZ2ludCI/VzpCaWdJbnQoVyl9Y2FzZSA5OntsZXQgVz1RPy52YWx1ZXM/LltYXTtpZigoJC5iaXRXaWR0aD8/MzIpPT09NjQpcmV0dXJuIHR5cGVvZiBXPT09ImJpZ2ludCI/VzpCaWdJbnQoVyk7cmV0dXJuIE51bWJlcihXKX1jYXNlIDEwOmNhc2UgMTg6e2xldCBXPVE/LnZhbHVlcz8uW1hdO3JldHVybiB0eXBlb2YgVz09PSJiaWdpbnQiP1c6QmlnSW50KFcpfWNhc2UgMTM6cmV0dXJuIGdTKCQsWixYKTtjYXNlIDE0OnJldHVybiB4UygkLFosUSxYKTtjYXNlIDEyOmNhc2UgMTY6cmV0dXJuIHZTKCQsWixRLFgpO2Nhc2UgMTc6cmV0dXJuIHlTKCQsWixRLFgpO2Nhc2UtMTpyZXR1cm4gaFMoJCxaLFEsWCk7ZGVmYXVsdDpyZXR1cm4gWi5nZXQoWCl9fWZ1bmN0aW9uIElTKCQpe2lmKCQ9PW51bGwpcmV0dXJuIG51bGw7aWYoJCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuICQ7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCQpKXtsZXQgWj0kO3JldHVybiBuZXcgVWludDhBcnJheShaLmJ1ZmZlcixaLmJ5dGVPZmZzZXQsWi5ieXRlTGVuZ3RoKX1yZXR1cm4gJH1mdW5jdGlvbiBfUygkLFosUSl7bGV0IFg9JC5ieXRlV2lkdGg/PygkLmJpdFdpZHRoPyQuYml0V2lkdGgvODoxNiksSj1aLnZhbHVlcyxXPVgvNCxZPVEqVyxHPW5ldyBVaW50OEFycmF5KFgpO2ZvcihsZXQgSD0wO0g8VztIKyspe2xldCB6PUpbWStIXT4+PjA7R1tIKjRdPXomMjU1LEdbSCo0KzFdPXo+Pj44JjI1NSxHW0gqNCsyXT16Pj4+MTYmMjU1LEdbSCo0KzNdPXo+Pj4yNCYyNTV9cmV0dXJuIFRTKEcpfWZ1bmN0aW9uIFRTKCQpe2xldCBaPTBuO2ZvcihsZXQgUT0kLmxlbmd0aC0xO1E+PTA7US0tKVo9Wjw8OG58QmlnSW50KCRbUV0pO2lmKCRbJC5sZW5ndGgtMV0mMTI4KVotPTFuPDxCaWdJbnQoJC5sZW5ndGgqOCk7cmV0dXJuIFp9ZnVuY3Rpb24gZ1MoJCxaLFEpe2xldCBYPSQuY2hpbGRyZW4sSj17fTtmb3IobGV0IFc9MDtXPFgubGVuZ3RoO1crKyl7bGV0IFk9WFtXXSxHPXR5cGVvZiBaLmdldENoaWxkQXQ9PT0iZnVuY3Rpb24iP1ouZ2V0Q2hpbGRBdChXKTpaLmNoaWxkcmVuPy5bV107aWYoIUcpe0pbWS5uYW1lXT1udWxsO2NvbnRpbnVlfUpbWS5uYW1lXT1tOChZLnR5cGUsRyxRKX1yZXR1cm4gSn1mdW5jdGlvbiB4UygkLFosUSxYKXtsZXQgSj0kLmNoaWxkcmVuLFc9UT8udHlwZUlkcyxZPVc/V1tYXTpKLmxlbmd0aD4wPzA6LTEsRz0kLnR5cGVJZFRvQ2hpbGRJbmRleCxIPUcmJkdbWV0hPT12b2lkIDA/R1tZXTpZLHo9SltIXTtpZigheilyZXR1cm57dGFnOm51bGwsdmFsdWU6bnVsbH07bGV0IHE9UT8udmFsdWVPZmZzZXRzLFA9cT9xW1hdOlgsVT10eXBlb2YgWi5nZXRDaGlsZEF0PT09ImZ1bmN0aW9uIj9aLmdldENoaWxkQXQoSCk6Wi5jaGlsZHJlbj8uW0hdLE09VT9tOCh6LnR5cGUsVSxQKTpudWxsO3JldHVybnt0YWc6ei5uYW1lLHZhbHVlOk19fWZ1bmN0aW9uIHZTKCQsWixRLFgpe2xldCBKPSQuY2hpbGRyZW5bMF0sVz10eXBlb2YgWi5nZXRDaGlsZEF0PT09ImZ1bmN0aW9uIj9aLmdldENoaWxkQXQoMCk6Wi5jaGlsZHJlbj8uWzBdLFk9UT8udmFsdWVPZmZzZXRzLEcsSDtpZihZKUc9WVtYXSxIPVlbWCsxXTtlbHNle2xldCBxPSQubGlzdFNpemU/PzA7Rz1YKnEsSD1HK3F9bGV0IHo9W107Zm9yKGxldCBxPUc7cTxIO3ErKyl6LnB1c2gobTgoSi50eXBlLFcscSkpO3JldHVybiB6fWZ1bmN0aW9uIHlTKCQsWixRLFgpe2xldCBKPSQuY2hpbGRyZW5bMF0sVz1KLnR5cGUuY2hpbGRyZW5bMF0sWT1KLnR5cGUuY2hpbGRyZW5bMV0sRz1RPy52YWx1ZU9mZnNldHMsSD10eXBlb2YgWi5nZXRDaGlsZEF0PT09ImZ1bmN0aW9uIj9aLmdldENoaWxkQXQoMCk6Wi5jaGlsZHJlbj8uWzBdLHo9SCYmKHR5cGVvZiBILmdldENoaWxkQXQ9PT0iZnVuY3Rpb24iP0guZ2V0Q2hpbGRBdCgwKTpILmNoaWxkcmVuPy5bMF0pLHE9SCYmKHR5cGVvZiBILmdldENoaWxkQXQ9PT0iZnVuY3Rpb24iP0guZ2V0Q2hpbGRBdCgxKTpILmNoaWxkcmVuPy5bMV0pLFA9Rz9HW1hdOjAsVT1HP0dbWCsxXTowLE09W107Zm9yKGxldCBMPVA7TDxVO0wrKylNLnB1c2goW204KFcudHlwZSx6LEwpLG04KFkudHlwZSxxLEwpXSk7cmV0dXJuIE19ZnVuY3Rpb24gaFMoJCxaLFEsWCl7bGV0IEo9JC5kaWN0aW9uYXJ5O2lmKFEmJlEuZGljdGlvbmFyeSYmUS52YWx1ZXMpe2xldCBXPU51bWJlcihRLnZhbHVlc1tYXSksWT1RLmRpY3Rpb25hcnk7cmV0dXJuIG04KEosWSxXKX1yZXR1cm4gWi5nZXQoWCl9ZnVuY3Rpb24gYlMoJCxaKXtyZXR1cm4gUVgoJCxaKS5kYXRhWzBdfWZ1bmN0aW9uIGZKKCQsWil7bGV0IFE9WjtpZigkLmxlbmd0aD09PTApcmV0dXJuIHI1KFEpO2xldCBYPXt9O2ZvcihsZXQgSiBvZiBRLmZpZWxkcylYW0oubmFtZV09JC5tYXAoKFcpPT5XW0oubmFtZV0/P251bGwpO3JldHVybiBsSihYLFEpfWZ1bmN0aW9uIGxKKCQsWixRPSJyaWNoIil7bGV0IFg9WixKPVguZmllbGRzLmxlbmd0aD4wPyRbWC5maWVsZHNbMF0ubmFtZV0/Lmxlbmd0aD8/MDowLFc9WC5maWVsZHMubWFwKChIKT0+e2xldCB6PSRbSC5uYW1lXTtpZigheilyZXR1cm4gSSh7dHlwZTpILnR5cGUsbGVuZ3RoOkosbnVsbENvdW50Okp9KTtsZXQgcT1iOChILnR5cGUpLFA9UT09PSJyYXciP3EucmF3VG9DYW5vbmljYWw6cS5yaWNoVG9DYW5vbmljYWwsVT16Lm1hcCgoTSk9PlAuY2FsbChxLE0pKTtyZXR1cm4gaEEoSC50eXBlLFUpfSksWT1uZXcgajAoWC5maWVsZHMpLEc9SSh7dHlwZTpZLGxlbmd0aDpKLGNoaWxkcmVuOlcsbnVsbENvdW50OjB9KTtyZXR1cm4gbmV3IEQwKFgsRyl9ZnVuY3Rpb24qeTgoJCxaPSJyaWNoIil7bGV0IFE9JCxYPVEuc2NoZW1hLmZpZWxkcy5tYXAoKEopPT5iOChKLnR5cGUpKTtmb3IobGV0IEo9MDtKPFEubnVtUm93cztKKyspe2xldCBXPXt9O2ZvcihsZXQgWT0wO1k8US5zY2hlbWEuZmllbGRzLmxlbmd0aDtZKyspe2xldCBHPVEuc2NoZW1hLmZpZWxkc1tZXSxIPVEuZ2V0Q2hpbGQoRy5uYW1lKTtpZighSCl7V1tHLm5hbWVdPW51bGw7Y29udGludWV9bGV0IHo9bTgoRy50eXBlLEgsSikscT1YW1ldO1dbRy5uYW1lXT1aPT09InJhdyI/cS5jYW5vbmljYWxUb1Jhdyh6KTpxLmNhbm9uaWNhbFRvUmljaCh6KX15aWVsZCBXfX1mdW5jdGlvbiBiQSgkKXtpZighJClyZXR1cm57fTtsZXQgWj0kO2lmKFoubnVtUm93cz09PTApcmV0dXJue307bGV0IFE9e307Zm9yKGxldCBYIG9mIFouc2NoZW1hLmZpZWxkcyl7bGV0IEo9Wi5nZXRDaGlsZChYLm5hbWUpO2lmKEope2xldCBXPVgudHlwZSxZPW04KFcsSiwwKTtRW1gubmFtZV09YjgoVykuY2Fub25pY2FsVG9SaWNoKFkpfX1yZXR1cm4gUX1mdW5jdGlvbiBtUygkLFo9MCl7aWYoJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmImRpY3Rpb25hcnkiaW4gJCYmInZhbHVlcyJpbiAkJiZ0eXBlb2YgJC5kaWN0aW9uYXJ5Py5nZXQ9PT0iZnVuY3Rpb24iKXtsZXQgUT0kLFg9US5udWxsQml0bWFwO2lmKFgmJlgubGVuZ3RoPjApe2lmKChYW1o+PjNdPj4oWiY3KSYxKT09PTApcmV0dXJuIG51bGx9bGV0IEo9TnVtYmVyKFEudmFsdWVzW1pdKTtyZXR1cm4gJC5kaWN0aW9uYXJ5LmdldChKKX1yZXR1cm4gJH1mdW5jdGlvbiBmUygkKXtpZighJClyZXR1cm57fTtsZXQgWj0kO2lmKFoubnVtUm93cz09PTApcmV0dXJue307bGV0IFE9e307Zm9yKGxldCBYIG9mIFouc2NoZW1hLmZpZWxkcyl7bGV0IEo9Wi5nZXRDaGlsZChYLm5hbWUpO2lmKEope2xldCBXPVgudHlwZSxZPWI4KFcpLmNhbm9uaWNhbFRvUmljaChtOChXLEosMCkpLEc9WC5uYW1lLEg7aWYoWC5uYW1lLnN0YXJ0c1dpdGgoInNlY3JldF8iKSl7bGV0IHo9WC5tZXRhZGF0YT8uZ2V0Py4oInNlY3JldF90eXBlIik7aWYoeilHPXosSD1YLm1ldGFkYXRhPy5nZXQ/Ligic2NvcGUiKT8/dm9pZCAwfWlmKFkmJnR5cGVvZiBZPT09Im9iamVjdCImJiFBcnJheUJ1ZmZlci5pc1ZpZXcoWSkpe2xldCB6PXsuLi5ZfTtpZihHIGluIFEpdGhyb3cgRXJyb3IoYGJhdGNoVG9TZWNyZXREaWN0OiBkdXBsaWNhdGUgc2VjcmV0X3R5cGUgJyR7R30nIChzY29wZT0ke0g/PyJub25lIn0pLiBVc2Ugc2NvcGVkIHNlY3JldHMgd2l0aCBkaXN0aW5jdCBzY29wZXMgdG8gYXZvaWQgY29sbGlzaW9ucy5gKTtpZihRW0ddPXosSClRW2Ake0d9OiR7SH1gXT16fWVsc2UgaWYoWT09PW51bGx8fFk9PT12b2lkIDApO2Vsc2UgUVtHXT17fX19cmV0dXJuIFF9dmFyIG1BPUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksdVM9LW1BO2Z1bmN0aW9uIHBTKCQpe2lmKHR5cGVvZiAkPT09ImJpZ2ludCIpe2lmKCQ+bUF8fCQ8dVMpdGhyb3cgUmFuZ2VFcnJvcihgJHskfSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIEpTIG51bWJlciAofHZhbHVlfCA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS4gS2VlcCBpdCBhcyBhIGJpZ2ludC5gKTtyZXR1cm4gTnVtYmVyKCQpfXJldHVybiAkfWZ1bmN0aW9uIGNTKCQsWil7bGV0IFE9JCxYPVEubnVtUm93cyxKPTA7Zm9yKGxldCBHPTA7RzxYO0crKylpZihaW0ddKUorKztpZihKPT09WClyZXR1cm4gUTtpZihKPT09MClyZXR1cm4gcjUoUS5zY2hlbWEpO2xldCBXPVtdO2ZvcihsZXQgRz0wO0c8WDtHKyspaWYoWltHXSlXLnB1c2goRyk7bGV0IFk9e307Zm9yKGxldCBHIG9mIFEuc2NoZW1hLmZpZWxkcyl7bGV0IEg9US5nZXRDaGlsZChHLm5hbWUpLHo9Ry50eXBlLHE9Yjgoeik7WVtHLm5hbWVdPVcubWFwKChQKT0+cS5jYW5vbmljYWxUb1JpY2gobTgoeixILFApKSl9cmV0dXJuIGxKKFksUS5zY2hlbWEpfWZ1bmN0aW9uIGZBKCQsWixRKXtmb3IobGV0IFggb2YgWil7aWYoWDwtMSl0aHJvdyBFcnJvcihgJHskfTogdW5leHBlY3RlZCBuZWdhdGl2ZSBwcm9qZWN0aW9uIElEICR7WH0gKG9ubHkgLTEgZm9yIHJvd19pZCBpcyBhbGxvd2VkKWApO2lmKFg+PVEpY29uc29sZS53YXJuKGAkeyR9OiBwcm9qZWN0aW9uIElEICR7WH0gaXMgb3V0IG9mIGJvdW5kcyAoc2NoZW1hIGhhcyAke1F9IGZpZWxkcyksIGlnbm9yaW5nYCl9cmV0dXJuIFouZmlsdGVyKChYKT0+WD49MCYmWDxRKX1mdW5jdGlvbiB1QSgkLFope2xldCBRPVo7aWYoISQpcmV0dXJuIFE7bGV0IFg9ZkEoInByb2plY3RTY2hlbWEiLCQsUS5maWVsZHMubGVuZ3RoKTtpZihYLmxlbmd0aD09PTApcmV0dXJuIFE7cmV0dXJuIG5ldyBRMChYLm1hcCgoSik9PlEuZmllbGRzW0pdKSl9ZnVuY3Rpb24gbFMoJCxaKXtsZXQgUT1aO2lmKCEkKXJldHVybiBRO2xldCBYPWZBKCJwcm9qZWN0QmF0Y2giLCQsUS5zY2hlbWEuZmllbGRzLmxlbmd0aCk7aWYoWC5sZW5ndGg9PT0wKXJldHVybiBRO2xldCBKPXVBKCQsUS5zY2hlbWEpLFc9WC5tYXAoKEgpPT57cmV0dXJuIFEuZ2V0Q2hpbGRBdChIKS5kYXRhWzBdfSksWT1uZXcgajAoSi5maWVsZHMpLEc9SSh7dHlwZTpZLGxlbmd0aDpRLm51bVJvd3MsY2hpbGRyZW46VyxudWxsQ291bnQ6MH0pO3JldHVybiBuZXcgRDAoSixHKX1mdW5jdGlvbiBkUygkLFope2xldCBRPSQ7cmV0dXJuIG5ldyBEMChRLnNjaGVtYSxRLmRhdGEsWil9ZnVuY3Rpb24gbzUoJCl7bGV0IFo9bmV3IFhRO3JldHVybiBaLnJlc2V0KHZvaWQgMCwkKSxaLmNsb3NlKCksWi50b1VpbnQ4QXJyYXkoITApfWZ1bmN0aW9uIGE1KCQpe2xldCBaPXokLmZyb20oJCksUT1bLi4uWl07aWYoUS5sZW5ndGg+MClyZXR1cm4gUVswXS5zY2hlbWE7aWYoWi5zY2hlbWEpcmV0dXJuIFouc2NoZW1hO3Rocm93IEVycm9yKCJDYW5ub3QgZGVzZXJpYWxpemUgc2NoZW1hIGZyb20gZW1wdHkgSVBDIHN0cmVhbSIpfWZ1bmN0aW9uIE1YKCQpe2xldCBaPSQsUT1uZXcgWFE7cmV0dXJuIFEucmVzZXQodm9pZCAwLFouc2NoZW1hKSxRLl93cml0ZVJlY29yZEJhdGNoKFopLFEuY2xvc2UoKSxRLnRvVWludDhBcnJheSghMCl9ZnVuY3Rpb24gR1koJCl7bGV0IFo9eiQuZnJvbSgkKSxRPVsuLi5aXTtpZihRLmxlbmd0aD09PTApe2xldCBYPVouc2NoZW1hPz9uZXcgUTAoW10pO3JldHVybiByNShYKX1yZXR1cm4gUVswXX1mdW5jdGlvbiBuUygkKXtsZXQgWj0kO3JldHVyblskLnR5cGVJZCxaLnVuaXQ/PyIiLFouYml0V2lkdGg/PyIiLFoucHJlY2lzaW9uPz8iIixaLnNjYWxlPz8iIixaLmJ5dGVXaWR0aD8/IiJdLmpvaW4oIjoiKX1mdW5jdGlvbiB1SigkLFope2xldCBRPVo7aWYoUS50eXBlSWQ9PT0xKXJldHVybiBJKHt0eXBlOlEsbGVuZ3RoOiQubGVuZ3RoLG51bGxDb3VudDokLmxlbmd0aH0pO2xldCBYPWI4KFopLEo9JC5tYXAoKFcpPT5YLnJpY2hUb0Nhbm9uaWNhbChXKSk7cmV0dXJuIGhBKFosSil9ZnVuY3Rpb24gb1MoJCl7aWYoJC5sZW5ndGg9PT0wKXtsZXQgVT1uZXcgYSgiMCIsbmV3IGokLCEwKSxNPW5ldyBISihbMF0sW1VdKSxMPUkoe3R5cGU6TSxsZW5ndGg6MCx0eXBlSWRzOm5ldyBJbnQ4QXJyYXkoMCksY2hpbGRyZW46W0koe3R5cGU6bmV3IGokLGxlbmd0aDowLG51bGxDb3VudDowfSldfSksRD1JKHt0eXBlOk0sbGVuZ3RoOjAsdHlwZUlkczpuZXcgSW50OEFycmF5KDApLGNoaWxkcmVuOltJKHt0eXBlOm5ldyBqJCxsZW5ndGg6MCxudWxsQ291bnQ6MH0pXX0pO3JldHVybiBxQShbXSxMLEQsW10sW10sW10sW10sW10sTSl9bGV0IFo9W10sUT1uZXcgTWFwLFg9W107Zm9yKGxldCBVIG9mICQpe2xldCBNPW5TKFUuYXJyb3dUeXBlKSxMPVEuZ2V0KE0pO2lmKEw9PT12b2lkIDApTD1aLmxlbmd0aCxRLnNldChNLEwpLFoucHVzaChVLmFycm93VHlwZSk7WC5wdXNoKEwpfWxldCBKPVtdLFc9W10sWT1bXSxHPVtdO2ZvcihsZXRbVSxNXW9mIFouZW50cmllcygpKXtKLnB1c2gobmV3IGEoU3RyaW5nKFUpLE0sITApKSxHLnB1c2goVSk7bGV0IEw9JC5tYXAoKFIsVik9PlhbVl09PT1VP1IubWluOm51bGwpLEQ9JC5tYXAoKFIsVik9PlhbVl09PT1VP1IubWF4Om51bGwpO1cucHVzaCh1SihMLE0pKSxZLnB1c2godUooRCxNKSl9bGV0IEg9bmV3IEhKKEcsSiksej1JbnQ4QXJyYXkuZnJvbShYKSxxPUkoe3R5cGU6SCxsZW5ndGg6JC5sZW5ndGgsdHlwZUlkczp6LGNoaWxkcmVuOld9KSxQPUkoe3R5cGU6SCxsZW5ndGg6JC5sZW5ndGgsdHlwZUlkczp6LGNoaWxkcmVuOll9KTtyZXR1cm4gcUEoJC5tYXAoKFUpPT5VLmNvbHVtbk5hbWUpLHEsUCwkLm1hcCgoVSk9PlUuaGFzTnVsbCksJC5tYXAoKFUpPT5VLmhhc05vdE51bGwpLCQubWFwKChVKT0+VS5kaXN0aW5jdENvdW50PT1udWxsP251bGw6QmlnSW50KFUuZGlzdGluY3RDb3VudCkpLCQubWFwKChVKT0+VS5jb250YWluc1VuaWNvZGUpLCQubWFwKChVKT0+VS5tYXhTdHJpbmdMZW5ndGg9PW51bGw/bnVsbDpCaWdJbnQoVS5tYXhTdHJpbmdMZW5ndGgpKSxIKX1mdW5jdGlvbiBxQSgkLFosUSxYLEosVyxZLEcsSCl7bGV0IHo9bmV3IFEwKFtuZXcgYSgiY29sdW1uX25hbWUiLG5ldyBUJCwhMSksbmV3IGEoIm1pbiIsSCwhMCksbmV3IGEoIm1heCIsSCwhMCksbmV3IGEoImhhc19udWxsIixuZXcgViQsITEpLG5ldyBhKCJoYXNfbm90X251bGwiLG5ldyBWJCwhMSksbmV3IGEoImRpc3RpbmN0X2NvdW50IixuZXcgQVosITApLG5ldyBhKCJjb250YWluc191bmljb2RlIixuZXcgViQsITApLG5ldyBhKCJtYXhfc3RyaW5nX2xlbmd0aCIsbmV3IFZRLCEwKV0pLHE9JC5sZW5ndGgsUD1bdUooJCxuZXcgVCQpLFosUSx1SihYLG5ldyBWJCksdUooSixuZXcgViQpLHVKKFcsbmV3IEFaKSx1SihZLG5ldyBWJCksdUooRyxuZXcgVlEpXSxVPW5ldyBqMCh6LmZpZWxkcyksTT1JKHt0eXBlOlUsbGVuZ3RoOnEsY2hpbGRyZW46UCxudWxsQ291bnQ6MH0pO3JldHVybiBuZXcgRDAoeixNKX12YXIgc1M9e25hbWU6ImFycm93LWpzIn07ZnVuY3Rpb24gaVMoJCl7cmV0dXJuICR9dmFye1RpbWVVbml0OnJTLERhdGVVbml0OnVkLEludGVydmFsVW5pdDpwZCxVbmlvbk1vZGU6Y2Qsc2NoZW1hOkN9PU9BO2Z1bmN0aW9uIEsoJCxaLFEsWCl7cmV0dXJuIGNKKCQsWixRLFgpfXZhciBwQT0oKT0+Q0EoKSxaMD0oKT0+akEoKSxZJD0oKT0+aTUoKSxtNj0oKT0+WDkoKSxQMD0oKT0+SjkoKSxQQT0oKT0+VzkoKSx0NT0oKT0+U0EoKSxGPSgpPT5CQSgpLE49KCk9PmtBKCksclg9KCk9PklBKCksbGQ9e1tkMS5TRUNPTkRdOiJzIixbZDEuTUlMTElTRUNPTkRdOiJtcyIsW2QxLk1JQ1JPU0VDT05EXToidXMiLFtkMS5OQU5PU0VDT05EXToibnMifTtmdW5jdGlvbiBhUygkLFope3JldHVybiBfQSgkLFo/P251bGwpfWZ1bmN0aW9uIGooJCl7cmV0dXJuIFRBKCQpfWZ1bmN0aW9uIGg4KCQpe3JldHVybiBLOSgkKX1mdW5jdGlvbiBjWigkLFosUSl7cmV0dXJuIGdBKCQsWixRKX1mdW5jdGlvbiBHJCgkLFosUSxYKXtyZXR1cm4geEEoJCxaLFEsWCl9Y2xhc3MgaDZ7cG9zaXRpb25hbDtuYW1lZDthcmd1bWVudHNTY2hlbWE7Y29uc3RydWN0b3IoJD1bXSxaPW5ldyBNYXAsUT1udWxsKXt0aGlzLnBvc2l0aW9uYWw9JCx0aGlzLm5hbWVkPVosdGhpcy5hcmd1bWVudHNTY2hlbWE9UX1nZXQoJCxaKXtpZih0eXBlb2YgJD09PSJudW1iZXIiKXtpZigkPHRoaXMucG9zaXRpb25hbC5sZW5ndGgpe2xldCBRPXRoaXMucG9zaXRpb25hbFskXTtpZihRPT09bnVsbHx8UT09PXZvaWQgMClyZXR1cm4gWiE9PXZvaWQgMD9aOm51bGw7cmV0dXJuIEZBKFEpfWlmKFohPT12b2lkIDApcmV0dXJuIFo7dGhyb3cgRXJyb3IoYFBvc2l0aW9uYWwgYXJndW1lbnQgJHskfSBub3QgZm91bmRgKX1pZih0aGlzLm5hbWVkLmhhcygkKSl7bGV0IFE9dGhpcy5uYW1lZC5nZXQoJCk7aWYoUT09PW51bGx8fFE9PT12b2lkIDApcmV0dXJuIFohPT12b2lkIDA/WjpudWxsO3JldHVybiBGQShRKX1pZihaIT09dm9pZCAwKXJldHVybiBaO3Rocm93IEVycm9yKGBOYW1lZCBhcmd1bWVudCAnJHskfScgbm90IGZvdW5kYCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnBvc2l0aW9uYWwubGVuZ3RofX1mdW5jdGlvbiBGQSgkKXtpZigkPT09bnVsbHx8JD09PXZvaWQgMClyZXR1cm4gbnVsbDtpZih0eXBlb2YgJCE9PSJvYmplY3QiKXJldHVybiAkO2lmKCQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiAkO2lmKHR5cGVvZiAkLnZhbHVlT2Y9PT0iZnVuY3Rpb24iKXtsZXQgWjt0cnl7Wj0kLnZhbHVlT2YoKX1jYXRjaHtyZXR1cm4gJH1pZih0eXBlb2YgWj09PSJiaWdpbnQiKXtpZihaPj1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUiYmWjw9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIE51bWJlcihaKTtyZXR1cm4gWn1yZXR1cm4gWn1yZXR1cm4gJH1mdW5jdGlvbiB0UygkKXtsZXQgWj1bXSxRPXt9O2ZvcihsZXQgRz0wO0c8JC5wb3NpdGlvbmFsLmxlbmd0aDtHKyspe2xldCBIPSQucG9zaXRpb25hbFtHXSx6PWBwb3NpdGlvbmFsXyR7R31gO1oucHVzaChLKHosTkEoSCksITApKSxRW3pdPUh9Zm9yKGxldFtHLEhdb2YgJC5uYW1lZCl7bGV0IHo9YG5hbWVkXyR7R31gO1oucHVzaChLKHosTkEoSCksITApKSxRW3pdPUh9bGV0IFg9aDgoWiksSj1DKFtLKCJhcmdzIixYLCEwKV0pLFc9e307Zm9yKGxldCBHIG9mIFope2xldCBIPVFbRy5uYW1lXTtpZihROShHLnR5cGUpJiZHLnR5cGUuYml0V2lkdGg9PT02NCYmdHlwZW9mIEg9PT0ibnVtYmVyIilIPUJpZ0ludChIKTtXW0cubmFtZV09SH1sZXQgWT1sSih7YXJnczpbV119LEopO3JldHVybiBNWChZKX1mdW5jdGlvbiBOQSgkKXtpZigkPT09bnVsbHx8JD09PXZvaWQgMClyZXR1cm4gcEEoKTtpZih0eXBlb2YgJD09PSJzdHJpbmciKXJldHVybiBGKCk7aWYodHlwZW9mICQ9PT0iYm9vbGVhbiIpcmV0dXJuIFowKCk7aWYodHlwZW9mICQ9PT0ibnVtYmVyIilyZXR1cm4gUDAoKTtpZih0eXBlb2YgJD09PSJiaWdpbnQiKXJldHVybiBQMCgpO2lmKCQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIE4oKTtyZXR1cm4gRigpfXZhciBjQTsoKCQpPT57JC5TQ0FMQVI9InNjYWxhciIsJC5UQUJMRT0idGFibGUiLCQuVEFCTEVfQlVGRkVSSU5HPSJ0YWJsZV9idWZmZXJpbmciLCQuQUdHUkVHQVRFPSJhZ2dyZWdhdGUifSkoY0F8fD17fSk7dmFyIGVTOygoJCk9PnskLkNPTlNJU1RFTlQ9IkNPTlNJU1RFTlQiLCQuVk9MQVRJTEU9IlZPTEFUSUxFIiwkLkNPTlNJU1RFTlRfV0lUSElOX1FVRVJZPSJDT05TSVNURU5UX1dJVEhJTl9RVUVSWSJ9KShlU3x8PXt9KTt2YXIgJEI7KCgkKT0+eyQuREVGQVVMVD0iREVGQVVMVCIsJC5TUEVDSUFMPSJTUEVDSUFMIn0pKCRCfHw9e30pO3ZhciBaQjsoKCQpPT57JC5VTktOT1dOPSJVTktOT1dOIiwkLkNPTlNUQU5UPSJDT05TVEFOVCIsJC5OT05fREVDUkVBU0lORz0iTk9OX0RFQ1JFQVNJTkciLCQuU1RSSUNUTFlfSU5DUkVBU0lORz0iU1RSSUNUTFlfSU5DUkVBU0lORyIsJC5OT05fSU5DUkVBU0lORz0iTk9OX0lOQ1JFQVNJTkciLCQuU1RSSUNUTFlfREVDUkVBU0lORz0iU1RSSUNUTFlfREVDUkVBU0lORyJ9KShaQnx8PXt9KTt2YXIgUUI7KCgkKT0+eyQuUFJFU0VSVkVTX09SREVSPSJQUkVTRVJWRVNfT1JERVIiLCQuTk9fT1JERVJfR1VBUkFOVEVFPSJOT19PUkRFUl9HVUFSQU5URUUiLCQuRklYRURfT1JERVI9IkZJWEVEX09SREVSIn0pKFFCfHw9e30pO3ZhciBYQjsoKCQpPT57JC5PUkRFUl9ERVBFTkRFTlQ9Ik9SREVSX0RFUEVOREVOVCIsJC5OT1RfT1JERVJfREVQRU5ERU5UPSJOT1RfT1JERVJfREVQRU5ERU5UIn0pKFhCfHw9e30pO3ZhciBKQjsoKCQpPT57JC5ESVNUSU5DVF9ERVBFTkRFTlQ9IkRJU1RJTkNUX0RFUEVOREVOVCIsJC5OT1RfRElTVElOQ1RfREVQRU5ERU5UPSJOT1RfRElTVElOQ1RfREVQRU5ERU5UIn0pKEpCfHw9e30pO3ZhciBXQjsoKCQpPT57JC5JTlBVVD0iSU5QVVQiLCQuRklOQUxJWkU9IkZJTkFMSVpFIiwkLlRBQkxFX0JVRkZFUklORz0iVEFCTEVfQlVGRkVSSU5HIiwkLlRBQkxFX0JVRkZFUklOR19GSU5BTElaRT0iVEFCTEVfQlVGRkVSSU5HX0ZJTkFMSVpFIn0pKFdCfHw9e30pO3ZhciBZQj0idmdpX2FyZyIsR0I9Im5hbWVkIixLQj0idmdpX3R5cGUiLEhCPSJ0YWJsZSIsekI9ImFueSIscUI9InZnaV92YXJhcmdzIixQQj0idHJ1ZSIsRkI9InZnaV9jb25zdCIsTkI9InRydWUiLFVCPSJ2Z2lfZG9jIixNQj0idmdpX2RlZmF1bHQiLExCPSJ2Z2lfY2hvaWNlcyIsQUI9InZnaV9yYW5nZSIsREI9InZnaV9wYXR0ZXJuIjtmdW5jdGlvbiBLOCgkKXtpZigkIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gJDtpZigkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KCQpO2lmKHR5cGVvZiBCdWZmZXI8InUiJiZCdWZmZXIuaXNCdWZmZXIoJCkpcmV0dXJuIG5ldyBVaW50OEFycmF5KCQpO2lmKCQmJiQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KCQuYnVmZmVyLCQuYnl0ZU9mZnNldCwkLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgVWludDhBcnJheSgwKX1mdW5jdGlvbiBzNSgkKXtpZih0eXBlb2YgJD09PSJzdHJpbmciKXJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoJCk7bGV0IFo9SzgoJCk7aWYoWi5sZW5ndGg9PT0wJiYkIT1udWxsKXRocm93IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiAkfSB0byBVaW50OEFycmF5YCk7cmV0dXJuIFp9ZnVuY3Rpb24gbEEoJCxaKXtsZXQgUT17fTtmb3IobGV0IFggb2YgJC5maWVsZHMpe2xldCBKPVpbWC5uYW1lXTtpZihROShYLnR5cGUpJiZYLnR5cGUuYml0V2lkdGg9PT02NCYmdHlwZW9mIEo9PT0ibnVtYmVyIilKPUJpZ0ludChKKTtRW1gubmFtZV09W0pdfXJldHVybiBsSihRLCQpfXZhciBPQj1oOChbSygiZm9ybWF0IixGKCksITEpLEsoImZpbGVfcGF0aCIsRigpLCExKSxLKCJleHBlY3RlZF9zY2hlbWEiLE4oKSwhMSldKSxDQj1oOChbSygiZm9ybWF0IixGKCksITEpLEsoImZpbGVfcGF0aCIsRigpLCExKV0pLGpCPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiYXJndW1lbnRzIixOKCksITEpLEsoImZ1bmN0aW9uX3R5cGUiLEckKEYoKSxZJCgpKSwhMSksSygiaW5wdXRfc2NoZW1hIixOKCksITApLEsoInNldHRpbmdzIixOKCksITApLEsoInNlY3JldHMiLE4oKSwhMCksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApLEsoInJlc29sdmVkX3NlY3JldHNfcHJvdmlkZWQiLFowKCksITEpLEsoImF0X3VuaXQiLEYoKSwhMCksSygiYXRfdmFsdWUiLEYoKSwhMCksSygiY29weV9mcm9tIixPQiwhMCksSygiY29weV90byIsQ0IsITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKSxLKCJhcmd1bWVudF9uYW1lcyIsaihLKCJpdGVtIixGKCksITApKSwhMCldKTtmdW5jdGlvbiBkQSgkKXtyZXR1cm4gbEEoakIse2Z1bmN0aW9uX25hbWU6JC5mdW5jdGlvbl9uYW1lLGFyZ3VtZW50czp0UygkLmFyZ3VtZW50cyksZnVuY3Rpb25fdHlwZTokLmZ1bmN0aW9uX3R5cGUsaW5wdXRfc2NoZW1hOiQuaW5wdXRfc2NoZW1hP281KCQuaW5wdXRfc2NoZW1hKTpudWxsLHNldHRpbmdzOiQuc2V0dGluZ3M/TVgoJC5zZXR0aW5ncyk6bnVsbCxzZWNyZXRzOiQuc2VjcmV0cz9NWCgkLnNlY3JldHMpOm51bGwsYXR0YWNoX29wYXF1ZV9kYXRhOiQuYXR0YWNoX29wYXF1ZV9kYXRhPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOiQudHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE/P251bGwscmVzb2x2ZWRfc2VjcmV0c19wcm92aWRlZDokLnJlc29sdmVkX3NlY3JldHNfcHJvdmlkZWQ/PyExLGF0X3VuaXQ6JC5hdF91bml0Pz9udWxsLGF0X3ZhbHVlOiQuYXRfdmFsdWU/P251bGwsY29weV9mcm9tOiQuY29weV9mcm9tP3tmb3JtYXQ6JC5jb3B5X2Zyb20uZm9ybWF0LGZpbGVfcGF0aDokLmNvcHlfZnJvbS5maWxlX3BhdGgsZXhwZWN0ZWRfc2NoZW1hOm81KCQuY29weV9mcm9tLmV4cGVjdGVkX3NjaGVtYSl9Om51bGwsY29weV90bzokLmNvcHlfdG8/e2Zvcm1hdDokLmNvcHlfdG8uZm9ybWF0LGZpbGVfcGF0aDokLmNvcHlfdG8uZmlsZV9wYXRofTpudWxsLHNjaGVtYV9wYXRoOiQuc2NoZW1hX3BhdGg/P251bGwsYXJndW1lbnRfbmFtZXM6JC5hcmd1bWVudF9uYW1lcz8/bnVsbH0pfWZ1bmN0aW9uIFZCKCQpe2xldCBaPShRKT0+e2lmKCFRKXJldHVybltdO3JldHVybihBcnJheS5pc0FycmF5KFEpP1E6Wy4uLlFdKS5maWx0ZXIoKEopPT5KIT1udWxsKS5tYXAoU3RyaW5nKX07cmV0dXJue291dHB1dF9zY2hlbWE6YTUoczUoJC5vdXRwdXRfc2NoZW1hKSksb3BhcXVlX2RhdGE6JC5vcGFxdWVfZGF0YT9zNSgkLm9wYXF1ZV9kYXRhKTpudWxsLGxvb2t1cF9zZWNyZXRfdHlwZXM6WigkLmxvb2t1cF9zZWNyZXRfdHlwZXMpLGxvb2t1cF9zY29wZXM6WigkLmxvb2t1cF9zY29wZXMpLGxvb2t1cF9uYW1lczpaKCQubG9va3VwX25hbWVzKX19dmFyIFJCPUMoW0soImJpbmRfY2FsbCIsTigpLCExKSxLKCJvdXRwdXRfc2NoZW1hIixOKCksITEpLEsoImJpbmRfb3BhcXVlX2RhdGEiLE4oKSwhMCksSygicHJvamVjdGlvbl9pZHMiLGooSygiaXRlbSIsUDAoKSwhMCkpLCEwKSxLKCJwdXNoZG93bl9maWx0ZXJzIixyWCgpLCEwKSxLKCJqb2luX2tleXMiLGooSygiaXRlbSIsclgoKSwhMCkpLCEwKSxLKCJzcGxpdF90b2tlbnMiLGooSygiaXRlbSIsclgoKSwhMCkpLCEwKSxLKCJyb3dfbGltaXQiLFAwKCksITApLEsoInBoYXNlIixHJChGKCksWSQoKSksITApLEsoImZpbmFsaXplX3N0YXRlX2lkIixOKCksITApLEsoImV4ZWN1dGlvbl9pZCIsTigpLCEwKSxLKCJpbml0X29wYXF1ZV9kYXRhIixOKCksITApLEsoInN1YnN0cmVhbV9pZCIsTigpLCEwKSxLKCJvcmRlcl9ieV9jb2x1bW5fbmFtZSIsRigpLCEwKSxLKCJvcmRlcl9ieV9kaXJlY3Rpb24iLEckKEYoKSxZJCgpKSwhMCksSygib3JkZXJfYnlfbnVsbF9vcmRlciIsRyQoRigpLFkkKCkpLCEwKSxLKCJvcmRlcl9ieV9saW1pdCIsUDAoKSwhMCksSygidGFibGVzYW1wbGVfcGVyY2VudGFnZSIsdDUoKSwhMCksSygidGFibGVzYW1wbGVfc2VlZCIsUDAoKSwhMCldKSxkZD1DKFtLKCJleGVjdXRpb25faWQiLE4oKSwhMSksSygib3BhcXVlX2RhdGEiLE4oKSwhMCksSygibWF4X3dvcmtlcnMiLFAwKCksITEpXSk7ZnVuY3Rpb24gRUIoJCl7bGV0IFo9ZEEoJC5iaW5kX2NhbGwpLFg9e2JpbmRfY2FsbDpNWChaKSxvdXRwdXRfc2NoZW1hOm81KCQub3V0cHV0X3NjaGVtYSksYmluZF9vcGFxdWVfZGF0YTokLmJpbmRfb3BhcXVlX2RhdGE/P251bGwscHJvamVjdGlvbl9pZHM6JC5wcm9qZWN0aW9uX2lkcz8ubWFwKChKKT0+QmlnSW50KEopKT8/bnVsbCxwdXNoZG93bl9maWx0ZXJzOiQucHVzaGRvd25fZmlsdGVycz9NWCgkLnB1c2hkb3duX2ZpbHRlcnMpOm51bGwsam9pbl9rZXlzOigkLmpvaW5fa2V5cz8/W10pLm1hcCgoSik9Pk1YKEopKSxzcGxpdF90b2tlbnM6JC5zcGxpdF90b2tlbnM/P251bGwscm93X2xpbWl0OiQucm93X2xpbWl0Pz9udWxsLHBoYXNlOiQucGhhc2U/P251bGwsZmluYWxpemVfc3RhdGVfaWQ6JC5maW5hbGl6ZV9zdGF0ZV9pZD8/bnVsbCxleGVjdXRpb25faWQ6JC5leGVjdXRpb25faWQ/P251bGwsaW5pdF9vcGFxdWVfZGF0YTokLmluaXRfb3BhcXVlX2RhdGE/P251bGwsc3Vic3RyZWFtX2lkOiQuc3Vic3RyZWFtX2lkPz9udWxsLG9yZGVyX2J5X2NvbHVtbl9uYW1lOiQub3JkZXJfYnlfY29sdW1uX25hbWU/P251bGwsb3JkZXJfYnlfZGlyZWN0aW9uOiQub3JkZXJfYnlfZGlyZWN0aW9uPz9udWxsLG9yZGVyX2J5X251bGxfb3JkZXI6JC5vcmRlcl9ieV9udWxsX29yZGVyPz9udWxsLG9yZGVyX2J5X2xpbWl0OiQub3JkZXJfYnlfbGltaXQ/P251bGwsdGFibGVzYW1wbGVfcGVyY2VudGFnZTokLnRhYmxlc2FtcGxlX3BlcmNlbnRhZ2U/P251bGwsdGFibGVzYW1wbGVfc2VlZDokLnRhYmxlc2FtcGxlX3NlZWQ/P251bGx9O3JldHVybiBsQShSQixYKX1mdW5jdGlvbiB3QigkKXtyZXR1cm57ZXhlY3V0aW9uX2lkOnM1KCQuZXhlY3V0aW9uX2lkKSxvcGFxdWVfZGF0YTokLm9wYXF1ZV9kYXRhP3M1KCQub3BhcXVlX2RhdGEpOm51bGwsbWF4X3dvcmtlcnM6TnVtYmVyKCQubWF4X3dvcmtlcnMpfX1mdW5jdGlvbiBXJCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ic3RyaW5nIj9bJF06QXJyYXkuZnJvbSgkLFN0cmluZyl9ZnVuY3Rpb24gU0IoJCxaKXtyZXR1cm4gTVgoZkooW1pdLCQpKX1mdW5jdGlvbiBIWSgkLFope2xldCBRPUdZKFopO2lmKFEubnVtUm93cz09PTApe2xldCBKPSQuZmllbGRzLm1hcCgoVyk9PlcubmFtZSkuam9pbigiLCIpO3Rocm93IEVycm9yKGBkZWNvZGVBU0Q6IGVtcHR5IGJhdGNoIChleHBlY3RlZCAxIHJvdyBmb3IgJHtKfSlgKX1sZXQgWD17fTtmb3IobGV0IEogb2YgJC5maWVsZHMpe2xldCBXPVEuZ2V0Q2hpbGQoSi5uYW1lKSxZPVc/Vy5nZXQoMCk6bnVsbDtYW0oubmFtZV09WjkoWSxKLnR5cGUpfXJldHVybiBYfWZ1bmN0aW9uIFo5KCQsWil7aWYoJD09bnVsbClyZXR1cm4gbnVsbDtpZihqdyhaKSl7bGV0IFE9Wi5jaGlsZHJlblswXS50eXBlLFg9W107Zm9yKGxldCBKIG9mICQpWC5wdXNoKFo5KEosUSkpO3JldHVybiBYfWlmKFJ3KFopKXtsZXQgUT17fTtpZigkW1N5bWJvbC5pdGVyYXRvcl0pe2ZvcihsZXQgWCBvZiAkKWlmKEFycmF5LmlzQXJyYXkoWCkpUVtTdHJpbmcoWFswXSldPVN0cmluZyhYWzFdPz8iIik7ZWxzZSBpZihYJiZ0eXBlb2YgWD09PSJvYmplY3QiKXtsZXQgSj1YLmtleT8/WFswXSxXPVgudmFsdWU/P1hbMV07UVtTdHJpbmcoSildPVc9PW51bGw/IiI6U3RyaW5nKFcpfX1lbHNlIGlmKHR5cGVvZiAkPT09Im9iamVjdCIpZm9yKGxldFtYLEpdb2YgT2JqZWN0LmVudHJpZXMoJCkpUVtTdHJpbmcoWCldPUo9PW51bGw/IiI6U3RyaW5nKEopO3JldHVybiBRfWlmKFZ3KFopKXtsZXQgUT1aLmNoaWxkcmVuLFg9e307Zm9yKGxldCBKIG9mIFEpWFtKLm5hbWVdPVo5KCRbSi5uYW1lXSxKLnR5cGUpO3JldHVybiBYfWlmKEV3KFopKXJldHVybiAkPT1udWxsP251bGw6U3RyaW5nKCQpO2lmKE93KFopKXJldHVybiBCQigkKTtpZihROShaKSYmWi5iaXRXaWR0aD09PTY0KXtpZih0eXBlb2YgJD09PSJiaWdpbnQiKXtpZigkPj1CaWdJbnQoTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpJiYkPD1CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXJldHVybiBOdW1iZXIoJCk7cmV0dXJuICR9cmV0dXJuICR9aWYoQ3coWikpcmV0dXJuIEJvb2xlYW4oJCk7cmV0dXJuICR9ZnVuY3Rpb24gQkIoJCl7aWYoJCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuICQ7aWYoJCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBuZXcgVWludDhBcnJheSgkKTtpZigkJiYkLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBuZXcgVWludDhBcnJheSgkLmJ1ZmZlciwkLmJ5dGVPZmZzZXQsJC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCl9dmFyIGtCPUMoW0soIm5hbWUiLEYoKSwhMSksSygiaW1wbGVtZW50YXRpb25fdmVyc2lvbiIsRigpLCEwKSxLKCJkYXRhX3ZlcnNpb25fc3BlYyIsRigpLCEwKSxLKCJhdHRhY2hfb3B0aW9uX3NwZWNzIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKSxLKCJyZWxlYXNlcyIsaihLKCJpdGVtIixoOChbSygidmVyc2lvbiIsRigpLCExKSxLKCJyZWxlYXNlZF9hdCIsYVMoclMuTUlDUk9TRUNPTkQsIlVUQyIpLCEwKSxLKCJzdW1tYXJ5IixGKCksITEpLEsoIm5vdGVzX3VybCIsRigpLCEwKV0pLCEwKSksITEpLEsoInNvdXJjZV91cmwiLEYoKSwhMCldKSxJQj1DKFtLKCJjb21tZW50IixGKCksITApLEsoInRhZ3MiLGNaKEsoImtleSIsRigpLCExKSxLKCJ2YWx1ZSIsRigpLCEwKSwhMSksITEpLEsoImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJwYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJlc3RpbWF0ZWRfb2JqZWN0X2NvdW50IixjWihLKCJrZXkiLEYoKSwhMSksSygidmFsdWUiLFAwKCksITApLCExKSwhMCldKSxfQj1DKFtLKCJjb21tZW50IixGKCksITApLEsoInRhZ3MiLGNaKEsoImtleSIsRigpLCExKSxLKCJ2YWx1ZSIsRigpLCEwKSwhMSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoImNvbHVtbnMiLE4oKSwhMSksSygibm90X251bGxfY29uc3RyYWludHMiLGooSygiaXRlbSIsbTYoKSwhMCkpLCExKSxLKCJ1bmlxdWVfY29uc3RyYWludHMiLGooSygiaXRlbSIsaihLKCJpdGVtIixtNigpLCEwKSksITApKSwhMSksSygiY2hlY2tfY29uc3RyYWludHMiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoInByaW1hcnlfa2V5X2NvbnN0cmFpbnRzIixqKEsoIml0ZW0iLGooSygiaXRlbSIsbTYoKSwhMCkpLCEwKSksITEpLEsoImZvcmVpZ25fa2V5X2NvbnN0cmFpbnRzIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKSxLKCJ3cml0ZV9yZXN1bHRfbW9kZXMiLGNaKEsoImtleSIsRigpLCExKSxLKCJ2YWx1ZSIsRigpLCEwKSwhMSksITEpLEsoInN1cHBvcnRzX2NvbHVtbl9zdGF0aXN0aWNzIixaMCgpLCExKSxLKCJzY2FuX2Z1bmN0aW9uIixOKCksITApLEsoImluc2VydF9mdW5jdGlvbiIsTigpLCEwKSxLKCJ1cGRhdGVfZnVuY3Rpb24iLE4oKSwhMCksSygiZGVsZXRlX2Z1bmN0aW9uIixOKCksITApLEsoImNhcmRpbmFsaXR5X2VzdGltYXRlIixQMCgpLCEwKSxLKCJjYXJkaW5hbGl0eV9tYXgiLFAwKCksITApLEsoImNvbHVtbl9zdGF0aXN0aWNzIixOKCksITApLEsoImJpbmRfcmVzdWx0IixOKCksITApLEsoInJlcXVpcmVkX2ZpbHRlcnMiLGooSygiaXRlbSIsaihLKCJpdGVtIixGKCksITApKSwhMCkpLCExKV0pLFRCPUMoW0soImNvbW1lbnQiLEYoKSwhMCksSygidGFncyIsY1ooSygia2V5IixGKCksITEpLEsoInZhbHVlIixGKCksITApLCExKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygiZGVmaW5pdGlvbiIsRigpLCExKSxLKCJjb2x1bW5fY29tbWVudHMiLGNaKEsoImtleSIsRigpLCExKSxLKCJ2YWx1ZSIsRigpLCEwKSwhMSksITEpXSksZ0I9QyhbSygiY29tbWVudCIsRigpLCEwKSxLKCJ0YWdzIixjWihLKCJrZXkiLEYoKSwhMSksSygidmFsdWUiLEYoKSwhMCksITEpLCExKSxLKCJuYW1lIixGKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJmdW5jdGlvbl90eXBlIixHJChGKCksWSQoKSksITEpLEsoImFyZ3VtZW50cyIsTigpLCExKSxLKCJvdXRwdXRfc2NoZW1hIixOKCksITEpLEsoInBhcmFtZXRlcl9kZWZhdWx0X3ZhbHVlcyIsTigpLCEwKSxLKCJzdGFiaWxpdHkiLEckKEYoKSxZJCgpKSwhMCksSygibnVsbF9oYW5kbGluZyIsRyQoRigpLFkkKCkpLCEwKSxLKCJhcmd1bWVudF9tb25vdG9uaWNpdHkiLGooSygiaXRlbSIsRigpLCEwKSksITApLEsoImRlc2NyaXB0aW9uIixGKCksITEpLEsoImV4YW1wbGVzIixqKEsoIml0ZW0iLGg4KFtLKCJzcWwiLEYoKSwhMSksSygiZGVzY3JpcHRpb24iLEYoKSwhMSksSygiZXhwZWN0ZWRfb3V0cHV0IixGKCksITApXSksITApKSwhMSksSygiY2F0ZWdvcmllcyIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygicHJvamVjdGlvbl9wdXNoZG93biIsWjAoKSwhMCksSygiZmlsdGVyX3B1c2hkb3duIixaMCgpLCEwKSxLKCJzYW1wbGluZ19wdXNoZG93biIsWjAoKSwhMCksSygibGF0ZV9tYXRlcmlhbGl6YXRpb24iLFowKCksITApLEsoImZpbHRlcl9zZW1hbnRpY19wcm9maWxlcyIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygiYWRkaXRpb25hbF9maWx0ZXJfZnVuY3Rpb25zIixqKEsoIml0ZW0iLGg4KFtLKCJuYW1lc3BhY2UiLEYoKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJ2ZXJzaW9uIixQQSgpLCExKV0pLCEwKSksITEpLEsoInJ1bnRpbWVfZmlsdGVyX2FsZ29yaXRobXMiLGooSygiaXRlbSIsaDgoW0soIm5hbWVzcGFjZSIsRigpLCExKSxLKCJuYW1lIixGKCksITEpLEsoInZlcnNpb24iLFBBKCksITEpXSksITApKSwhMSksSygiZmlsdGVyX2V2YWx1YXRpb25fY29udGV4dHMiLGooSygiaXRlbSIsaDgoW0soInByb2ZpbGUiLEYoKSwhMSksSygicHJvdmlkZXJfZmluZ2VycHJpbnQiLEYoKSwhMCldKSwhMCkpLCExKSxLKCJvcmRlcl9wcmVzZXJ2YXRpb24iLEckKEYoKSxZJCgpKSwhMCksSygibWF4X3dvcmtlcnMiLG02KCksITApLEsoInN1cHBvcnRzX2JhdGNoX2luZGV4IixaMCgpLCExKSxLKCJzdXBwb3J0c19zcGxpdHMiLFowKCksITEpLEsoImZpbHRlcnNfZXhhY3RseV9hcHBsaWVkIixaMCgpLCExKSxLKCJzdXBwb3J0c19wb3NpdGlvbnMiLFowKCksITEpLEsoInNwbGl0X3Rva2VuX3R0bF9zZWNvbmRzIixQMCgpLCEwKSxLKCJwYXJ0aXRpb25fa2luZCIsRyQoRigpLFkkKCkpLCExKSxLKCJvcmRlcl9kZXBlbmRlbnQiLEckKEYoKSxZJCgpKSwhMSksSygiZGlzdGluY3RfZGVwZW5kZW50IixHJChGKCksWSQoKSksITEpLEsoInN1cHBvcnRzX3dpbmRvdyIsWjAoKSwhMSksSygic3RyZWFtaW5nX3BhcnRpdGlvbmVkIixaMCgpLCExKSxLKCJoYXNfZmluYWxpemUiLFowKCksITEpLEsoInNvdXJjZV9vcmRlcl9kZXBlbmRlbnQiLFowKCksITEpLEsoInNpbmtfb3JkZXJfZGVwZW5kZW50IixaMCgpLCExKSxLKCJyZXF1aXJlc19pbnB1dF9iYXRjaF9pbmRleCIsWjAoKSwhMSksSygiaW5wdXRfZnJvbV9hcmdzIixaMCgpLCExKSxLKCJyZXF1aXJlZF9zZXR0aW5ncyIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygicmVxdWlyZWRfc2VjcmV0cyIsaihLKCJpdGVtIixoOChbSygic2VjcmV0X3R5cGUiLEYoKSwhMSksSygic2NvcGUiLEYoKSwhMCksSygic2VjcmV0X25hbWUiLEYoKSwhMCldKSwhMCkpLCExKV0pLHhCPUMoW0soImNvbW1lbnQiLEYoKSwhMCksSygidGFncyIsY1ooSygia2V5IixGKCksITEpLEsoInZhbHVlIixGKCksITApLCExKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibWFjcm9fdHlwZSIsRyQoRigpLFkkKCkpLCExKSxLKCJwYXJhbWV0ZXJzIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJwYXJhbWV0ZXJfZGVmYXVsdF92YWx1ZXMiLE4oKSwhMCksSygiZGVmaW5pdGlvbiIsRigpLCExKSxLKCJhcmd1bWVudHNfc2NoZW1hIixOKCksITApXSksbmQ9QyhbSygiY29tbWVudCIsRigpLCEwKSxLKCJ0YWdzIixjWihLKCJrZXkiLEYoKSwhMSksSygidmFsdWUiLEYoKSwhMCksITEpLCExKSxLKCJuYW1lIixGKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJ0YWJsZV9uYW1lIixGKCksITEpLEsoImluZGV4X3R5cGUiLEYoKSwhMSksSygiY29uc3RyYWludF90eXBlIixHJChGKCksWSQoKSksITEpLEsoImV4cHJlc3Npb25zIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJvcHRpb25zIixjWihLKCJrZXkiLEYoKSwhMSksSygidmFsdWUiLEYoKSwhMCksITEpLCExKV0pLG9kPUMoW0soImNvbW1lbnQiLEYoKSwhMCksSygidGFncyIsY1ooSygia2V5IixGKCksITEpLEsoInZhbHVlIixGKCksITApLCExKSwhMSksSygiZm9ybWF0X25hbWUiLEYoKSwhMSksSygiaGFuZGxlciIsRigpLCExKSxLKCJvcHRpb25zIixOKCksITEpLEsoImRpcmVjdGlvbiIsRigpLCExKSxLKCJkZXNjcmlwdGlvbiIsRigpLCExKSxLKCJvcmRlcmVkIixaMCgpLCExKV0pLHNkPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiYXJndW1lbnRzIixOKCksITEpLEsoInJlcXVpcmVkX2V4dGVuc2lvbnMiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLGlkPUMoW0soImJyYW5jaGVzIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKSxLKCJyZXF1aXJlZF9leHRlbnNpb25zIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKV0pLHJkPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiYXJndW1lbnRzIixOKCksITEpLEsoImJyYW5jaF9maWx0ZXIiLEYoKSwhMCksSygid3JpdGFibGUiLFowKCksITEpLEsoInNvdXJjZV9jYXRhbG9nIixGKCksITApLEsoInNvdXJjZV9zY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMCksSygic291cmNlX3RhYmxlIixGKCksITApLEsoImZvcm1hdF9uYW1lIixGKCksITApLEsoImZvcm1hdF9sb2NhdGlvbnMiLGooSygiaXRlbSIsRigpLCEwKSksITApLEsoImZvcm1hdF9vcHRpb25zIixOKCksITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLGFkPUMoW0soInBheWxvYWQiLE4oKSwhMSksSygidG9rZW4iLE4oKSwhMSksSygiZXN0aW1hdGVkX3Jvd3MiLFAwKCksITApLEsoInJvd3NfZXhhY3QiLFowKCksITEpLEsoImVzdGltYXRlZF9ieXRlcyIsUDAoKSwhMCksSygicGFydGl0aW9uX2JvdW5kcyIsTigpLCEwKSxLKCJjb2x1bW5fc3RhdGlzdGljcyIsTigpLCEwKSxLKCJsb2NhdGlvbl9pZHMiLGooSygiaXRlbSIsUDAoKSwhMCkpLCEwKSxLKCJzdGFydF9wb3NpdGlvbiIsTigpLCEwKSxLKCJlbmRfcG9zaXRpb24iLE4oKSwhMCldKSx0ZD1DKFtLKCJhbGlhcyIsRigpLCExKSxLKCJ0YXJnZXQiLEYoKSwhMSksSygiZGJfdHlwZSIsRigpLCExKSxLKCJvcHRpb25zIixjWihLKCJrZXkiLEYoKSwhMSksSygidmFsdWUiLEYoKSwhMCksITEpLCExKSxLKCJoaWRkZW4iLFowKCksITEpLEsoInJlcXVpcmVkIixaMCgpLCExKSxLKCJzZWNyZXRfcmVmIixGKCksITEpXSksZWQ9QyhbSygiZmtfY29sdW1ucyIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygicGtfY29sdW1ucyIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygicmVmZXJlbmNlZF90YWJsZSIsRigpLCExKSxLKCJyZWZlcmVuY2VkX3NjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKV0pLCRuPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiYXJndW1lbnRzIixOKCksITEpLEsoImlucHV0X3NjaGVtYSIsTigpLCEwKSxLKCJzZXR0aW5ncyIsTigpLCEwKSxLKCJzZWNyZXRzIixOKCksITApLEsoImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMCksSygiYXJndW1lbnRfbmFtZXMiLGooSygiaXRlbSIsRigpLCEwKSksITApXSksWm49QyhbSygiZnVuY3Rpb25fbmFtZSIsRigpLCExKSxLKCJleGVjdXRpb25faWQiLE4oKSwhMSksSygibWVyZ2VfYmF0Y2giLE4oKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLFFuPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiZXhlY3V0aW9uX2lkIixOKCksITEpLEsoImdyb3VwX2lkc19iYXRjaCIsTigpLCExKSxLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMCksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITApXSksWG49QyhbSygiZnVuY3Rpb25fbmFtZSIsRigpLCExKSxLKCJleGVjdXRpb25faWQiLE4oKSwhMSksSygiZ3JvdXBfaWRzX2JhdGNoIixOKCksITEpLEsoIm91dHB1dF9zY2hlbWEiLE4oKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLEpuPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiZXhlY3V0aW9uX2lkIixOKCksITEpLEsoImlucHV0X2JhdGNoIixOKCksITEpLEsoImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMCldKSxXbj1DKFtLKCJmdW5jdGlvbl9uYW1lIixGKCksITEpLEsoImV4ZWN1dGlvbl9pZCIsTigpLCExKSxLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMCksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITApXSksWW49QyhbSygiZnVuY3Rpb25fbmFtZSIsRigpLCExKSxLKCJhcmd1bWVudHMiLE4oKSwhMSksSygiaW5wdXRfc2NoZW1hIixOKCksITEpLEsoInBhcnRpdGlvbl9rZXlfY291bnQiLFAwKCksITEpLEsoIm9yZGVyX2tleV9jb3VudCIsUDAoKSwhMSksSygib3V0cHV0X3NjaGVtYSIsTigpLCExKSxLKCJzZXR0aW5ncyIsTigpLCEwKSxLKCJzZWNyZXRzIixOKCksITApLEsoImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMCldKSxHbj1DKFtLKCJmdW5jdGlvbl9uYW1lIixGKCksITEpLEsoImV4ZWN1dGlvbl9pZCIsTigpLCExKSxLKCJpbnB1dF9iYXRjaCIsTigpLCExKSxLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMCksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITApXSksS249QyhbSygiZnVuY3Rpb25fbmFtZSIsRigpLCExKSxLKCJleGVjdXRpb25faWQiLE4oKSwhMSksSygicGFydGl0aW9uX2lkIixQMCgpLCExKSxLKCJyb3dfaWR4IixQMCgpLCExKSxLKCJjb3VudCIsUDAoKSwhMSksSygiZnJhbWVzX3Blcl9yb3ciLGooSygiaXRlbSIsUDAoKSwhMCkpLCExKSxLKCJmcmFtZV9zdGFydHMiLGooSygiaXRlbSIsUDAoKSwhMCkpLCExKSxLKCJmcmFtZV9lbmRzIixqKEsoIml0ZW0iLFAwKCksITApKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLEhuPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiZXhlY3V0aW9uX2lkIixOKCksITEpLEsoInBhcnRpdGlvbl9pZCIsUDAoKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLHpuPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiZXhlY3V0aW9uX2lkIixOKCksITEpLEsoInBhcnRpdGlvbl9pZCIsUDAoKSwhMSksSygicm93X2NvdW50IixQMCgpLCExKSxLKCJwYXJ0aXRpb25fYmF0Y2giLE4oKSwhMSksSygib3V0cHV0X3NjaGVtYSIsTigpLCExKSxLKCJmaWx0ZXJfbWFzayIsTigpLCExKSxLKCJmcmFtZV9zdGF0cyIsTigpLCExKSxLKCJhbGxfdmFsaWQiLE4oKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLHFuPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiZXhlY3V0aW9uX2lkIixOKCksITEpLEsoInBhcnRpdGlvbl9pZCIsUDAoKSwhMSksSygicmlkIixQMCgpLCExKSxLKCJmcmFtZV9zdGFydHMiLGooSygiaXRlbSIsUDAoKSwhMCkpLCExKSxLKCJmcmFtZV9lbmRzIixqKEsoIml0ZW0iLFAwKCksITApKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLFBuPUMoW0soImZ1bmN0aW9uX25hbWUiLEYoKSwhMSksSygiYXJndW1lbnRzIixOKCksITEpLEsoImZ1bmN0aW9uX3R5cGUiLEckKEYoKSxZJCgpKSwhMSksSygiaW5wdXRfc2NoZW1hIixOKCksITApLEsoInNldHRpbmdzIixOKCksITApLEsoInNlY3JldHMiLE4oKSwhMCksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApLEsoInJlc29sdmVkX3NlY3JldHNfcHJvdmlkZWQiLFowKCksITEpLEsoImF0X3VuaXQiLEYoKSwhMCksSygiYXRfdmFsdWUiLEYoKSwhMCksSygiY29weV9mcm9tIixoOChbSygiZm9ybWF0IixGKCksITEpLEsoImZpbGVfcGF0aCIsRigpLCExKSxLKCJleHBlY3RlZF9zY2hlbWEiLE4oKSwhMSldKSwhMCksSygiY29weV90byIsaDgoW0soImZvcm1hdCIsRigpLCExKSxLKCJmaWxlX3BhdGgiLEYoKSwhMSldKSwhMCksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITApLEsoImFyZ3VtZW50X25hbWVzIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKV0pLEZuPUMoW0soIm5hbWUiLEYoKSwhMSksSygib3B0aW9ucyIsTigpLCEwKSxLKCJkYXRhX3ZlcnNpb25fc3BlYyIsRigpLCEwKSxLKCJpbXBsZW1lbnRhdGlvbl92ZXJzaW9uIixGKCksITApLEsoImNsaWVudF9jYXBhYmlsaXRpZXMiLE4oKSwhMCldKSxObj1DKFtLKCJuYW1lIixGKCksITEpLEsoIm9uX2NvbmZsaWN0IixHJChGKCksWSQoKSksITEpLEsoIm9wdGlvbnMiLE4oKSwhMCldKSx2Qj1DKFtLKCJlbmdpbmUiLEYoKSwhMSksSygibmF0aXZlX2Zvcm1hdHMiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoImNhdGFsb2dzIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJjYW5fc3RyZWFtIixaMCgpLCExKSxLKCJmaWx0ZXJfZW5jb2RpbmdzIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKV0pLFVuPUMoW0soImZvcm1hdCIsRigpLCExKSxLKCJmaWxlX3BhdGgiLEYoKSwhMSksSygiZXhwZWN0ZWRfc2NoZW1hIixOKCksITEpXSksTW49QyhbSygiZm9ybWF0IixGKCksITEpLEsoImZpbGVfcGF0aCIsRigpLCExKV0pLExuPUMoW0soImV4ZWN1dGlvbl9pZCIsTigpLCExKSxLKCJvcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJtYXhfd29ya2VycyIsUDAoKSwhMSldKSxBbj1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygidGFibGVfbmFtZSIsRigpLCExKSxLKCJpbmRleF90eXBlIixGKCksITEpLEsoImNvbnN0cmFpbnRfdHlwZSIsRyQoRigpLFkkKCkpLCExKSxLKCJleHByZXNzaW9ucyIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygib25fY29uZmxpY3QiLEckKEYoKSxZJCgpKSwhMSksSygib3B0aW9ucyIsY1ooSygia2V5IixGKCksITEpLEsoInZhbHVlIixGKCksITApLCExKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxEbj1DKFtLKCJiaW5kX2NhbGwiLE4oKSwhMSksSygib3V0cHV0X3NjaGVtYSIsTigpLCExKSxLKCJiaW5kX29wYXF1ZV9kYXRhIixOKCksITApLEsoInByb2plY3Rpb25faWRzIixqKEsoIml0ZW0iLFAwKCksITApKSwhMCksSygicHVzaGRvd25fZmlsdGVycyIsclgoKSwhMCksSygiam9pbl9rZXlzIixqKEsoIml0ZW0iLHJYKCksITApKSwhMCksSygic3BsaXRfdG9rZW5zIixqKEsoIml0ZW0iLHJYKCksITApKSwhMCksSygicm93X2xpbWl0IixQMCgpLCEwKSxLKCJwaGFzZSIsRyQoRigpLFkkKCkpLCEwKSxLKCJmaW5hbGl6ZV9zdGF0ZV9pZCIsTigpLCEwKSxLKCJleGVjdXRpb25faWQiLE4oKSwhMCksSygiaW5pdF9vcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJzdWJzdHJlYW1faWQiLE4oKSwhMCksSygib3JkZXJfYnlfY29sdW1uX25hbWUiLEYoKSwhMCksSygib3JkZXJfYnlfZGlyZWN0aW9uIixHJChGKCksWSQoKSksITApLEsoIm9yZGVyX2J5X251bGxfb3JkZXIiLEckKEYoKSxZJCgpKSwhMCksSygib3JkZXJfYnlfbGltaXQiLFAwKCksITApLEsoInRhYmxlc2FtcGxlX3BlcmNlbnRhZ2UiLHQ1KCksITApLEsoInRhYmxlc2FtcGxlX3NlZWQiLFAwKCksITApXSkseUI9QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoIm1hY3JvX3R5cGUiLEckKEYoKSxZJCgpKSwhMSksSygicGFyYW1ldGVycyIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygiZGVmaW5pdGlvbiIsRigpLCExKSxLKCJvbl9jb25mbGljdCIsRyQoRigpLFkkKCkpLCExKSxLKCJwYXJhbWV0ZXJfZGVmYXVsdF92YWx1ZXMiLE4oKSwhMCksSygiYXJndW1lbnRzX3NjaGVtYSIsTigpLCEwKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLE9uPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJjb2x1bW5zIixOKCksITEpLEsoIm9uX2NvbmZsaWN0IixHJChGKCksWSQoKSksITEpLEsoIm5vdF9udWxsX2NvbnN0cmFpbnRzIixqKEsoIml0ZW0iLG02KCksITApKSwhMSksSygidW5pcXVlX2NvbnN0cmFpbnRzIixqKEsoIml0ZW0iLGooSygiaXRlbSIsbTYoKSwhMCkpLCEwKSksITEpLEsoImNoZWNrX2NvbnN0cmFpbnRzIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJwcmltYXJ5X2tleV9jb25zdHJhaW50cyIsaihLKCJpdGVtIixqKEsoIml0ZW0iLG02KCksITApKSwhMCkpLCExKSxLKCJmb3JlaWduX2tleV9jb25zdHJhaW50cyIsaihLKCJpdGVtIixOKCksITApKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxDbj1DKFtLKCJmdW5jdGlvbl9uYW1lIixGKCksITEpLEsoImV4ZWN1dGlvbl9pZCIsTigpLCExKSxLKCJzdGF0ZV9pZHMiLGooSygiaXRlbSIsTigpLCEwKSksITEpLEsoImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJ0cmFuc2FjdGlvbl9pZCIsTigpLCEwKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMCldKSxqbj1DKFtLKCJmdW5jdGlvbl9uYW1lIixGKCksITEpLEsoImV4ZWN1dGlvbl9pZCIsTigpLCExKSxLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMCksSygidHJhbnNhY3Rpb25faWQiLE4oKSwhMCksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITApXSksVm49QyhbSygiZnVuY3Rpb25fbmFtZSIsRigpLCExKSxLKCJleGVjdXRpb25faWQiLE4oKSwhMSksSygiaW5wdXRfYmF0Y2giLE4oKSwhMSksSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITApLEsoInRyYW5zYWN0aW9uX2lkIixOKCksITApLEsoImJhdGNoX2luZGV4IixQMCgpLCEwKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMCldKSxSbj1DKFtLKCJiaW5kX2NhbGwiLE4oKSwhMSksSygiYmluZF9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLEVuPUMoW0soImJpbmRfY2FsbCIsTigpLCExKSxLKCJiaW5kX29wYXF1ZV9kYXRhIixOKCksITApLEsoImdsb2JhbF9leGVjdXRpb25faWQiLE4oKSwhMSldKSx3bj1DKFtLKCJiaW5kX2NhbGwiLE4oKSwhMSksSygiYmluZF9vcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJwcm9qZWN0aW9uX2lkcyIsaihLKCJpdGVtIixQMCgpLCEwKSksITApLEsoInB1c2hkb3duX2ZpbHRlcnMiLHJYKCksITApLEsoImpvaW5fa2V5cyIsaihLKCJpdGVtIixyWCgpLCEwKSksITApLEsoInJvd19saW1pdCIsUDAoKSwhMCksSygidGFyZ2V0X3NwbGl0X2J5dGVzIixQMCgpLCEwKSxLKCJtaW5fc3BsaXRzIixQMCgpLCEwKSxLKCJtYXhfc3BsaXRzX3Blcl9yZXNwb25zZSIsUDAoKSwhMCksSygiY3Vyc29yIixOKCksITApLEsoInJlZmluZWRfZmlsdGVycyIsclgoKSwhMCksSygiZmlsdGVyc19jb21wbGV0ZSIsWjAoKSwhMSksSygic3RhcnRfcG9zaXRpb24iLE4oKSwhMCksSygiZW5kX3Bvc2l0aW9uIixOKCksITApLEsoIm9yZGVyX2J5X2NvbHVtbl9uYW1lIixGKCksITApLEsoIm9yZGVyX2J5X2RpcmVjdGlvbiIsRyQoRigpLFkkKCkpLCEwKSxLKCJvcmRlcl9ieV9udWxsX29yZGVyIixHJChGKCksWSQoKSksITApLEsoIm9yZGVyX2J5X2xpbWl0IixQMCgpLCEwKSxLKCJ0YWJsZXNhbXBsZV9wZXJjZW50YWdlIix0NSgpLCEwKSxLKCJ0YWJsZXNhbXBsZV9zZWVkIixQMCgpLCEwKV0pLFNuPUMoW0soImJpbmRfY2FsbCIsTigpLCExKSxLKCJiaW5kX29wYXF1ZV9kYXRhIixOKCksITApXSksQm49QyhbSygib3V0cHV0X3NjaGVtYSIsTigpLCExKSxLKCJleGVjdXRpb25faWQiLE4oKSwhMSldKSxrbj1DKFtdKSxJbj1DKFtdKSxfbj1DKFtLKCJyZXN1bHRfYmF0Y2giLE4oKSwhMSldKSxUbj1DKFtLKCJyZXN1bHRfYmF0Y2giLE4oKSwhMSldKSxnbj1DKFtdKSx4bj1DKFtLKCJleGVjdXRpb25faWQiLE4oKSwhMSldKSx2bj1DKFtdKSx5bj1DKFtLKCJyZXN1bHRfYmF0Y2giLE4oKSwhMSldKSxobj1DKFtLKCJyZXN1bHRfYmF0Y2giLE4oKSwhMSldKSxibj1DKFtdKSxtbj1DKFtdKSxmbj1DKFtLKCJvdXRwdXRfc2NoZW1hIixOKCksITEpLEsoIm9wYXF1ZV9kYXRhIixOKCksITApLEsoImxvb2t1cF9zZWNyZXRfdHlwZXMiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoImxvb2t1cF9zY29wZXMiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoImxvb2t1cF9uYW1lcyIsaihLKCJpdGVtIixGKCksITApKSwhMSldKSx1bj1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic3VwcG9ydHNfdHJhbnNhY3Rpb25zIixaMCgpLCExKSxLKCJzdXBwb3J0c190aW1lX3RyYXZlbCIsWjAoKSwhMSksSygiY2F0YWxvZ192ZXJzaW9uX2Zyb3plbiIsWjAoKSwhMSksSygiY2F0YWxvZ192ZXJzaW9uIixQMCgpLCExKSxLKCJhdHRhY2hfb3BhcXVlX2RhdGFfcmVxdWlyZWQiLFowKCksITEpLEsoImRlZmF1bHRfc2NoZW1hIixGKCksITEpLEsoInNldHRpbmdzIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKSxLKCJzZWNyZXRfdHlwZXMiLGooSygiaXRlbSIsTigpLCEwKSksITEpLEsoImF0dGFjaF9jYXRhbG9ncyIsaihLKCJpdGVtIixOKCksITApKSwhMSksSygiY29tbWVudCIsRigpLCEwKSxLKCJ0YWdzIixjWihLKCJrZXkiLEYoKSwhMSksSygidmFsdWUiLEYoKSwhMCksITEpLCExKSxLKCJzdXBwb3J0c19jb2x1bW5fc3RhdGlzdGljcyIsWjAoKSwhMSksSygiZ2xvYmFsX2Z1bmN0aW9ucyIsaihLKCJpdGVtIixOKCksITApKSwhMSksSygiZ2xvYmFsX2Z1bmN0aW9uX3ByZWZpeCIsRigpLCExKSxLKCJyZXNvbHZlZF9kYXRhX3ZlcnNpb24iLEYoKSwhMCksSygicmVzb2x2ZWRfaW1wbGVtZW50YXRpb25fdmVyc2lvbiIsRigpLCEwKV0pLHBuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLGNuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLGxuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLGRuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLG5uPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLG9uPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLHNuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLHJuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLGFuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLHRuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLGVuPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLCRvPUMoW0soIml0ZW1zIixqKEsoIml0ZW0iLE4oKSwhMCkpLCExKV0pLFpvPUMoW0soInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksUW89QyhbSygidmVyc2lvbiIsUDAoKSwhMSldKSxYbz1DKFtLKCJpdGVtcyIsaihLKCJpdGVtIixOKCksITApKSwhMSldKSxKbz1DKFtLKCJmaW5hbGl6ZV9zdGF0ZV9pZHMiLGooSygiaXRlbSIsTigpLCEwKSksITEpXSksV289QyhbXSksWW89QyhbSygic3RhdGVfaWQiLE4oKSwhMSldKSxHbz1DKFtLKCJlc3RpbWF0ZSIsUDAoKSwhMCksSygibWF4IixQMCgpLCEwKV0pLEtvPUMoW0soImtleXMiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoInZhbHVlcyIsaihLKCJpdGVtIixGKCksITApKSwhMSldKSxIbz1DKFtLKCJzcGxpdHMiLGooSygiaXRlbSIsTigpLCEwKSksITEpLEsoIm5leHRfY3Vyc29ycyIsaihLKCJpdGVtIixOKCksITApKSwhMCksSygiZXhlY3V0aW9uX2lkIixOKCksITApLEsoImluaXRfb3BhcXVlX2RhdGEiLE4oKSwhMCksSygibWF4X3dvcmtlcnMiLFAwKCksITApLEsoImVzdGltYXRlZF90b3RhbF9zcGxpdHMiLFAwKCksITApLEsoImVzdGltYXRlZF90b3RhbF9yb3dzIixQMCgpLCEwKSxLKCJlc3RpbWF0ZWRfdG90YWxfYnl0ZXMiLFAwKCksITApLEsoImNhdGFsb2dfdmVyc2lvbiIsUDAoKSwhMCksSygic2NvcGUiLEYoKSwhMSksSygibG9jYXRpb25zIixqKEsoIml0ZW0iLEYoKSwhMCkpLCEwKSxLKCJwYXJ0aXRpb25pbmciLGooSygiaXRlbSIsTigpLCEwKSksITApLEsoInNvcnRfb3JkZXIiLGooSygiaXRlbSIsTigpLCEwKSksITApLEsoImNhY2hlX21heF9hZ2Vfc2Vjb25kcyIsUDAoKSwhMCksSygic3RhcnRfcG9zaXRpb24iLE4oKSwhMCksSygiZW5kX3Bvc2l0aW9uIixOKCksITApXSksem89QyhbSygicmVxdWVzdCIsTigpLCExKV0pLHFvPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxQbz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksRm89QyhbSygicmVxdWVzdCIsTigpLCExKV0pLE5vPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxVbz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksTW89QyhbSygicmVxdWVzdCIsTigpLCExKV0pLExvPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxBbz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksRG89QyhbSygicmVxdWVzdCIsTigpLCExKV0pLE9vPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxDbz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksam89QyhbSygicmVxdWVzdCIsTigpLCExKV0pLFZvPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxSbz1DKFtdKSxFbz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSx3bz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksU289QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpXSksQm89QyhbSygibmFtZSIsRigpLCExKV0pLGtvPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxJbz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsWjAoKSwhMSksSygiY2FzY2FkZSIsWjAoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxfbz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxUbz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksZ289QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSkseG89QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksdm89QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInBhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoInR5cGUiLEckKEYoKSxZJCgpKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSx5bz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygicGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxobz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygicGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygidHlwZSIsRyQoRigpLFkkKCkpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLGJvPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJwYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLG1vPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJwYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLGZvPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJwYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJvbl9jb25mbGljdCIsRyQoRigpLFkkKCkpLCExKSxLKCJjb21tZW50IixGKCksITApLEsoInRhZ3MiLGNaKEsoImtleSIsRigpLCExKSxLKCJ2YWx1ZSIsRigpLCEwKSwhMSksITApLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksdW89QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInBhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoImNhc2NhZGUiLFowKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSkscG89QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInBhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksY289QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksbG89QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoImNvbHVtbl9kZWZpbml0aW9uIixOKCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoImlmX2NvbHVtbl9ub3RfZXhpc3RzIixaMCgpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLG5vPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJjb2x1bW5fbmFtZSIsRigpLCExKSxLKCJjb21tZW50IixGKCksITApLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksb289QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoImNvbHVtbl9uYW1lIixGKCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksc289QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoImNvbHVtbl9uYW1lIixGKCksITEpLEsoImV4cHJlc3Npb24iLEYoKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsWjAoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxpbz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygiY29sdW1uX25hbWUiLEYoKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsWjAoKSwhMSksSygiaWZfY29sdW1uX2V4aXN0cyIsWjAoKSwhMSksSygiY2FzY2FkZSIsWjAoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxybz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygiY29sdW1uX25hbWUiLEYoKSwhMSksSygibmV3X2NvbHVtbl9uYW1lIixGKCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksYW89QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksdG89QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoImNvbHVtbl9kZWZpbml0aW9uIixOKCksITEpLEsoImV4cHJlc3Npb24iLEYoKSwhMCksSygiaWdub3JlX25vdF9mb3VuZCIsWjAoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxlbz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygiY29tbWVudCIsRigpLCEwKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixaMCgpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLCRzPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxacz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxRcz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygiaWdub3JlX25vdF9mb3VuZCIsWjAoKSwhMSksSygiY2FzY2FkZSIsWjAoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxYcz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygiYXRfdW5pdCIsRigpLCEwKSxLKCJhdF92YWx1ZSIsRigpLCEwKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLEpzPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKSxLKCJ3cml0YWJsZV9icmFuY2hfZnVuY3Rpb25fbmFtZSIsRigpLCEwKV0pLFdzPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJjb2x1bW5fbmFtZSIsRigpLCExKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixaMCgpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLFlzPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJjb2x1bW5fbmFtZSIsRigpLCExKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixaMCgpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLEdzPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJuZXdfbmFtZSIsRigpLCExKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixaMCgpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLEtzPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJhdF91bml0IixGKCksITApLEsoImF0X3ZhbHVlIixGKCksITApLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksSHM9QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoImF0X3VuaXQiLEYoKSwhMCksSygiYXRfdmFsdWUiLEYoKSwhMCksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSx6cz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxxcz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSldKSxQcz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMSldKSxGcz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMSldKSxOcz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygidHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiLE4oKSwhMCldKSxVcz1DKFtLKCJhdHRhY2hfb3BhcXVlX2RhdGEiLE4oKSwhMSksSygic2NoZW1hX3BhdGgiLGooSygiaXRlbSIsRigpLCEwKSksITEpLEsoIm5hbWUiLEYoKSwhMSksSygiY29tbWVudCIsRigpLCEwKSxLKCJpZ25vcmVfbm90X2ZvdW5kIixaMCgpLCExKSxLKCJ0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSIsTigpLCEwKV0pLE1zPUMoW0soImF0dGFjaF9vcGFxdWVfZGF0YSIsTigpLCExKSxLKCJzY2hlbWFfcGF0aCIsaihLKCJpdGVtIixGKCksITApKSwhMSksSygibmFtZSIsRigpLCExKSxLKCJkZWZpbml0aW9uIixGKCksITEpLEsoIm9uX2NvbmZsaWN0IixHJChGKCksWSQoKSksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksTHM9QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoImNhc2NhZGUiLFowKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksQXM9QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksRHM9QyhbSygiYXR0YWNoX29wYXF1ZV9kYXRhIixOKCksITEpLEsoInNjaGVtYV9wYXRoIixqKEsoIml0ZW0iLEYoKSwhMCkpLCExKSxLKCJuYW1lIixGKCksITEpLEsoIm5ld19uYW1lIixGKCksITEpLEsoImlnbm9yZV9ub3RfZm91bmQiLFowKCksITEpLEsoInRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhIixOKCksITApXSksT3M9QyhbSygicmVxdWVzdCIsTigpLCExKV0pLENzPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxqcz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksVnM9QyhbSygicmVxdWVzdCIsTigpLCExKV0pLFJzPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxFcz1DKFtLKCJyZXF1ZXN0IixOKCksITEpXSksd3M9QyhbSygicmVxdWVzdCIsTigpLCExKV0pLFNzPUMoW0soInJlcXVlc3QiLE4oKSwhMSldKSxoQj0oJCk9PkhZKGtCLCQpO3ZhciBiQj0oJCk9PkhZKGdCLCQpO3ZhciBVQT0oJCk9PkhZKHhCLCQpO3ZhciBNQT0oJCk9PkhZKElCLCQpO3ZhciBMQT0oJCk9PkhZKF9CLCQpO3ZhciBBQT0oJCk9PkhZKFRCLCQpO2Z1bmN0aW9uIG1CKCQpe2xldCBaPSQuYXJndW1lbnRzLFE9W10sWD17fTtpZihaIT1udWxsKXtsZXQgWT1HWShLOChaKSk7Zm9yKGxldCBHIG9mIFkuc2NoZW1hLmZpZWxkcyl7bGV0IEg9WS5nZXRDaGlsZChHLm5hbWUpLHo9SD9ILmdldCgwKTpudWxsO2lmKEcubmFtZS5zdGFydHNXaXRoKCJhcmdfIikpe2xldCBxPXBhcnNlSW50KEcubmFtZS5zbGljZSg0KSwxMCk7d2hpbGUoUS5sZW5ndGg8PXEpUS5wdXNoKG51bGwpO1FbcV09en1lbHNlIFhbRy5uYW1lXT16fX1sZXQgSj0kLnJlcXVpcmVkX2V4dGVuc2lvbnMsVz1KPT1udWxsP1tdOihBcnJheS5pc0FycmF5KEopP0o6Wy4uLkpdKS5maWx0ZXIoKFkpPT5ZIT1udWxsKS5tYXAoU3RyaW5nKTtyZXR1cm57ZnVuY3Rpb25OYW1lOlN0cmluZygkLmZ1bmN0aW9uX25hbWU/PyIiKSxwb3NpdGlvbmFsQXJndW1lbnRzOlEsbmFtZWRBcmd1bWVudHM6WCxyZXF1aXJlZEV4dGVuc2lvbnM6VyxzY2hlbWFQYXRoOiQuc2NoZW1hX3BhdGg9PW51bGw/bnVsbDooQXJyYXkuaXNBcnJheSgkLnNjaGVtYV9wYXRoKT8kLnNjaGVtYV9wYXRoOlsuLi4kLnNjaGVtYV9wYXRoXSkuZmlsdGVyKChZKT0+WSE9bnVsbCkubWFwKFN0cmluZyl9fWZ1bmN0aW9uIGw1KCQpe3JldHVybntyZXF1ZXN0Ok1YKCQpfX1mdW5jdGlvbiBwWigkKXtsZXQgWj1LOCgkLnJlc3VsdCksUT1HWShaKTtyZXR1cm4gYkEoUSl9ZnVuY3Rpb24gZkIoJCl7aWYoJD09PW51bGwpcmV0dXJuIHBBKCk7aWYodHlwZW9mICQ9PT0ic3RyaW5nIilyZXR1cm4gRigpO2lmKHR5cGVvZiAkPT09ImJpZ2ludCIpcmV0dXJuIFAwKCk7aWYodHlwZW9mICQ9PT0ibnVtYmVyIil7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSl0aHJvdyBUeXBlRXJyb3IoYEF0dGFjaCBvcHRpb24gbnVtYmVyIHZhbHVlcyBtdXN0IGJlIGZpbml0ZSAoZ290ICR7JH0pLiBVc2UgYSBiaWdpbnQgZm9yIGludGVnZXJzIG9yIGEgZmluaXRlIG51bWJlciBmb3IgZmxvYXRzLmApO3JldHVybiB0NSgpfWlmKHR5cGVvZiAkPT09ImJvb2xlYW4iKXJldHVybiBaMCgpO2lmKCQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBOKCk7dGhyb3cgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCBhdHRhY2ggb3B0aW9uIHZhbHVlIHR5cGU6ICR7dHlwZW9mICR9LiBTdXBwb3J0ZWQ6IHN0cmluZywgbnVtYmVyLCBiaWdpbnQsIGJvb2xlYW4sIG51bGwsIFVpbnQ4QXJyYXkuYCl9ZnVuY3Rpb24gREEoJCl7aWYoISQpcmV0dXJuIG51bGw7bGV0IFo9T2JqZWN0LmVudHJpZXMoJCk7aWYoWi5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCBRPVtdLFg9e307Zm9yKGxldFtZLEddb2YgWil7bGV0IEg9ZkIoRyk7US5wdXNoKEsoWSxILCEwKSksWFtZXT1bR119bGV0IEo9QyhRKSxXPWxKKFgsSik7cmV0dXJuIE1YKFcpfWNsYXNzIGQkIGV4dGVuZHMgRXJyb3J7cmVtb3RlVHJhY2ViYWNrO2Vycm9yVHlwZTtjb25zdHJ1Y3RvcigkLFope3N1cGVyKCQsWj8uY2F1c2UhPW51bGw/e2NhdXNlOlouY2F1c2V9OnZvaWQgMCk7aWYodGhpcy5uYW1lPSJWZ2lDbGllbnRFcnJvciIsWj8ucmVtb3RlVHJhY2ViYWNrKXRoaXMucmVtb3RlVHJhY2ViYWNrPVoucmVtb3RlVHJhY2ViYWNrO2lmKFo/LmVycm9yVHlwZSl0aGlzLmVycm9yVHlwZT1aLmVycm9yVHlwZX1zdGF0aWMgZnJvbVJwY0Vycm9yKCQpe2xldCBaPWAkeyQuZXJyb3JUeXBlfTogJHskLmVycm9yTWVzc2FnZX1gLFE9JC5yZW1vdGVUcmFjZWJhY2s/YCR7Wn0KClJlbW90ZSB0cmFjZWJhY2s6CiR7JC5yZW1vdGVUcmFjZWJhY2t9YDpaO3JldHVybiBuZXcgZCQoUSx7cmVtb3RlVHJhY2ViYWNrOiQucmVtb3RlVHJhY2ViYWNrfHx2b2lkIDAsZXJyb3JUeXBlOiQuZXJyb3JUeXBlLGNhdXNlOiR9KX19ZnVuY3Rpb24gdUIoJCl7cmV0dXJue2FzeW5jIGNhbGwoWixRKXt0cnl7cmV0dXJuIGF3YWl0ICQuY2FsbChaLFEpfWNhdGNoKFgpe2lmKFggaW5zdGFuY2VvZiBiKXRocm93IGQkLmZyb21ScGNFcnJvcihYKTt0aHJvdyBYfX0sYXN5bmMgc3RyZWFtKFosUSl7dHJ5e3JldHVybiBhd2FpdCAkLnN0cmVhbShaLFEpfWNhdGNoKFgpe2lmKFggaW5zdGFuY2VvZiBiKXRocm93IGQkLmZyb21ScGNFcnJvcihYKTt0aHJvdyBYfX0sYXN5bmMgY2FsbFJhdyhaLFEpe3RyeXtyZXR1cm4gYXdhaXQgJC5jYWxsUmF3KFosUSl9Y2F0Y2goWCl7aWYoWCBpbnN0YW5jZW9mIGIpdGhyb3cgZCQuZnJvbVJwY0Vycm9yKFgpO3Rocm93IFh9fSxhc3luYyBzdHJlYW1SYXcoWixRLFgpe3RyeXtyZXR1cm4gYXdhaXQgJC5zdHJlYW1SYXcoWixRLFgpfWNhdGNoKEope2lmKEogaW5zdGFuY2VvZiBiKXRocm93IGQkLmZyb21ScGNFcnJvcihKKTt0aHJvdyBKfX0sZGVzY3JpYmU6KCk9PiQuZGVzY3JpYmUoKSxjbG9zZTooKT0+JC5jbG9zZSgpfX1mdW5jdGlvbiBVWCgkLFope2lmKCEkKXJldHVybltdO3JldHVybihBcnJheS5pc0FycmF5KCQpPyQ6Wy4uLiRdKS5maWx0ZXIoKFgpPT5YIT1udWxsKS5tYXAoKFgpPT5aKEs4KFgpKSl9ZnVuY3Rpb24gcEIoJCl7bGV0IFo9e307aWYoISQpcmV0dXJuIFo7bGV0IFE9JDtpZih0eXBlb2YgUVtTeW1ib2wuaXRlcmF0b3JdIT09ImZ1bmN0aW9uIilyZXR1cm4gWjtmb3IobGV0IFggb2YgUSlpZihBcnJheS5pc0FycmF5KFgpKVpbU3RyaW5nKFhbMF0pXT1TdHJpbmcoWFsxXSk7ZWxzZSBpZihYJiZ0eXBlb2YgWD09PSJvYmplY3QiKXtsZXQgSj1YO1pbU3RyaW5nKEoua2V5Pz9KWzBdPz8iIildPVN0cmluZyhKLnZhbHVlPz9KWzFdPz8iIil9cmV0dXJuIFp9ZnVuY3Rpb24gZDUoJCl7aWYoU3ltYm9sLmFzeW5jSXRlcmF0b3IgaW4gJClyZXR1cm4gJFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtsZXQgWj0kW1N5bWJvbC5pdGVyYXRvcl0oKTtyZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBaLm5leHQoKX19fWNsYXNzIHo5e3JwYztkZWZhdWx0QXR0YWNoT3BhcXVlRGF0YTtjb25zdHJ1Y3RvcigkLFope3RoaXMucnBjPXVCKCQpLHRoaXMuZGVmYXVsdEF0dGFjaE9wYXF1ZURhdGE9Wj8uYXR0YWNoT3BhcXVlRGF0YT8/bnVsbH1zdGF0aWMgYXN5bmMgZnJvbUlyb2goJCxaPXt9LFEsWCl7aWYoIS9eKGlyb2h8aHR0cGkpOlwvXC8vLnRlc3QoJCkpdGhyb3cgVHlwZUVycm9yKCJWZ2lDbGllbnQuZnJvbUlyb2ggcmVxdWlyZXMgYW4gaXJvaDovLyBvciBodHRwaTovLyBlbmRwb2ludCIpO2xldCBKPVg7aWYoIUope2xldCBXPWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGV6KCksS0EpKTtKPSQuc3RhcnRzV2l0aCgiaXJvaDovLyIpP1cuaXJvaENvbm5lY3Q6Vy5odHRwaUNvbm5lY3R9aWYoIUopdGhyb3cgVHlwZUVycm9yKCJubyBJcm9oIGNvbm5lY3RvciBpcyBhdmFpbGFibGUgaW4gdGhpcyBydW50aW1lIik7cmV0dXJuIG5ldyB6OShhd2FpdCBKKCQsWiksUSl9YXN5bmMgX2RvQmluZCgkLFosUSxYLEosVyxZLEc9bnVsbCxIKXtsZXQgej17ZnVuY3Rpb25fbmFtZTokLGFyZ3VtZW50czpRLGZ1bmN0aW9uX3R5cGU6WixpbnB1dF9zY2hlbWE6WCxzZXR0aW5nczpKPz9udWxsLHNlY3JldHM6Vz8/bnVsbCxhdHRhY2hfb3BhcXVlX2RhdGE6Rz8/dGhpcy5kZWZhdWx0QXR0YWNoT3BhcXVlRGF0YSx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpZPz9udWxsLHJlc29sdmVkX3NlY3JldHNfcHJvdmlkZWQ6ITF9LHE9ZEEoeiksUD1hd2FpdCB0aGlzLnJwYy5jYWxsKCJiaW5kIixsNShxKSk7aWYoIVApdGhyb3cgbmV3IGQkKCJiaW5kIHJldHVybmVkIG51bGwiKTtsZXQgVT1wWihQKSxNPVZCKFUpO2lmKEgpSChNKTtyZXR1cm57cmVxdWVzdDp6LHJlc3BvbnNlOk19fWFzeW5jIF9kb0luaXQoJCxaLFEpe2xldCBYPVE/Lm9yZGVyQnk/P251bGwsSj1RPy50YWJsZXNhbXBsZT8/bnVsbCxXPXtiaW5kX2NhbGw6JCxvdXRwdXRfc2NoZW1hOloub3V0cHV0X3NjaGVtYSxiaW5kX29wYXF1ZV9kYXRhOloub3BhcXVlX2RhdGEsc3BsaXRfdG9rZW5zOm51bGwscm93X2xpbWl0Om51bGwscHJvamVjdGlvbl9pZHM6UT8ucHJvamVjdGlvbklkcz8/bnVsbCxwdXNoZG93bl9maWx0ZXJzOlE/LnB1c2hkb3duRmlsdGVycz8/bnVsbCxqb2luX2tleXM6UT8uam9pbktleXM/P1tdLHBoYXNlOlE/LnBoYXNlPz9udWxsLGZpbmFsaXplX3N0YXRlX2lkOm51bGwsb3JkZXJfYnlfY29sdW1uX25hbWU6WD8uY29sdW1uTmFtZT8/bnVsbCxvcmRlcl9ieV9kaXJlY3Rpb246WD8uZGlyZWN0aW9uPz9udWxsLG9yZGVyX2J5X251bGxfb3JkZXI6WD8ubnVsbE9yZGVyPz9udWxsLG9yZGVyX2J5X2xpbWl0Olg/LmxpbWl0PT1udWxsP251bGw6QmlnSW50KFgubGltaXQpLHRhYmxlc2FtcGxlX3BlcmNlbnRhZ2U6Sj8ucGVyY2VudGFnZT8/bnVsbCx0YWJsZXNhbXBsZV9zZWVkOko/LnNlZWQ9PW51bGw/bnVsbDpCaWdJbnQoSi5zZWVkKSxleGVjdXRpb25faWQ6UT8uZXhlY3V0aW9uSWQ/P251bGwsaW5pdF9vcGFxdWVfZGF0YTpudWxsLHN1YnN0cmVhbV9pZDpudWxsfSxZPUVCKFcpLEc9YXdhaXQgdGhpcy5ycGMuc3RyZWFtKCJpbml0IixsNShZKSksSD1HLmhlYWRlcjtpZighSCl0aHJvdyBuZXcgZCQoImluaXQgZGlkIG5vdCByZXR1cm4gYSBoZWFkZXIiKTtsZXQgej13QihIKTtyZXR1cm57c2Vzc2lvbjpHLGluaXRSZXNwb25zZTp6fX1hc3luYyp0YWJsZUZ1bmN0aW9uKCQpe2xldCBaPSQuYXJndW1lbnRzPz9uZXcgaDYse3JlcXVlc3Q6USxyZXNwb25zZTpYfT1hd2FpdCB0aGlzLl9kb0JpbmQoJC5mdW5jdGlvbk5hbWUsInRhYmxlIixaLG51bGwsJC5zZXR0aW5ncz8/bnVsbCxudWxsLCQudHJhbnNhY3Rpb25PcGFxdWVEYXRhPz9udWxsLCQuYXR0YWNoT3BhcXVlRGF0YT8/bnVsbCwkLm9uQmluZD8/bnVsbCkse3Nlc3Npb246Sn09YXdhaXQgdGhpcy5fZG9Jbml0KFEsWCx7cHJvamVjdGlvbklkczokLnByb2plY3Rpb25JZHMscHVzaGRvd25GaWx0ZXJzOiQucHVzaGRvd25GaWx0ZXJzLG9yZGVyQnk6JC5vcmRlckJ5LHRhYmxlc2FtcGxlOiQudGFibGVzYW1wbGUsam9pbktleXM6JC5qb2luS2V5c30pLFc9WC5vdXRwdXRfc2NoZW1hO3RyeXtmb3IgYXdhaXQobGV0IFkgb2YgSilpZihZLmxlbmd0aD4wKXlpZWxkIGZKKFksVyl9ZmluYWxseXtKLmNsb3NlKCl9fWFzeW5jKnNjYWxhckZ1bmN0aW9uUm93cygkKXtsZXQgWj1kNSgkLmlucHV0KSxRPWF3YWl0IFoubmV4dCgpO2lmKFEuZG9uZSl0aHJvdyBuZXcgZCQoYHNjYWxhckZ1bmN0aW9uKCR7JC5mdW5jdGlvbk5hbWV9KTogaW5wdXQgaXRlcmF0b3IgeWllbGRlZCBubyBiYXRjaGVzOyBhdCBsZWFzdCBvbmUgYmF0Y2ggaXMgcmVxdWlyZWQgdG8gZGV0ZXJtaW5lIHRoZSBpbnB1dCBzY2hlbWFgKTtsZXQgWD1RLnZhbHVlLEo9WC5zY2hlbWEsVz0kLmFyZ3VtZW50cz8/bmV3IGg2LHtyZXF1ZXN0OlkscmVzcG9uc2U6R309YXdhaXQgdGhpcy5fZG9CaW5kKCQuZnVuY3Rpb25OYW1lLCJzY2FsYXIiLFcsSiwkLnNldHRpbmdzPz9udWxsLCQuc2VjcmV0cz8/bnVsbCwkLnRyYW5zYWN0aW9uT3BhcXVlRGF0YT8/bnVsbCwkLmF0dGFjaE9wYXF1ZURhdGE/P251bGwsJC5vbkJpbmQ/P251bGwpLHtzZXNzaW9uOkh9PWF3YWl0IHRoaXMuX2RvSW5pdChZLEcpO3RyeXtsZXQgej1hd2FpdCBILmV4Y2hhbmdlKFsuLi55OChYKV0pO2lmKHoubGVuZ3RoPjApeWllbGQgejtmb3IgYXdhaXQobGV0IHEgb2Z7W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+Wn0pe2xldCBQPWF3YWl0IEguZXhjaGFuZ2UoWy4uLnk4KHEpXSk7aWYoUC5sZW5ndGg+MCl5aWVsZCBQfX1maW5hbGx5e0guY2xvc2UoKX19YXN5bmMqc2NhbGFyRnVuY3Rpb24oJCl7bGV0IFo9ZDUoJC5pbnB1dCksUT1hd2FpdCBaLm5leHQoKTtpZihRLmRvbmUpdGhyb3cgbmV3IGQkKGBzY2FsYXJGdW5jdGlvbigkeyQuZnVuY3Rpb25OYW1lfSk6IGlucHV0IGl0ZXJhdG9yIHlpZWxkZWQgbm8gYmF0Y2hlczsgYXQgbGVhc3Qgb25lIGJhdGNoIGlzIHJlcXVpcmVkIHRvIGRldGVybWluZSB0aGUgaW5wdXQgc2NoZW1hYCk7bGV0IFg9US52YWx1ZSxKPVguc2NoZW1hLFc9JC5hcmd1bWVudHM/P25ldyBoNix7cmVxdWVzdDpZLHJlc3BvbnNlOkd9PWF3YWl0IHRoaXMuX2RvQmluZCgkLmZ1bmN0aW9uTmFtZSwic2NhbGFyIixXLEosJC5zZXR0aW5ncz8/bnVsbCwkLnNlY3JldHM/P251bGwsJC50cmFuc2FjdGlvbk9wYXF1ZURhdGE/P251bGwsJC5hdHRhY2hPcGFxdWVEYXRhPz9udWxsLCQub25CaW5kPz9udWxsKSx7c2Vzc2lvbjpIfT1hd2FpdCB0aGlzLl9kb0luaXQoWSxHKSx6PUcub3V0cHV0X3NjaGVtYTt0cnl7bGV0IHE9YXdhaXQgSC5leGNoYW5nZShbLi4ueTgoWCldKTtpZihxLmxlbmd0aD4wKXlpZWxkIGZKKHEseik7Zm9yIGF3YWl0KGxldCBQIG9me1tTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9Plp9KXtsZXQgVT1hd2FpdCBILmV4Y2hhbmdlKFsuLi55OChQKV0pO2lmKFUubGVuZ3RoPjApeWllbGQgZkooVSx6KX19ZmluYWxseXtILmNsb3NlKCl9fWFzeW5jKnRhYmxlSW5PdXRGdW5jdGlvblJvd3MoJCl7bGV0IFo9ZDUoJC5pbnB1dCksUT1hd2FpdCBaLm5leHQoKTtpZihRLmRvbmUpdGhyb3cgbmV3IGQkKGB0YWJsZUluT3V0RnVuY3Rpb24oJHskLmZ1bmN0aW9uTmFtZX0pOiBpbnB1dCBpdGVyYXRvciB5aWVsZGVkIG5vIGJhdGNoZXM7IGF0IGxlYXN0IG9uZSBiYXRjaCBpcyByZXF1aXJlZCB0byBkZXRlcm1pbmUgdGhlIGlucHV0IHNjaGVtYWApO2xldCBYPVEudmFsdWUsSj1YLnNjaGVtYSxXPSQuYXJndW1lbnRzPz9uZXcgaDYse3JlcXVlc3Q6WSxyZXNwb25zZTpHfT1hd2FpdCB0aGlzLl9kb0JpbmQoJC5mdW5jdGlvbk5hbWUsInRhYmxlIixXLEosJC5zZXR0aW5ncz8/bnVsbCxudWxsLCQudHJhbnNhY3Rpb25PcGFxdWVEYXRhPz9udWxsLCQuYXR0YWNoT3BhcXVlRGF0YT8/bnVsbCwkLm9uQmluZD8/bnVsbCkse3Nlc3Npb246SCxpbml0UmVzcG9uc2U6en09YXdhaXQgdGhpcy5fZG9Jbml0KFksRyx7cHJvamVjdGlvbklkczokLnByb2plY3Rpb25JZHMscHVzaGRvd25GaWx0ZXJzOiQucHVzaGRvd25GaWx0ZXJzLHBoYXNlOiJJTlBVVCIsb3JkZXJCeTokLm9yZGVyQnksdGFibGVzYW1wbGU6JC50YWJsZXNhbXBsZSxqb2luS2V5czokLmpvaW5LZXlzfSk7dHJ5e2xldCBQPWF3YWl0IEguZXhjaGFuZ2UoWy4uLnk4KFgpXSk7aWYoUC5sZW5ndGg+MCl5aWVsZCBQO2ZvciBhd2FpdChsZXQgVSBvZntbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5afSl7bGV0IE09YXdhaXQgSC5leGNoYW5nZShbLi4ueTgoVSldKTtpZihNLmxlbmd0aD4wKXlpZWxkIE19fWZpbmFsbHl7SC5jbG9zZSgpfWxldHtzZXNzaW9uOnF9PWF3YWl0IHRoaXMuX2RvSW5pdChZLEcse3Byb2plY3Rpb25JZHM6JC5wcm9qZWN0aW9uSWRzLHB1c2hkb3duRmlsdGVyczokLnB1c2hkb3duRmlsdGVycyxwaGFzZToiRklOQUxJWkUiLGV4ZWN1dGlvbklkOnouZXhlY3V0aW9uX2lkLG9yZGVyQnk6JC5vcmRlckJ5LHRhYmxlc2FtcGxlOiQudGFibGVzYW1wbGUsam9pbktleXM6JC5qb2luS2V5c30pO3RyeXtmb3IgYXdhaXQobGV0IFAgb2YgcSlpZihQLmxlbmd0aD4wKXlpZWxkIFB9ZmluYWxseXtxLmNsb3NlKCl9fWFzeW5jKnRhYmxlSW5PdXRGdW5jdGlvbigkKXtsZXQgWj1kNSgkLmlucHV0KSxRPWF3YWl0IFoubmV4dCgpO2lmKFEuZG9uZSl0aHJvdyBuZXcgZCQoYHRhYmxlSW5PdXRGdW5jdGlvbigkeyQuZnVuY3Rpb25OYW1lfSk6IGlucHV0IGl0ZXJhdG9yIHlpZWxkZWQgbm8gYmF0Y2hlczsgYXQgbGVhc3Qgb25lIGJhdGNoIGlzIHJlcXVpcmVkIHRvIGRldGVybWluZSB0aGUgaW5wdXQgc2NoZW1hYCk7bGV0IFg9US52YWx1ZSxKPVguc2NoZW1hLFc9JC5hcmd1bWVudHM/P25ldyBoNix7cmVxdWVzdDpZLHJlc3BvbnNlOkd9PWF3YWl0IHRoaXMuX2RvQmluZCgkLmZ1bmN0aW9uTmFtZSwidGFibGUiLFcsSiwkLnNldHRpbmdzPz9udWxsLG51bGwsJC50cmFuc2FjdGlvbk9wYXF1ZURhdGE/P251bGwsJC5hdHRhY2hPcGFxdWVEYXRhPz9udWxsLCQub25CaW5kPz9udWxsKSx7c2Vzc2lvbjpILGluaXRSZXNwb25zZTp6fT1hd2FpdCB0aGlzLl9kb0luaXQoWSxHLHtwcm9qZWN0aW9uSWRzOiQucHJvamVjdGlvbklkcyxwdXNoZG93bkZpbHRlcnM6JC5wdXNoZG93bkZpbHRlcnMscGhhc2U6IklOUFVUIixvcmRlckJ5OiQub3JkZXJCeSx0YWJsZXNhbXBsZTokLnRhYmxlc2FtcGxlLGpvaW5LZXlzOiQuam9pbktleXN9KSxxPUcub3V0cHV0X3NjaGVtYTt0cnl7bGV0IFU9YXdhaXQgSC5leGNoYW5nZShbLi4ueTgoWCldKTtpZihVLmxlbmd0aD4wKXlpZWxkIGZKKFUscSk7Zm9yIGF3YWl0KGxldCBNIG9me1tTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9Plp9KXtsZXQgTD1hd2FpdCBILmV4Y2hhbmdlKFsuLi55OChNKV0pO2lmKEwubGVuZ3RoPjApeWllbGQgZkooTCxxKX19ZmluYWxseXtILmNsb3NlKCl9bGV0e3Nlc3Npb246UH09YXdhaXQgdGhpcy5fZG9Jbml0KFksRyx7cHJvamVjdGlvbklkczokLnByb2plY3Rpb25JZHMscHVzaGRvd25GaWx0ZXJzOiQucHVzaGRvd25GaWx0ZXJzLHBoYXNlOiJGSU5BTElaRSIsZXhlY3V0aW9uSWQ6ei5leGVjdXRpb25faWQsb3JkZXJCeTokLm9yZGVyQnksdGFibGVzYW1wbGU6JC50YWJsZXNhbXBsZSxqb2luS2V5czokLmpvaW5LZXlzfSk7dHJ5e2ZvciBhd2FpdChsZXQgVSBvZiBQKWlmKFUubGVuZ3RoPjApeWllbGQgZkooVSxxKX1maW5hbGx5e1AuY2xvc2UoKX19YXN5bmMqdGFibGVGdW5jdGlvblJvd3MoJCl7bGV0IFo9JC5hcmd1bWVudHM/P25ldyBoNix7cmVxdWVzdDpRLHJlc3BvbnNlOlh9PWF3YWl0IHRoaXMuX2RvQmluZCgkLmZ1bmN0aW9uTmFtZSwidGFibGUiLFosbnVsbCwkLnNldHRpbmdzPz9udWxsLG51bGwsJC50cmFuc2FjdGlvbk9wYXF1ZURhdGE/P251bGwsJC5hdHRhY2hPcGFxdWVEYXRhPz9udWxsLCQub25CaW5kPz9udWxsKSx7c2Vzc2lvbjpKfT1hd2FpdCB0aGlzLl9kb0luaXQoUSxYLHtwcm9qZWN0aW9uSWRzOiQucHJvamVjdGlvbklkcyxwdXNoZG93bkZpbHRlcnM6JC5wdXNoZG93bkZpbHRlcnMsb3JkZXJCeTokLm9yZGVyQnksdGFibGVzYW1wbGU6JC50YWJsZXNhbXBsZSxqb2luS2V5czokLmpvaW5LZXlzfSk7dHJ5e2ZvciBhd2FpdChsZXQgVyBvZiBKKWlmKFcubGVuZ3RoPjApeWllbGQgV31maW5hbGx5e0ouY2xvc2UoKX19YXN5bmMgY2F0YWxvZ3NJbmZvKCl7bGV0ICQ9YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19jYXRhbG9ncyIse30pO2lmKCEkKXJldHVybltdO2xldCBaPXBaKCQpO3JldHVybiBVWChaLml0ZW1zLGhCKX1hc3luYyBjYXRhbG9ncygpe3JldHVybihhd2FpdCB0aGlzLmNhdGFsb2dzSW5mbygpKS5tYXAoKFopPT5aLm5hbWUpfWFzeW5jIGNhdGFsb2dBdHRhY2goJCxaKXtpZihaPy5vcHRpb25zIT1udWxsJiZaPy5vcHRpb25zQnl0ZXMhPW51bGwpdGhyb3cgbmV3IGQkKCJjYXRhbG9nQXR0YWNoOiBjYW5ub3Qgc3BlY2lmeSBib3RoIGBvcHRpb25zYCBhbmQgYG9wdGlvbnNCeXRlc2AiKTtsZXQgUTtpZihaPy5vcHRpb25zQnl0ZXMhPW51bGwpUT1aLm9wdGlvbnNCeXRlcy5ieXRlTGVuZ3RoPT09MD9udWxsOloub3B0aW9uc0J5dGVzO2Vsc2UgUT1EQShaPy5vcHRpb25zKTtsZXQgWD1DKFtLKCJuYW1lIixGKCksITEpLEsoIm9wdGlvbnMiLE4oKSwhMCksSygiZGF0YV92ZXJzaW9uX3NwZWMiLEYoKSwhMCksSygiaW1wbGVtZW50YXRpb25fdmVyc2lvbiIsRigpLCEwKSxLKCJjbGllbnRfY2FwYWJpbGl0aWVzIixOKCksITApXSksSj1sSih7bmFtZTpbJF0sb3B0aW9uczpbUV0sZGF0YV92ZXJzaW9uX3NwZWM6W1o/LmRhdGFWZXJzaW9uU3BlYz8/bnVsbF0saW1wbGVtZW50YXRpb25fdmVyc2lvbjpbWj8uaW1wbGVtZW50YXRpb25WZXJzaW9uPz9udWxsXSxjbGllbnRfY2FwYWJpbGl0aWVzOltaPy5jbGllbnRDYXBhYmlsaXRpZXM/U0IodkIsWi5jbGllbnRDYXBhYmlsaXRpZXMpOm51bGxdfSxYKSxXPWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfYXR0YWNoIixsNShKKSk7aWYoIVcpdGhyb3cgbmV3IGQkKCJjYXRhbG9nX2F0dGFjaCByZXR1cm5lZCBudWxsIik7bGV0IFk9cFooVyk7cmV0dXJue2F0dGFjaF9vcGFxdWVfZGF0YTpLOChZLmF0dGFjaF9vcGFxdWVfZGF0YSksc3VwcG9ydHNfdHJhbnNhY3Rpb25zOlkuc3VwcG9ydHNfdHJhbnNhY3Rpb25zPz8hMSxzdXBwb3J0c190aW1lX3RyYXZlbDpZLnN1cHBvcnRzX3RpbWVfdHJhdmVsPz8hMSxjYXRhbG9nX3ZlcnNpb25fZnJvemVuOlkuY2F0YWxvZ192ZXJzaW9uX2Zyb3plbj8/ITEsY2F0YWxvZ192ZXJzaW9uOk51bWJlcihZLmNhdGFsb2dfdmVyc2lvbj8/MCksYXR0YWNoX29wYXF1ZV9kYXRhX3JlcXVpcmVkOlkuYXR0YWNoX29wYXF1ZV9kYXRhX3JlcXVpcmVkPz8hMCxkZWZhdWx0X3NjaGVtYTpZLmRlZmF1bHRfc2NoZW1hPz8ibWFpbiIsc2V0dGluZ3M6WS5zZXR0aW5ncz8oQXJyYXkuaXNBcnJheShZLnNldHRpbmdzKT9ZLnNldHRpbmdzOlsuLi5ZLnNldHRpbmdzXSkubWFwKEs4KTpbXSxzZWNyZXRfdHlwZXM6WS5zZWNyZXRfdHlwZXM/KEFycmF5LmlzQXJyYXkoWS5zZWNyZXRfdHlwZXMpP1kuc2VjcmV0X3R5cGVzOlsuLi5ZLnNlY3JldF90eXBlc10pLm1hcChLOCk6W10sYXR0YWNoX2NhdGFsb2dzOlkuYXR0YWNoX2NhdGFsb2dzPyhBcnJheS5pc0FycmF5KFkuYXR0YWNoX2NhdGFsb2dzKT9ZLmF0dGFjaF9jYXRhbG9nczpbLi4uWS5hdHRhY2hfY2F0YWxvZ3NdKS5tYXAoSzgpOltdLGNvbW1lbnQ6WS5jb21tZW50Pz9udWxsLHRhZ3M6cEIoWS50YWdzKSxzdXBwb3J0c19jb2x1bW5fc3RhdGlzdGljczpZLnN1cHBvcnRzX2NvbHVtbl9zdGF0aXN0aWNzPz8hMSxnbG9iYWxfZnVuY3Rpb25zOlkuZ2xvYmFsX2Z1bmN0aW9ucz8oQXJyYXkuaXNBcnJheShZLmdsb2JhbF9mdW5jdGlvbnMpP1kuZ2xvYmFsX2Z1bmN0aW9uczpbLi4uWS5nbG9iYWxfZnVuY3Rpb25zXSkubWFwKEs4KTpbXSxnbG9iYWxfZnVuY3Rpb25fcHJlZml4OlkuZ2xvYmFsX2Z1bmN0aW9uX3ByZWZpeD8/IiIscmVzb2x2ZWRfZGF0YV92ZXJzaW9uOlkucmVzb2x2ZWRfZGF0YV92ZXJzaW9uPz9udWxsLHJlc29sdmVkX2ltcGxlbWVudGF0aW9uX3ZlcnNpb246WS5yZXNvbHZlZF9pbXBsZW1lbnRhdGlvbl92ZXJzaW9uPz9udWxsfX1hc3luYyBjYXRhbG9nRGV0YWNoKCQpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfZGV0YWNoIix7YXR0YWNoX29wYXF1ZV9kYXRhOiR9KX1hc3luYyBjYXRhbG9nQ3JlYXRlKCQsWixRKXtsZXQgWDtpZihRPT1udWxsKVg9bnVsbDtlbHNlIGlmKFEgaW5zdGFuY2VvZiBVaW50OEFycmF5KVg9US5ieXRlTGVuZ3RoPT09MD9udWxsOlE7ZWxzZXtpZihRLm9wdGlvbnMhPW51bGwmJlEub3B0aW9uc0J5dGVzIT1udWxsKXRocm93IG5ldyBkJCgiY2F0YWxvZ0NyZWF0ZTogY2Fubm90IHNwZWNpZnkgYm90aCBgb3B0aW9uc2AgYW5kIGBvcHRpb25zQnl0ZXNgIik7aWYoUS5vcHRpb25zQnl0ZXMhPW51bGwpWD1RLm9wdGlvbnNCeXRlcy5ieXRlTGVuZ3RoPT09MD9udWxsOlEub3B0aW9uc0J5dGVzO2Vsc2UgWD1EQShRLm9wdGlvbnMpfWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfY3JlYXRlIix7bmFtZTokLG9uX2NvbmZsaWN0Olosb3B0aW9uczpYfSl9YXN5bmMgY2F0YWxvZ0Ryb3AoJCl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19kcm9wIix7bmFtZTokfSl9YXN5bmMgY2F0YWxvZ1ZlcnNpb24oJCxaKXtsZXQgUT1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3ZlcnNpb24iLHthdHRhY2hfb3BhcXVlX2RhdGE6JCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpaPz9udWxsfSk7aWYoIVEpdGhyb3cgbmV3IGQkKCJjYXRhbG9nX3ZlcnNpb24gcmV0dXJuZWQgbnVsbCIpO2xldCBYPXBaKFEpO3JldHVybiBOdW1iZXIoWC52ZXJzaW9uPz8wKX1hc3luYyB0cmFuc2FjdGlvbkJlZ2luKCQpe2xldCBaPWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdHJhbnNhY3Rpb25fYmVnaW4iLHthdHRhY2hfb3BhcXVlX2RhdGE6JH0pO2lmKCFaKXRocm93IG5ldyBkJCgidHJhbnNhY3Rpb25fYmVnaW4gcmV0dXJuZWQgbnVsbCIpO2xldCBRPXBaKFopO2lmKCFRLnRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhKXRocm93IG5ldyBkJCgidHJhbnNhY3Rpb25fYmVnaW4gcmV0dXJuZWQgbm8gdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGEiKTtyZXR1cm4gSzgoUS50cmFuc2FjdGlvbl9vcGFxdWVfZGF0YSl9YXN5bmMgdHJhbnNhY3Rpb25Db21taXQoJCxaKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RyYW5zYWN0aW9uX2NvbW1pdCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlp9KX1hc3luYyB0cmFuc2FjdGlvblJvbGxiYWNrKCQsWil7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190cmFuc2FjdGlvbl9yb2xsYmFjayIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlp9KX1hc3luYyBzY2hlbWFzKCQsWil7bGV0IFE9YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19zY2hlbWFzIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Wj8/bnVsbH0pO2lmKCFRKXJldHVybltdO2xldCBYPXBaKFEpO3JldHVybiBVWChYLml0ZW1zLE1BKX1hc3luYyBzY2hlbWFHZXQoJCxaLFEpe2xldCBYPWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfc2NoZW1hX2dldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHBhdGg6VyQoWiksdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6UT8/bnVsbH0pO2lmKCFYKXJldHVybiBudWxsO2xldCBKPXBaKFgpLFc9VVgoSi5pdGVtcyxNQSk7cmV0dXJuIFcubGVuZ3RoPjA/V1swXTpudWxsfWFzeW5jIHNjaGVtYUNyZWF0ZSgkLFosUSl7bGV0IFg9UT8udGFncz9uZXcgTWFwKE9iamVjdC5lbnRyaWVzKFEudGFncykpOm51bGw7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19zY2hlbWFfY3JlYXRlIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQscGF0aDpXJChaKSxvbl9jb25mbGljdDpRPy5vbkNvbmZsaWN0Pz8iZXJyb3IiLGNvbW1lbnQ6UT8uY29tbWVudD8/bnVsbCx0YWdzOlgsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6UT8udHJhbnNhY3Rpb25PcGFxdWVEYXRhPz9udWxsfSl9YXN5bmMgc2NoZW1hRHJvcCgkLFosUSxYLEope2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfc2NoZW1hX2Ryb3AiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxwYXRoOlckKFopLGlnbm9yZV9ub3RfZm91bmQ6UT8/ITEsY2FzY2FkZTpYPz8hMSx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpKPz9udWxsfSl9YXN5bmMgc2NoZW1hQ29udGVudHNUYWJsZXMoJCxaLFEpe2xldCBYPWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfc2NoZW1hX2NvbnRlbnRzX3RhYmxlcyIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHBhdGg6VyQoWiksdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6UT8/bnVsbH0pO2lmKCFYKXJldHVybltdO2xldCBKPXBaKFgpO3JldHVybiBVWChKLml0ZW1zLExBKX1hc3luYyBzY2hlbWFDb250ZW50c1ZpZXdzKCQsWixRKXtsZXQgWD1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3NjaGVtYV9jb250ZW50c192aWV3cyIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHBhdGg6VyQoWiksdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6UT8/bnVsbH0pO2lmKCFYKXJldHVybltdO2xldCBKPXBaKFgpO3JldHVybiBVWChKLml0ZW1zLEFBKX1hc3luYyBzY2hlbWFDb250ZW50c0Z1bmN0aW9ucygkLFosUSxYKXtsZXQgSj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3NjaGVtYV9jb250ZW50c19mdW5jdGlvbnMiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxwYXRoOlckKFopLHR5cGU6USx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpYPz9udWxsfSk7aWYoIUopcmV0dXJuW107bGV0IFc9cFooSik7cmV0dXJuIFVYKFcuaXRlbXMsYkIpfWFzeW5jIHRhYmxlR2V0KCQsWixRLFgpe2xldCBKPWF3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfZ2V0Iix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX3BhdGg6VyQoWiksbmFtZTpRLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlg/P251bGx9KTtpZighSilyZXR1cm4gbnVsbDtsZXQgVz1wWihKKSxZPVVYKFcuaXRlbXMsTEEpO3JldHVybiBZLmxlbmd0aD4wP1lbMF06bnVsbH1hc3luYyB0YWJsZUNyZWF0ZSgkLFosUSxYLEosVyxZLEcsSCl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9jcmVhdGUiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfcGF0aDpXJChaKSxuYW1lOlEsY29sdW1uczpYLG9uX2NvbmZsaWN0Okosbm90X251bGxfY29uc3RyYWludHM6Vz8/bnVsbCx1bmlxdWVfY29uc3RyYWludHM6WT8/bnVsbCxjaGVja19jb25zdHJhaW50czpHPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOkg/P251bGx9KX1hc3luYyB0YWJsZURyb3AoJCxaLFEsWCxKLFcpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfZHJvcCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USxpZ25vcmVfbm90X2ZvdW5kOlg/PyExLGNhc2NhZGU6Sj8/ITEsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Vz8/bnVsbH0pfWFzeW5jIHRhYmxlU2NhbkZ1bmN0aW9uR2V0KCQsWixRLFgsSixXKXtsZXQgWT1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX3NjYW5fZnVuY3Rpb25fZ2V0Iix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX3BhdGg6VyQoWiksbmFtZTpRLGF0X3VuaXQ6WD8/bnVsbCxhdF92YWx1ZTpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlc/P251bGx9KTtpZighWSl0aHJvdyBuZXcgZCQoInRhYmxlX3NjYW5fZnVuY3Rpb25fZ2V0IHJldHVybmVkIG51bGwiKTtyZXR1cm4gbUIocFooWSkpfWFzeW5jIHRhYmxlQ29tbWVudFNldCgkLFosUSxYLEosVyl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9jb21tZW50X3NldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USxjb21tZW50Olg/P251bGwsaWdub3JlX25vdF9mb3VuZDpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlc/P251bGx9KX1hc3luYyB0YWJsZVJlbmFtZSgkLFosUSxYLEosVyl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9yZW5hbWUiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfcGF0aDpXJChaKSxuYW1lOlEsbmV3X25hbWU6WCxpZ25vcmVfbm90X2ZvdW5kOko/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Vz8/bnVsbH0pfWFzeW5jIHRhYmxlQ29sdW1uQWRkKCQsWixRLFgsSixXLFksRyl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9jb2x1bW5fYWRkIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX3BhdGg6VyQoWiksbmFtZTpRLGNvbHVtbl9uYW1lOlgsY29sdW1uX3R5cGU6SixkZWZhdWx0X3ZhbHVlOlc/P251bGwsaWdub3JlX25vdF9mb3VuZDpZPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOkc/P251bGx9KX1hc3luYyB0YWJsZUNvbHVtbkRyb3AoJCxaLFEsWCxKLFcpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfY29sdW1uX2Ryb3AiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfcGF0aDpXJChaKSxuYW1lOlEsY29sdW1uX25hbWU6WCxpZ25vcmVfbm90X2ZvdW5kOko/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Vz8/bnVsbH0pfWFzeW5jIHRhYmxlQ29sdW1uUmVuYW1lKCQsWixRLFgsSixXLFkpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfY29sdW1uX3JlbmFtZSIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USxjb2x1bW5fbmFtZTpYLG5ld19uYW1lOkosaWdub3JlX25vdF9mb3VuZDpXPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyB0YWJsZUNvbHVtbkRlZmF1bHRTZXQoJCxaLFEsWCxKLFcsWSl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ190YWJsZV9jb2x1bW5fZGVmYXVsdF9zZXQiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfcGF0aDpXJChaKSxuYW1lOlEsY29sdW1uX25hbWU6WCxkZWZhdWx0X3ZhbHVlOkosaWdub3JlX25vdF9mb3VuZDpXPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyB0YWJsZUNvbHVtbkRlZmF1bHREcm9wKCQsWixRLFgsSixXKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX2NvbHVtbl9kZWZhdWx0X2Ryb3AiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfcGF0aDpXJChaKSxuYW1lOlEsY29sdW1uX25hbWU6WCxpZ25vcmVfbm90X2ZvdW5kOko/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Vz8/bnVsbH0pfWFzeW5jIHRhYmxlQ29sdW1uVHlwZUNoYW5nZSgkLFosUSxYLEosVyxZKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX2NvbHVtbl90eXBlX2NoYW5nZSIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USxjb2x1bW5fZGVmaW5pdGlvbjpYLGV4cHJlc3Npb246Sj8/bnVsbCxpZ25vcmVfbm90X2ZvdW5kOlc/PyExLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlk/P251bGx9KX1hc3luYyB0YWJsZU5vdE51bGxTZXQoJCxaLFEsWCxKLFcpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdGFibGVfbm90X251bGxfc2V0Iix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX3BhdGg6VyQoWiksbmFtZTpRLGNvbHVtbl9uYW1lOlgsaWdub3JlX25vdF9mb3VuZDpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlc/P251bGx9KX1hc3luYyB0YWJsZU5vdE51bGxEcm9wKCQsWixRLFgsSixXKXthd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX3RhYmxlX25vdF9udWxsX2Ryb3AiLHthdHRhY2hfb3BhcXVlX2RhdGE6JCxzY2hlbWFfcGF0aDpXJChaKSxuYW1lOlEsY29sdW1uX25hbWU6WCxpZ25vcmVfbm90X2ZvdW5kOko/P251bGwsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Vz8/bnVsbH0pfWFzeW5jIHZpZXdHZXQoJCxaLFEsWCl7bGV0IEo9YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ192aWV3X2dldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpYPz9udWxsfSk7aWYoIUopcmV0dXJuIG51bGw7bGV0IFc9cFooSiksWT1VWChXLml0ZW1zLEFBKTtyZXR1cm4gWS5sZW5ndGg+MD9ZWzBdOm51bGx9YXN5bmMgdmlld0NyZWF0ZSgkLFosUSxYLEosVyl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ192aWV3X2NyZWF0ZSIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USxkZWZpbml0aW9uOlgsb25fY29uZmxpY3Q6Six0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpXPz9udWxsfSl9YXN5bmMgdmlld0Ryb3AoJCxaLFEsWCxKLFcpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdmlld19kcm9wIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX3BhdGg6VyQoWiksbmFtZTpRLGlnbm9yZV9ub3RfZm91bmQ6WD8/ITEsY2FzY2FkZTpKPz8hMSx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpXPz9udWxsfSl9YXN5bmMgdmlld1JlbmFtZSgkLFosUSxYLEosVyl7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ192aWV3X3JlbmFtZSIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USxuZXdfbmFtZTpYLGlnbm9yZV9ub3RfZm91bmQ6Sj8/bnVsbCx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpXPz9udWxsfSl9YXN5bmMgdmlld0NvbW1lbnRTZXQoJCxaLFEsWCxKLFcpe2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfdmlld19jb21tZW50X3NldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USxjb21tZW50Olg/P251bGwsaWdub3JlX25vdF9mb3VuZDpKPz9udWxsLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlc/P251bGx9KX1hc3luYyBtYWNyb0dldCgkLFosUSxYKXtsZXQgSj1hd2FpdCB0aGlzLnJwYy5jYWxsKCJjYXRhbG9nX21hY3JvX2dldCIse2F0dGFjaF9vcGFxdWVfZGF0YTokLHNjaGVtYV9wYXRoOlckKFopLG5hbWU6USx0cmFuc2FjdGlvbl9vcGFxdWVfZGF0YTpYPz9udWxsfSk7aWYoIUopcmV0dXJuIG51bGw7bGV0IFc9cFooSiksWT1VWChXLml0ZW1zLFVBKTtyZXR1cm4gWS5sZW5ndGg+MD9ZWzBdOm51bGx9YXN5bmMgc2NoZW1hQ29udGVudHNNYWNyb3MoJCxaLFEsWCl7bGV0IEo9YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19zY2hlbWFfY29udGVudHNfbWFjcm9zIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQscGF0aDpXJChaKSx0eXBlOlEsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6WD8/bnVsbH0pO2lmKCFKKXJldHVybltdO2xldCBXPXBaKEopO3JldHVybiBVWChXLml0ZW1zLFVBKX1hc3luYyBtYWNyb0NyZWF0ZSgkLFosUSxYLEosVyxZLEcsSCx6KXtsZXQgcT1sSih7YXR0YWNoX29wYXF1ZV9kYXRhOlskXSxzY2hlbWFfcGF0aDpbVyQoWildLG5hbWU6W1FdLG1hY3JvX3R5cGU6W1hdLHBhcmFtZXRlcnM6W0pdLGRlZmluaXRpb246W1ddLG9uX2NvbmZsaWN0OltZXSxwYXJhbWV0ZXJfZGVmYXVsdF92YWx1ZXM6W0c/P251bGxdLGFyZ3VtZW50c19zY2hlbWE6W0g/P251bGxdLHRyYW5zYWN0aW9uX29wYXF1ZV9kYXRhOlt6Pz9udWxsXX0seUIpO2F3YWl0IHRoaXMucnBjLmNhbGwoImNhdGFsb2dfbWFjcm9fY3JlYXRlIixsNShxKSl9YXN5bmMgbWFjcm9Ecm9wKCQsWixRLFgsSil7YXdhaXQgdGhpcy5ycGMuY2FsbCgiY2F0YWxvZ19tYWNyb19kcm9wIix7YXR0YWNoX29wYXF1ZV9kYXRhOiQsc2NoZW1hX3BhdGg6VyQoWiksbmFtZTpRLGlnbm9yZV9ub3RfZm91bmQ6WD8/ITEsdHJhbnNhY3Rpb25fb3BhcXVlX2RhdGE6Sj8/bnVsbH0pfWNsb3NlKCl7dGhpcy5ycGMuY2xvc2UoKX19ZnVuY3Rpb24gY0IoJCl7bGV0IFo9W10sUT0wO2ZvcihsZXQgWCBvZiAkLmZpZWxkcyl7bGV0IEo9WC5tZXRhZGF0YSxZPUouZ2V0KFlCKT09PUdCP1gubmFtZTpRKyssRz1KLmdldChLQiksSD1HPT09SEIsej1HPT09ekIscT1KLmdldChxQik9PT1QQixQPUouZ2V0KEZCKT09PU5CLFU9Si5nZXQoVUIpPz8iIixNPUouZ2V0KE1CKSxMPUouZ2V0KExCKSxEPUouZ2V0KEFCKSxSPUouZ2V0KERCKTtaLnB1c2goe25hbWU6WC5uYW1lLHBvc2l0aW9uOlksYXJyb3dUeXBlOlgudHlwZSxpc1RhYmxlSW5wdXQ6SCxpc0FueVR5cGU6eixpc1ZhcmFyZ3M6cSxpc0NvbnN0OlAsZG9jOlUsZGVmYXVsdEpzb246TSxjaG9pY2VzSnNvbjpMLHJhbmdlTm90YXRpb246RCxwYXR0ZXJuOlJ9KX1yZXR1cm4gWn12YXIga3M9QyhbSygibmFtZSIsRigpLCExKSxLKCJkZXNjcmlwdGlvbiIsRigpLCExKSxLKCJ0eXBlIixOKCksITEpLEsoImRlZmF1bHRfdmFsdWUiLE4oKSwhMCksSygicmVxdWlyZWQiLFowKCksITApXSk7ZnVuY3Rpb24gbEIoJCl7bGV0IFo9Wy4uLnk4KEdZKCQpKV1bMF07aWYoWj09PXZvaWQgMCl0aHJvdyBFcnJvcigiQ2Fubm90IGRlc2VyaWFsaXplIEF0dGFjaE9wdGlvblNwZWMgZnJvbSBhbiBlbXB0eSBiYXRjaCIpO2xldCBYPWE1KEs4KFoudHlwZSkpLmZpZWxkc1swXS50eXBlLEosVz1aLmRlZmF1bHRfdmFsdWU7aWYoVyE9bnVsbCl7bGV0IFk9SzgoVyk7aWYoWS5sZW5ndGg+MClKPVsuLi55OChHWShZKSldWzBdPy52YWx1ZX1yZXR1cm57bmFtZTpTdHJpbmcoWi5uYW1lKSxkZXNjcmlwdGlvbjpTdHJpbmcoWi5kZXNjcmlwdGlvbj8/IiIpLHR5cGU6WCwuLi5KPT09dm9pZCAwfHxKPT09bnVsbD97fTp7ZGVmYXVsdDpKfSxyZXF1aXJlZDpaLnJlcXVpcmVkPT09ITB9fWZ1bmN0aW9uIGRCKCQpe3JldHVybiBBcnJheS5mcm9tKCQsbEIpfVI3KCk7ZXhwb3J0e2NCIGFzIHNjaGVtYVRvQXJndW1lbnRTcGVjcyxWNyBhcyBodHRwQ29ubmVjdCxhNSBhcyBkZXNlcmlhbGl6ZVNjaGVtYSxkQiBhcyBkZXNlcmlhbGl6ZUF0dGFjaE9wdGlvblNwZWNzLGQkIGFzIFZnaUNsaWVudEVycm9yLHo5IGFzIFZnaUNsaWVudCxRJCBhcyBUeXBlSWQsY0EgYXMgRnVuY3Rpb25UeXBlfTsK\";\n\nfunction decodeBase64(b64: string): Uint8Array {\n // atob is available on Node >=16, Bun, Deno, and workerd.\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\n/** The vendored VGI browser client bundle, decoded to its raw bytes. */\nexport const CLIENT_BUNDLE_BYTES: Uint8Array = decodeBase64(CLIENT_BUNDLE_B64);\n",
|
|
91
91
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n// The standardized VGI landing surface.\n//\n// This lives here, not in `@query-farm/vgi-rpc`, because everything it serves\n// is VGI vocabulary: a page that renders catalogs, schemas, tables, functions\n// and macros, and the browser build of *this package's* client that reads them\n// over the protocol. vgi-rpc is generic RPC over Arrow and depends on nothing\n// here — yet it used to vendor both assets, which put a compiled artifact of\n// the higher layer inside the lower one and added ~900 KB to every consumer of\n// vgi-rpc, whether or not they served a VGI page. vgi-python already drew the\n// line this way: its landing surface is in `vgi/http/`, and `vgi_rpc/http/` has\n// neither asset.\n//\n// It reaches the request through vgi-rpc's `extraRoutes` hook rather than by\n// wrapping the returned fetch handler, because ordering matters. Contributed\n// routes run at the same pipeline position the surface occupied when it lived\n// inside vgi-rpc — after the OAuth browser-redirect branch, and before the\n// generic landing page and the 404. Wrapping from outside would answer ahead of\n// that redirect, so a worker with OAuth configured would show this page to a\n// browser that should have been sent to its identity provider first.\n//\n// That redirect is the only thing guarding these two routes, and only for\n// browsers: vgi-rpc gates GET pages on `authenticate && pkceConfig`, and a\n// non-browser caller that fails auth falls through to normal page serving. So\n// on a worker with no PKCE configured, the page and the client bundle are\n// public — as the generic landing page always was. Worth knowing before\n// treating anything on this surface as private; vgi-rpc-python is stricter and\n// answers 401 here.\n\nimport type { ExtraRouteContext, ExtraRouteHandler } from \"@query-farm/vgi-rpc\";\nimport { LANDING_HTML_BYTES } from \"./landing-html.js\";\nimport { CLIENT_BUNDLE_BYTES } from \"./client-bundle.js\";\n\n/**\n * Worker identity for the standardized VGI landing surface.\n *\n * The shared `landing.html` reads catalog metadata by speaking the VGI protocol\n * through the client bundle the worker serves beside it, so nothing about the\n * catalog belongs here. What the protocol has no method for — which worker this\n * is, what it is called, what version it runs — rides on the JSON status\n * document at `GET {prefix}/?format=json`.\n */\nexport interface LandingInfo {\n /** Worker name shown as the page heading, e.g. \"ishares\". */\n name: string;\n /** One-line description shown under the heading. */\n doc?: string;\n /** Worker version string shown in the footer. */\n version?: string;\n /** Override the Cupola base URL the \"Explore\" links point at. */\n cupolaBase?: string;\n}\n\n/** Default Cupola deployment the page's \"Explore\" links point at. */\nexport const DEFAULT_CUPOLA_BASE = \"https://cupola.query-farm.services\";\n\n// Caching. Both assets are immutable for a given build but live at URLs that\n// never change, which is the combination that goes wrong quietly: the page used\n// to be served with no Cache-Control and no validator at all, so browsers\n// applied heuristic caching with nothing to revalidate against and could hold a\n// stale page indefinitely — every landing-page fix needed a shift-reload to\n// see. The bundle was worse in a different way: `max-age=3600` with no\n// validator meant a full hour where a client could not learn that a release had\n// happened, which is how a bundle that could not decode workerd's compressed\n// responses stayed live in a browser long after it was fixed.\n//\n// `no-cache` does not mean \"do not store\" — it means \"store, but revalidate\n// before reuse\". With a strong ETag a repeat visit is a conditional GET that\n// answers 304 with no body, so the bandwidth is the same as a long TTL and the\n// staleness window closes to zero. `public` is kept so shared caches (the\n// Cloudflare edge in front of a Workers deployment) can hold and revalidate it\n// too, rather than each viewer paying the full transfer.\nconst REVALIDATE = \"public, no-cache\";\n\n/**\n * FNV-1a over the asset bytes, as a strong ETag.\n *\n * Computed lazily and memoised rather than at module load: most requests to a\n * worker are RPC and never touch these routes, and hashing ~700 KB on every\n * isolate start would tax cold starts for a page nobody may open. Once per\n * isolate on first use is the right trade.\n */\nfunction etagFor(bytes: Uint8Array): string {\n let hash = 0x811c9dc5;\n for (let i = 0; i < bytes.length; i++) {\n hash ^= bytes[i]!;\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n // Length is folded in so two builds that collide on the hash still differ.\n return `\"${hash.toString(16)}-${bytes.length.toString(16)}\"`;\n}\n\nlet landingEtag: string | null = null;\nlet bundleEtag: string | null = null;\n\n/** 304 when the client already holds this exact body, else null. */\nfunction notModified(request: Request, etag: string, extra?: HeadersInit): Response | null {\n const ifNoneMatch = request.headers.get(\"If-None-Match\");\n if (!ifNoneMatch) return null;\n // A conditional GET may list several validators, and a cache is allowed to\n // weaken ours to `W/\"…\"` on the way back.\n const matches = ifNoneMatch\n .split(\",\")\n .map((c) => c.trim().replace(/^W\\//, \"\"))\n .includes(etag);\n if (!matches) return null;\n const headers = new Headers(extra);\n headers.set(\"ETag\", etag);\n headers.set(\"Cache-Control\", REVALIDATE);\n return new Response(null, { status: 304, headers });\n}\n\n/**\n * Build the VGI landing surface as a route contributed to vgi-rpc's HTTP\n * handler.\n *\n * Serves two paths, both relative to the handler's mount prefix:\n *\n * - `GET {prefix}/` — the shared `landing.html` for browsers, or a JSON status\n * document for health checks, `?format=json`, and the page's own identity\n * read. Content negotiation matches vgi-python's `LandingPageResource`.\n * - `GET {prefix}/vgi-client.js` — the browser build the page imports.\n *\n * Anything else returns `null`, which lets normal routing continue.\n */\nexport function createLandingRoutes(info: LandingInfo): ExtraRouteHandler {\n return (request: Request, ctx: ExtraRouteContext): Response | null => {\n const path = ctx.url.pathname;\n const { prefix } = ctx;\n\n if (path === prefix || path === `${prefix}/`) {\n const accept = request.headers.get(\"Accept\") ?? \"\";\n const wantJson =\n ctx.url.searchParams.get(\"format\") === \"json\" ||\n (accept.includes(\"application/json\") && !accept.includes(\"text/html\"));\n if (wantJson) {\n // Rebuilt per request rather than cached: `oauthActive` and `serverId`\n // come from the handler, so this cannot be pre-rendered at construction\n // time the way it was when it lived inside vgi-rpc.\n const body = JSON.stringify({\n status: \"ok\",\n server_id: ctx.serverId,\n protocol: \"vgi\",\n worker: info.name,\n doc: info.doc ?? \"\",\n version: info.version ?? \"\",\n lang: \"typescript\",\n oauth: ctx.oauthActive,\n cupola_base: info.cupolaBase ?? DEFAULT_CUPOLA_BASE,\n });\n const headers = new Headers({ \"Content-Type\": \"application/json\" });\n ctx.addCorsHeaders(headers);\n return new Response(body, { status: 200, headers });\n }\n landingEtag ??= etagFor(LANDING_HTML_BYTES);\n const conditional = notModified(request, landingEtag);\n if (conditional) {\n ctx.addCorsHeaders(conditional.headers);\n return conditional;\n }\n const headers = new Headers({\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": REVALIDATE,\n ETag: landingEtag,\n });\n ctx.addCorsHeaders(headers);\n return new Response(LANDING_HTML_BYTES as unknown as BodyInit, { status: 200, headers });\n }\n\n // Served by the worker rather than from a CDN: this page is same-origin\n // with an authenticated worker and carries its session cookie, so\n // third-party script here would run with full access to that origin — and a\n // CDN dependency would break air-gapped deployments that today need nothing\n // but the worker.\n if (path === `${prefix}/vgi-client.js`) {\n bundleEtag ??= etagFor(CLIENT_BUNDLE_BYTES);\n const conditional = notModified(request, bundleEtag);\n if (conditional) {\n ctx.addCorsHeaders(conditional.headers);\n return conditional;\n }\n const headers = new Headers({\n \"Content-Type\": \"text/javascript; charset=utf-8\",\n \"Cache-Control\": REVALIDATE,\n ETag: bundleEtag,\n });\n ctx.addCorsHeaders(headers);\n return new Response(CLIENT_BUNDLE_BYTES as unknown as BodyInit, { status: 200, headers });\n }\n\n return null;\n };\n}\n",
|
|
92
92
|
"// Type- and scope-aware selection over resolved secrets.\n//\n// Resolved secrets reach a worker as a plain object keyed by each secret's\n// unique DuckDB secret name (so several secrets of the same type — e.g. one per\n// S3 bucket — coexist). Each secret carries its connector-serialized `type` (the\n// DuckDB secret type) and `scope` (newline-joined scope prefixes) fields, plus\n// type-specific fields. These helpers mirror `vgi::Secrets` in the Rust SDK.\n\nexport type SecretFields = Record<string, any>;\nexport type SecretsDict = Record<string, SecretFields>;\n\nfunction scalarStr(v: any): string {\n if (v === null || v === undefined) return \"\";\n return typeof v === \"string\" ? v : String(v);\n}\n\n/** The DuckDB secret type of the named secret (its serialized `type` field). */\nexport function secretType(secrets: SecretsDict, name: string): string | undefined {\n const f = secrets?.[name];\n return f && \"type\" in f ? scalarStr(f.type) : undefined;\n}\n\n/** Every resolved secret whose serialized `type` field matches `type`. */\nexport function secretsOfType(secrets: SecretsDict, type: string): SecretFields[] {\n return Object.values(secrets ?? {}).filter((f) => scalarStr(f.type) === type);\n}\n\n/**\n * The secret whose `scope` is the longest prefix of `path`. The connector\n * serializes each secret's scope as a newline-joined list of prefixes; a secret\n * with no (or empty) scope matches as a last-resort fallback. Returns undefined\n * only when there are no candidate secrets.\n */\nexport function secretForScope(secrets: SecretsDict, path: string): SecretFields | undefined {\n return selectForScope(secrets, path, undefined);\n}\n\n/** Like {@link secretForScope} but only over secrets of `type`. */\nexport function secretForScopeOfType(\n secrets: SecretsDict,\n path: string,\n type: string,\n): SecretFields | undefined {\n return selectForScope(secrets, path, type);\n}\n\nfunction selectForScope(\n secrets: SecretsDict,\n path: string,\n type: string | undefined,\n): SecretFields | undefined {\n let best: SecretFields | undefined;\n let bestLen = -1;\n let fallback: SecretFields | undefined;\n for (const fields of Object.values(secrets ?? {})) {\n if (type !== undefined && scalarStr(fields.type) !== type) continue;\n const scope = scalarStr(fields.scope);\n if (!scope) {\n if (!fallback) fallback = fields;\n continue;\n }\n for (const prefix of scope.split(\"\\n\")) {\n if (prefix && path.startsWith(prefix) && prefix.length > bestLen) {\n bestLen = prefix.length;\n best = fields;\n }\n }\n }\n return best ?? fallback;\n}\n",
|
|
93
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI TypeScript - Public API (runtime-agnostic core)\n//\n// Everything exported from the package EXCEPT the node-only `Worker` (which\n// imports the AF_UNIX launcher's `serveUnix` from @query-farm/vgi-rpc). This\n// module must stay free of static node-only value imports so it can be bundled\n// for Cloudflare Workers / browsers via worker-cf-entry.ts. The node/bun barrel\n// (`./index.ts`) re-exports this plus `Worker`.\n\n// Result-cache control vocabulary (`vgi.cache.*`)\nexport {\n CACHE_ETAG_KEY,\n CACHE_EXPIRES_KEY,\n CACHE_IF_MODIFIED_SINCE_KEY,\n CACHE_IF_NONE_MATCH_KEY,\n CACHE_LAST_MODIFIED_KEY,\n CACHE_NO_STORE_KEY,\n CACHE_NOT_MODIFIED_KEY,\n CACHE_PARTITION_SCOPE_KEY,\n CACHE_PER_VALUE_KEY,\n CACHE_REVALIDATABLE_KEY,\n CACHE_SCOPE_CATALOG,\n CACHE_SCOPE_KEY,\n CACHE_SCOPE_TRANSACTION,\n CACHE_STALE_IF_ERROR_KEY,\n CACHE_STALE_WHILE_REVALIDATE_KEY,\n CACHE_TTL_KEY,\n type CacheControl,\n cacheControlMetadata,\n type CacheScope,\n} from \"./cache-control.js\";\n\n// Function factories (primary API)\nexport { defineScalarFunction, type ScalarFunctionConfig, type ScalarBindParameters, type ScalarParameterDef } from \"./functions/scalar.js\";\nexport { defineTableFunction, type TableFunctionConfig, type TableBindParams, type TableProcessParams } from \"./functions/table.js\";\nexport {\n defineAggregate,\n GROUP_COLUMN_NAME,\n type AggregateFunctionConfig,\n type AggregateBindParams,\n type AggregateUpdateParams,\n type AggregateFinalizeParams,\n} from \"./functions/aggregate.js\";\nexport {\n defineTableInOutFunction,\n defineRowTransformFunction,\n parentRowsMetadata,\n PARENT_ROW_METADATA_KEY,\n type TableInOutConfig,\n type TableInOutBindParams,\n type TableInOutProcessParams,\n type RowTransformConfig,\n type RowTransformProcessParams,\n} from \"./functions/table-in-out.js\";\nexport {\n defineTableBufferingFunction,\n type TableBufferingConfig,\n type TableBufferingBindParams,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./functions/table-buffering.js\";\nexport {\n defineCopyFromFunction,\n type CopyFromFunctionConfig,\n type CopyFromOption,\n type CopyFromReadParams,\n} from \"./functions/copy-from.js\";\nexport {\n defineCopyToFunction,\n type CopyToFunctionConfig,\n type CopyToOption,\n type CopyToWriteParams,\n type CopyToCloseParams,\n} from \"./functions/copy-to.js\";\n\n// Function types\nexport type { VgiFunction, FunctionMeta, StreamHandlers, FunctionExample, HandlerState } from \"./functions/types.js\";\n\n// Catalog\nexport { CatalogInterface, type CatalogAttachResult, type CatalogAttachResultInit, buildCatalogAttachResult, type SchemaContentsInfo, type CatalogContentsResult, type SchemaInfo, encodeSchemaInfo, decodeSchemaInfo, type TableInfo, encodeTableInfo, decodeTableInfo, type ViewInfo, encodeViewInfo, decodeViewInfo, type CatalogInfo, encodeCatalogInfo, decodeCatalogInfo, type FunctionInfo, encodeFunctionInfo, decodeFunctionInfo, type FunctionInfoOptions, type MacroInfo, encodeMacroInfo, decodeMacroInfo, type MacroType, type CopyFromFormatInfo, encodeCopyFromFormatInfo, type AttachOpaqueData, type TransactionOpaqueData, buildScanBranchesResult, encodeFormatOptions, type ScanBranchInput } from \"./catalog/interface.js\";\nexport type { CatalogDescriptor, SchemaDescriptor, TableDescriptor, ViewDescriptor, MacroDescriptor, SettingDescriptor, SecretTypeDescriptor, ForeignKeyDef, DefaultValue } from \"./catalog/descriptors.js\";\nexport { ReadOnlyCatalogInterface, READ_ONLY_ITEM_ATTACH_ID } from \"./catalog/read-only.js\";\nexport { CompositeCatalogInterface } from \"./catalog/composite.js\";\nexport { FunctionRegistry } from \"./functions/registry.js\";\n\n// Core types\nexport {\n FunctionType,\n FunctionStability,\n NullHandling,\n ArgumentMonotonicity,\n OrderPreservation,\n OrderDependence,\n DistinctDependence,\n TableInOutPhase,\n DEFAULT_MAX_WORKERS,\n} from \"./types.js\";\n\n// Protocol types\nexport type {\n BindRequest,\n BindResponse,\n CopyFromContext,\n CopyToContext,\n InitRequest,\n GlobalInitResponse,\n TableCardinality,\n} from \"./protocol/types.js\";\n\n// Arguments\nexport { Arguments } from \"./arguments/arguments.js\";\nexport { type ArgumentSpec, type ArgumentConstraints, argumentSpecsToSchema, schemaToArgumentSpecs, macroArgumentsSchema, macroParameterDocsFromSchema, formatRange, constraintSpecFields } from \"./arguments/argument-spec.js\";\n\n// Errors\nexport {\n VgiError,\n RowCountMismatchError,\n FunctionNotFoundError,\n CatalogReadOnlyError,\n CatalogNotFoundError,\n CatalogAlreadyExistsError,\n ArgumentValidationError,\n NoCatalogError,\n} from \"./errors.js\";\n\n// Metadata\nexport type { ResolvedMetadata, ParameterInfo } from \"./metadata/types.js\";\nexport { CatalogFunctionType } from \"./metadata/types.js\";\nexport { resolveMetadata } from \"./metadata/resolve.js\";\nexport { metadatasToArrow, arrowToMetadatas } from \"./metadata/serialize.js\";\n\n// Filter pushdown\nexport {\n PushdownFilters,\n FilteringOutputCollector,\n deserializeFilters,\n buildJoinKeysLookup,\n ComparisonOp,\n type Filter,\n type ConstantFilter,\n type IsNullFilter,\n type IsNotNullFilter,\n type InFilter,\n type AndFilter,\n type OrFilter,\n type StructFilter,\n formatPushedFilters,\n reprPushedFilters,\n} from \"./filter-pushdown/index.js\";\n\n// State serializer\nexport { arrowStateSerializer, EXCHANGE_STATE_SCHEMA, serializeUserState, deserializeUserState } from \"./protocol/state-serializer.js\";\n\n// Protocol assembly (for embedding the worker dispatcher in a custom HTTP server).\nexport { buildVgiProtocol, type ProtocolConfig } from \"./protocol/dispatch.js\";\n\n// VGI HTTP landing surface. The shared landing.html reads catalog metadata by\n// speaking the protocol through the client bundle the worker serves beside it,\n// so a worker supplies only its own identity via `createHttpHandler`'s\n// `landingInfo` option.\nexport type { LandingInfo } from \"./http/landing.js\";\nexport { createLandingRoutes } from \"./http/landing.js\";\n\n// Wire schemas — needed by workers that synthesize TableInfo.bind_result /\n// TableInfo.scan_function bytes to short-circuit per-scan RPCs.\nexport { BindResultSchema, ScanFunctionResultSchema } from \"./generated/vgi-protocol-schemas.js\";\n\n// Attach-option specs (for catalogs that advertise typed ATTACH options).\nexport { type AttachOptionSpec, serializeAttachOptionSpec, serializeAttachOptionSpecs, deserializeAttachOptionSpec, deserializeAttachOptionSpecs } from \"./catalog/attach-option.js\";\n\n// Column statistics (for inlining on TableInfo.column_statistics).\nexport { type ColumnStatistics, serializeColumnStatistics } from \"./util/statistics.js\";\n\n// Byte utilities\nexport { toUint8Array } from \"./util/bytes.js\";\n\n// Arrow utilities\nexport {\n iterRows,\n batchFromRows,\n batchFromColumns,\n emptyBatch,\n filterBatch,\n projectSchema,\n projectBatch,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n} from \"./util/arrow/index.js\";\n\nexport {\n type SecretFields,\n type SecretsDict,\n secretType,\n secretsOfType,\n secretForScope,\n secretForScopeOfType,\n} from \"./secrets/helpers.js\";\n\nexport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"./util/arrow/index.js\";\n\n// Arrow type system (phase 3): typed factories, precise descriptors, the\n// rich/raw value mapping, the codec registry, and branded raw scalar types\n// with their validating constructors. This is the statically-typed author API.\n// NOTE: the arrow factory names `int`, `int32`, `float32`, `bool` are NOT\n// re-exported here because the package root already exports vgi-rpc argument\n// builders of the same names. Authors needing those specific arrow factories\n// (and the full typed factory set) import them from the arrow facade module\n// (`@query-farm/vgi` -> \"./src/arrow/index.js\"). The non-colliding and\n// unit-precise factories below cover the common phase-3 typed/raw-mode cases.\nexport {\n // typed type factories (non-colliding subset)\n schema, field,\n nullType,\n int8, int16, int64,\n uint8, uint16, uint32, uint64,\n float16, float64,\n utf8, largeUtf8, binary, largeBinary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n timestampSeconds, timestampMillis, timestampMicros, timestampNanos,\n durationSeconds, durationMillis, durationMicros, durationNanos,\n list, fixedSizeList, struct, map,\n dictionary, union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n // codec registry\n codecFor,\n // branded raw constructors / unwrappers\n asDate32, asDate64Ms,\n asTime32S, asTime32Ms, asTime64Us, asTime64Ns,\n asTimestampSeconds, asTimestampMillis, asTimestampMicros, asTimestampNanos,\n asDurationSeconds, asDurationMillis, asDurationMicros, asDurationNanos,\n asUnscaledDecimal, asInt64, asUint64,\n fromBranded, fromBrandedNumber, fromBrandedBigInt,\n // backend-agnostic predicates + ids\n TypeId,\n isNull, isInt, isFloat, isBinary, isUtf8, isBool, isDecimal, isDate,\n isTime, isTimestamp, isInterval, isList, isStruct, isUnion,\n isFixedSizeBinary, isFixedSizeList, isMap, isDuration, isDictionary, isBatch,\n typeSignature,\n readCanonicalValue, columnFromArray, decodeDictValue, backend,\n adoptArrowJsShape,\n} from \"./arrow/index.js\";\n\nexport type {\n // backend-agnostic Arrow types\n VgiTypeId, VgiDataType, VgiField, VgiSchema, VgiColumn, VgiColumnData,\n VgiBatch, VgiBackendInfo, TaggedUnion,\n // precise nominal descriptors\n NullDescriptor, BoolType,\n IntType, Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n FloatType, Utf8Type, LargeUtf8Type, BinaryType, LargeBinaryType,\n FixedSizeBinaryType, DecimalType,\n Date32Type, Date64Type, Time32Type, Time64Type,\n TimestampType, DurationType, IntervalType,\n ListType, FixedSizeListType, StructType, MapType, DictionaryType, UnionType,\n TypedField, TUnit,\n // rich/raw mapping\n RichValue, RawValue, ValueFor, Repr,\n // codec\n Codec,\n // branded scalar aliases\n Branded,\n Date32, Date64Ms,\n Time32S, Time32Ms, Time64Us, Time64Ns,\n TimestampSeconds, TimestampMillis, TimestampMicros, TimestampNanos,\n DurationSeconds, DurationMillis, DurationMicros, DurationNanos,\n UnscaledDecimal, Int64Raw, Uint64Raw,\n} from \"./arrow/index.js\";\n\n// Typed scalar compute helper types (phase 3).\nexport type { ScalarComputeRow, ScalarOutputValue, ScalarComputeResult } from \"./functions/scalar.js\";\n\n// Storage\nexport {\n type FunctionStorage,\n type WorkerStateKey,\n FunctionStorageSqlite,\n BoundStorage,\n UnknownInvocationError,\n resolveStorageFromEnv,\n setStorage,\n storage as functionStorage,\n} from \"./functions/storage.js\";\nexport { FunctionStorageCfDo, type FetchLike } from \"./functions/storage-cf-do.js\";\n\n// Client\nexport { VgiClient, VgiClientError } from \"./client/client.js\";\nexport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType as ClientCatalogFunctionType,\n CatalogAttachOptions,\n AttachOptionValue,\n} from \"./client/types.js\";\n\n// Re-export from vgi-rpc for convenience\nexport { str, bytes, int, int32, float, float32, bool, toSchema, OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nexport { subprocessConnect, httpConnect, tcpConnect } from \"@query-farm/vgi-rpc\";\nexport type { RpcClient, StreamSession, LogMessage } from \"@query-farm/vgi-rpc\";\n\n// Hosting additional protocols and opting into vgi_rpc.Identity.v1. The errors\n// are re-exported so a worker's resolveToken/mintGrant can throw the right one:\n// AuthUnavailableError (or IdentityUnavailableError) for \"could not find out\",\n// GrantRefusedError to decline a grant.\nexport {\n buildRpcServer,\n INTROSPECT_PRINCIPALS_ENV,\n type BuildRpcServerOptions,\n type HostingOptions,\n type ServerTransport,\n} from \"./rpc-server.js\";\nexport {\n AuthUnavailableError,\n GrantRefusedError,\n IdentityUnavailableError,\n StatusError,\n} from \"@query-farm/vgi-rpc\";\nexport type { GrantMinter, IssuedGrant, TokenIdentity, TokenResolver } from \"@query-farm/vgi-rpc\";\nexport { normalizeSchemaPath, schemaPathDisplay, schemaPathKey, schemaPathsEqual, type SchemaPath } from \"./schema-path.js\";\n",
|
|
94
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VgiClient — high-level client for calling VGI worker functions and catalog API.\n// Works with any RpcClient (subprocess or HTTP transport).\n\nimport { type VgiSchema, schema as schema_, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, list } from \"../arrow/index.js\";\n// `import type`, not `import { type … }`: the latter keeps the statement and\n// emits `import {} from \"@query-farm/vgi-rpc\"`, a side-effect import of the\n// package root — which re-exports the whole framework, server included, into\n// every browser bundle. See the note in ./errors.\nimport type { RpcClient, StreamSession } from \"@query-farm/vgi-rpc\";\nimport {\n serializeBindRequest,\n deserializeBindResponse,\n serializeInitRequest,\n deserializeGlobalInitResponse,\n} from \"../protocol/serialize.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport { FunctionType, TableInOutPhase } from \"../types.js\";\nimport { Arguments } from \"../arguments/arguments.js\";\nimport {\n batchFromRows,\n batchFromColumns,\n iterRows,\n} from \"../util/arrow/index.js\";\nimport {\n type SchemaInfo,\n decodeSchemaInfo,\n type TableInfo,\n decodeTableInfo,\n type ViewInfo,\n decodeViewInfo,\n type FunctionInfo,\n decodeFunctionInfo,\n type MacroInfo,\n decodeMacroInfo,\n type MacroType,\n type CatalogAttachResult,\n type SchemaContentsInfo,\n decodeIndexInfo,\n type AttachOpaqueData,\n type TransactionOpaqueData,\n decodeCatalogInfo,\n type CatalogInfo,\n type ScanFunctionResult,\n decodeScanFunctionResult,\n} from \"../catalog/interface.js\";\nimport { wrapRequest, unwrapResult } from \"./protocol.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport { serializeAttachOptions } from \"../catalog/attach-options.js\";\nimport { VgiClientError, wrapRpcWithErrorEnrichment } from \"./errors.js\";\nimport { normalizeSchemaPath } from \"../schema-path.js\";\nimport { encodeASD } from \"../codec/asd.js\";\nimport { ClientCapabilitiesSchema, MacroCreateRequestSchema } from \"../generated/vgi-protocol-schemas.js\";\nimport { decodeCatalogContentsResponse } from \"../generated/vgi-protocol-types.js\";\nimport { deserializeInfoList, deserializeTags, toAsyncIterator } from \"./helpers.js\";\n\nexport { VgiClientError };\nimport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType,\n CatalogMacroType,\n CatalogAttachOptions,\n OrderByPushdown,\n TablesamplePushdown,\n AttachOptionValue,\n} from \"./types.js\";\n\n/**\n * High-level client for calling VGI worker functions and catalog API.\n *\n * Works with any RpcClient transport (subprocess or HTTP):\n * ```ts\n * import { subprocessConnect } from \"@query-farm/vgi-rpc\";\n * import { VgiClient, Arguments } from \"@query-farm/vgi\";\n *\n * const rpc = subprocessConnect([\"./my-worker\"]);\n * const client = new VgiClient(rpc);\n *\n * for await (const rows of client.tableFunctionRows({\n * functionName: \"sequence\",\n * arguments: new Arguments([10]),\n * })) {\n * console.log(rows);\n * }\n * client.close();\n * ```\n */\nexport class VgiClient {\n private readonly rpc: RpcClient;\n private readonly defaultAttachOpaqueData: Uint8Array | null;\n\n /**\n * Construct a VgiClient wrapping an `RpcClient` transport.\n *\n * `options.attachOpaqueData` sets a client-wide default attach ID used by every\n * function call that doesn't supply its own. Per-call `attachOpaqueData` on\n * `TableFunctionOptions`/`ScalarFunctionOptions`/`TableInOutFunctionOptions`\n * takes precedence — useful when a single client talks to multiple\n * attached catalogs.\n */\n constructor(rpc: RpcClient, options?: VgiClientOptions) {\n this.rpc = wrapRpcWithErrorEnrichment(rpc);\n this.defaultAttachOpaqueData = options?.attachOpaqueData ?? null;\n }\n\n /**\n * Connect the high-level client to a canonical `iroh://` or `httpi://`\n * endpoint. Native Node/Bun connectors are selected from the URI scheme.\n * Browser callers may inject the connector exported by the browser Iroh\n * package without changing the VGI client API.\n */\n static async fromIroh(\n endpoint: string,\n options: Record<string, unknown> = {},\n clientOptions?: VgiClientOptions,\n connector?: (endpoint: string, options: Record<string, unknown>) => Promise<RpcClient>,\n ): Promise<VgiClient> {\n if (!/^(iroh|httpi):\\/\\//.test(endpoint)) {\n throw new TypeError(\"VgiClient.fromIroh requires an iroh:// or httpi:// endpoint\");\n }\n let selected = connector;\n if (!selected) {\n const rpc = await import(\"@query-farm/vgi-rpc\");\n selected = endpoint.startsWith(\"iroh://\")\n ? (rpc.irohConnect as unknown as NonNullable<typeof selected>)\n : (rpc.httpiConnect as unknown as NonNullable<typeof selected>);\n }\n if (!selected) throw new TypeError(\"no Iroh connector is available in this runtime\");\n return new VgiClient(await selected(endpoint, options), clientOptions);\n }\n\n // ==========================================================================\n // Private helpers\n // ==========================================================================\n\n private async _doBind(\n functionName: string,\n functionType: FunctionType,\n args: Arguments,\n inputSchema: VgiSchema | null,\n settings: VgiBatch | null,\n secrets: VgiBatch | null,\n transactionOpaqueData: Uint8Array | null,\n attachOpaqueData: Uint8Array | null = null,\n onBind?: ((response: BindResponse) => void) | null,\n ): Promise<{ request: BindRequest; response: BindResponse }> {\n const request: BindRequest = {\n function_name: functionName,\n arguments: args,\n function_type: functionType,\n input_schema: inputSchema,\n settings: settings ?? null,\n secrets: secrets ?? null,\n attach_opaque_data: attachOpaqueData ?? this.defaultAttachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n resolved_secrets_provided: false,\n };\n\n const requestBatch = serializeBindRequest(request);\n const rpcResult = await this.rpc.call(\"bind\", wrapRequest(requestBatch));\n if (!rpcResult) throw new VgiClientError(\"bind returned null\");\n const inner = unwrapResult(rpcResult);\n const response = deserializeBindResponse(inner);\n if (onBind) onBind(response);\n return { request, response };\n }\n\n private async _doInit(\n bindRequest: BindRequest,\n bindResponse: BindResponse,\n opts?: {\n projectionIds?: number[] | null;\n pushdownFilters?: VgiBatch | null;\n phase?: TableInOutPhase | null;\n executionId?: Uint8Array | null;\n orderBy?: OrderByPushdown | null;\n tablesample?: TablesamplePushdown | null;\n joinKeys?: VgiBatch[] | null;\n },\n ): Promise<{ session: StreamSession; initResponse: GlobalInitResponse }> {\n const ob = opts?.orderBy ?? null;\n const ts = opts?.tablesample ?? null;\n const initRequest: InitRequest = {\n bind_call: bindRequest,\n output_schema: bindResponse.output_schema,\n bind_opaque_data: bindResponse.opaque_data,\n // This client does not plan scans, so it never redeems a split, and it\n // pushes no limit down.\n split_tokens: null,\n row_limit: null,\n projection_ids: opts?.projectionIds ?? null,\n pushdown_filters: opts?.pushdownFilters ?? null,\n join_keys: opts?.joinKeys ?? [],\n phase: opts?.phase ?? null,\n finalize_state_id: null,\n order_by_column_name: ob?.columnName ?? null,\n order_by_direction: ob?.direction ?? null,\n order_by_null_order: ob?.nullOrder ?? null,\n order_by_limit: ob?.limit == null ? null : BigInt(ob.limit),\n tablesample_percentage: ts?.percentage ?? null,\n tablesample_seed: ts?.seed == null ? null : BigInt(ts.seed),\n execution_id: opts?.executionId ?? null,\n init_opaque_data: null,\n substream_id: null,\n };\n\n const initBatch = serializeInitRequest(initRequest);\n const session = await this.rpc.stream(\"init\", wrapRequest(initBatch));\n\n const headerDict = session.header;\n if (!headerDict) throw new VgiClientError(\"init did not return a header\");\n const initResponse = deserializeGlobalInitResponse(headerDict);\n\n return { session, initResponse };\n }\n\n // ==========================================================================\n // Table function — RecordBatch API\n // ==========================================================================\n\n /** Call a table function, yielding output as RecordBatch instances. */\n async *tableFunction(\n opts: TableFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n\n const outputSchema = bindResp.output_schema;\n try {\n for await (const rows of session) {\n if (rows.length > 0) {\n yield batchFromRows(rows, outputSchema);\n }\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Scalar function\n // ==========================================================================\n\n /** Call a scalar function, yielding output as row objects. */\n async *scalarFunctionRows(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n // Peek first batch to get input schema\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n\n try {\n // Exchange first batch\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n // Exchange remaining batches\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n session.close();\n }\n }\n\n /** Call a scalar function, yielding output as RecordBatch instances. */\n async *scalarFunction(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n // Same path as scalarFunctionRows, but with the output schema captured\n // here so we can pack rows back into batches without a re-bind.\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Table-in-out function\n // ==========================================================================\n\n /** Call a table-in-out function, yielding output as row objects. */\n async *tableInOutFunctionRows(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE, // table-in-out uses TABLE function type at the bind level\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n // Phase 1: INPUT. We keep the init response around for its `execution_id`,\n // which we must echo back to pair the FINALIZE phase with this call.\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n inputSession.close();\n }\n\n // Phase 2: FINALIZE — skipped entirely for a function with no finalize stage.\n if (opts.hasFinalize === false) return;\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n /** Call a table-in-out function, yielding output as RecordBatch instances. */\n async *tableInOutFunction(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n inputSession.close();\n }\n\n // FINALIZE — skipped entirely for a function with no finalize stage.\n if (opts.hasFinalize === false) return;\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield batchFromRows(rows, outputSchema);\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n // ==========================================================================\n // Row convenience for table function\n // ==========================================================================\n\n /** Call a table function, yielding output as row objects. */\n async *tableFunctionRows(\n opts: TableFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const args = opts.arguments ?? new Arguments();\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n try {\n for await (const rows of session) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Catalog API\n // ==========================================================================\n\n /**\n * List all catalogs with their advertised version metadata.\n *\n * Each entry has `{name, implementation_version?, data_version_spec?}`.\n * Versioned workers populate the version fields; read-only workers\n * leave both null.\n */\n async catalogsInfo(): Promise<CatalogInfo[]> {\n const result = await this.rpc.call(\"catalog_catalogs\", {});\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeCatalogInfo);\n }\n\n /** List all available catalog names (shorthand for `catalogsInfo().map(c => c.name)`). */\n async catalogs(): Promise<string[]> {\n const infos = await this.catalogsInfo();\n return infos.map((i) => i.name);\n }\n\n /**\n * Attach a catalog by name. Returns connection details including the\n * attachOpaqueData.\n *\n * `opts.options` is a plain key→value map; column types are inferred from\n * the value at runtime (see AttachOptionValue for the mapping). Use\n * `opts.optionsBytes` instead when you need Arrow types the inference\n * can't express (Decimal, Timestamp, Int32 vs Int64, nested structs).\n * Providing both throws.\n *\n * Versioned catalogs (see vgi-example-versioned-worker) validate\n * `dataVersionSpec` / `implementationVersion` at attach time and echo\n * back the resolved values on the result — callers can read those from\n * `result.resolved_data_version` / `result.resolved_implementation_version`.\n *\n * @example\n * ```ts\n * const result = await client.catalogAttach(\"my_catalog\", {\n * options: { region: \"us-east-1\", maxCachedRows: 1000n, readOnly: true },\n * dataVersionSpec: \"1.0.0\",\n * });\n * ```\n */\n async catalogAttach(\n name: string,\n opts?: CatalogAttachOptions,\n ): Promise<CatalogAttachResult> {\n if (opts?.options != null && opts?.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogAttach: cannot specify both `options` and `optionsBytes`\",\n );\n }\n let wireOptions: Uint8Array | null;\n if (opts?.optionsBytes != null) {\n // Escape hatch: raw pre-serialized bytes. Same zero-byte guard as\n // before — pyarrow's IPC reader rejects 0-byte input on a non-null\n // binary field.\n wireOptions = opts.optionsBytes.byteLength === 0 ? null : opts.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(opts?.options);\n }\n\n const schema = schema_([\n field(\"name\", utf8(), false),\n field(\"options\", binary(), true),\n field(\"data_version_spec\", utf8(), true),\n field(\"implementation_version\", utf8(), true),\n field(\"client_capabilities\", binary(), true),\n ]);\n const innerBatch = batchFromColumns(\n {\n name: [name],\n options: [wireOptions],\n data_version_spec: [opts?.dataVersionSpec ?? null],\n implementation_version: [opts?.implementationVersion ?? null],\n client_capabilities: [opts?.clientCapabilities\n ? encodeASD(ClientCapabilitiesSchema, opts.clientCapabilities)\n : null],\n },\n schema,\n );\n const result = await this.rpc.call(\"catalog_attach\", wrapRequest(innerBatch));\n if (!result) throw new VgiClientError(\"catalog_attach returned null\");\n const inner = unwrapResult(result);\n return {\n attach_opaque_data: toUint8Array(inner.attach_opaque_data),\n supports_transactions: inner.supports_transactions ?? false,\n supports_time_travel: inner.supports_time_travel ?? false,\n catalog_version_frozen: inner.catalog_version_frozen ?? false,\n catalog_version: Number(inner.catalog_version ?? 0),\n attach_opaque_data_required: inner.attach_opaque_data_required ?? true,\n default_schema: inner.default_schema ?? \"main\",\n settings: inner.settings\n ? (Array.isArray(inner.settings) ? inner.settings : [...inner.settings]).map(toUint8Array)\n : [],\n secret_types: inner.secret_types\n ? (Array.isArray(inner.secret_types) ? inner.secret_types : [...inner.secret_types]).map(toUint8Array)\n : [],\n attach_catalogs: inner.attach_catalogs\n ? (Array.isArray(inner.attach_catalogs) ? inner.attach_catalogs : [...inner.attach_catalogs]).map(toUint8Array)\n : [],\n comment: inner.comment ?? null,\n tags: deserializeTags(inner.tags),\n supports_column_statistics: inner.supports_column_statistics ?? false,\n global_functions: inner.global_functions\n ? (Array.isArray(inner.global_functions) ? inner.global_functions : [...inner.global_functions]).map(toUint8Array)\n : [],\n global_function_prefix: inner.global_function_prefix ?? \"\",\n resolved_data_version: inner.resolved_data_version ?? null,\n resolved_implementation_version: inner.resolved_implementation_version ?? null,\n supports_catalog_contents: inner.supports_catalog_contents ?? false,\n };\n }\n\n /**\n * Load the whole catalog in one `catalog_contents` call: every schema (parents\n * before children) with all of its tables, views, functions, macros and\n * indexes. Only call it when the attach result set\n * `supports_catalog_contents`; it is the committed catalog at\n * `catalog_version` (no transaction).\n *\n * Pass the `etag` of a snapshot you hold as `ifNoneMatch`: when it is still\n * current the worker answers `not_modified` with no schemas. `etag` null\n * means the worker does not revalidate. Each schema's wire `path` is checked\n * against its decoded `SchemaInfo.path`.\n */\n async catalogContents(\n attachOpaqueData: AttachOpaqueData,\n ifNoneMatch: string | null = null,\n ): Promise<{ catalog_version: number; etag: string | null; not_modified: boolean; schemas: SchemaContentsInfo[] }> {\n const result = await this.rpc.call(\"catalog_contents\", {\n attach_opaque_data: attachOpaqueData,\n if_none_match: ifNoneMatch,\n });\n if (!result) throw new VgiClientError(\"catalog_contents returned null\");\n const response = decodeCatalogContentsResponse(toUint8Array(result.result));\n const schemas = response.schemas.map((c) => {\n const schema = decodeSchemaInfo(c.schema);\n if (JSON.stringify(c.path) !== JSON.stringify(schema.path)) {\n throw new VgiClientError(\n `catalog_contents: SchemaContents.path ${JSON.stringify(c.path)} != SchemaInfo.path ${JSON.stringify(schema.path)}`,\n );\n }\n return {\n schema,\n tables: c.tables.map(decodeTableInfo),\n views: c.views.map(decodeViewInfo),\n scalar_functions: c.scalar_functions.map(decodeFunctionInfo),\n aggregate_functions: c.aggregate_functions.map(decodeFunctionInfo),\n table_functions: c.table_functions.map(decodeFunctionInfo),\n scalar_macros: c.scalar_macros.map(decodeMacroInfo),\n table_macros: c.table_macros.map(decodeMacroInfo),\n indexes: c.indexes.map(decodeIndexInfo),\n };\n });\n return {\n catalog_version: Number(response.catalog_version ?? 0),\n etag: response.etag ?? null,\n not_modified: Boolean(response.not_modified),\n schemas,\n };\n }\n\n /** Detach a previously-attached catalog. */\n async catalogDetach(attachOpaqueData: AttachOpaqueData): Promise<void> {\n await this.rpc.call(\"catalog_detach\", { attach_opaque_data: attachOpaqueData });\n }\n\n /**\n * Create a new catalog.\n *\n * `options` is a plain key→value map; column types are inferred from the\n * value at runtime (see AttachOptionValue). Use `optionsBytes` instead\n * when you need Arrow types the inference can't express. Providing both\n * throws.\n */\n async catalogCreate(\n name: string,\n onConflict: OnCreateConflict,\n options?:\n | Uint8Array\n | { options?: Record<string, AttachOptionValue>; optionsBytes?: Uint8Array },\n ): Promise<void> {\n let wireOptions: Uint8Array | null;\n if (options == null) {\n wireOptions = null;\n } else if (options instanceof Uint8Array) {\n // Backwards-compatible escape hatch: caller pre-serialized the options batch.\n wireOptions = options.byteLength === 0 ? null : options;\n } else {\n if (options.options != null && options.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogCreate: cannot specify both `options` and `optionsBytes`\",\n );\n }\n if (options.optionsBytes != null) {\n wireOptions = options.optionsBytes.byteLength === 0 ? null : options.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(options.options);\n }\n }\n await this.rpc.call(\"catalog_create\", {\n name,\n on_conflict: onConflict,\n options: wireOptions,\n });\n }\n\n /** Drop a catalog by name. */\n async catalogDrop(name: string): Promise<void> {\n await this.rpc.call(\"catalog_drop\", { name });\n }\n\n /** Get the current catalog version number. */\n async catalogVersion(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<number> {\n const result = await this.rpc.call(\"catalog_version\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"catalog_version returned null\");\n const inner = unwrapResult(result);\n return Number(inner.version ?? 0);\n }\n\n /** Begin a new transaction. Returns the transaction ID. */\n async transactionBegin(attachOpaqueData: AttachOpaqueData): Promise<Uint8Array> {\n const result = await this.rpc.call(\"catalog_transaction_begin\", {\n attach_opaque_data: attachOpaqueData,\n });\n if (!result) throw new VgiClientError(\"transaction_begin returned null\");\n const inner = unwrapResult(result);\n if (!inner.transaction_opaque_data) {\n throw new VgiClientError(\"transaction_begin returned no transaction_opaque_data\");\n }\n return toUint8Array(inner.transaction_opaque_data);\n }\n\n /** Commit a transaction. */\n async transactionCommit(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_commit\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** Rollback a transaction. */\n async transactionRollback(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_rollback\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** List schemas in an attached catalog. */\n async schemas(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo[]> {\n const result = await this.rpc.call(\"catalog_schemas\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeSchemaInfo);\n }\n\n /** Get a schema by name, or null if not found. */\n async schemaGet(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo | null> {\n const result = await this.rpc.call(\"catalog_schema_get\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeSchemaInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new schema. */\n async schemaCreate(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n opts?: {\n onConflict?: OnCreateConflict;\n comment?: string | null;\n tags?: Record<string, string> | null;\n transactionOpaqueData?: TransactionOpaqueData;\n },\n ): Promise<void> {\n const tagsMap = opts?.tags\n ? new Map(Object.entries(opts.tags))\n : null;\n await this.rpc.call(\"catalog_schema_create\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n on_conflict: opts?.onConflict ?? \"error\",\n comment: opts?.comment ?? null,\n tags: tagsMap,\n transaction_opaque_data: opts?.transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a schema by name. */\n async schemaDrop(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_schema_drop\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** List tables in a schema. */\n async schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_tables\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeTableInfo);\n }\n\n /** List views in a schema. */\n async schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_views\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeViewInfo);\n }\n\n /** List functions in a schema, filtered by type. */\n async schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n type: CatalogFunctionType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<FunctionInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_functions\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeFunctionInfo);\n }\n\n /** Get a table by name, or null if not found. */\n async tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo | null> {\n const result = await this.rpc.call(\"catalog_table_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeTableInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new table. */\n async tableCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columns: Uint8Array,\n onConflict: OnCreateConflict,\n notNullConstraints?: number[],\n uniqueConstraints?: number[][],\n checkConstraints?: string[],\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n columns,\n on_conflict: onConflict,\n not_null_constraints: notNullConstraints ?? null,\n unique_constraints: uniqueConstraints ?? null,\n check_constraints: checkConstraints ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a table by name. */\n async tableDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Get the scan function for a table — tells DuckDB which function to call\n * to read the table data (e.g. `read_parquet` with a path argument). Used\n * by the VGI extension during query planning.\n */\n async tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n atUnit?: string | null,\n atValue?: string | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ScanFunctionResult> {\n const result = await this.rpc.call(\"catalog_table_scan_function_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n at_unit: atUnit ?? null,\n at_value: atValue ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"table_scan_function_get returned null\");\n return decodeScanFunctionResult(unwrapResult(result));\n }\n\n /** Set or clear the comment on a table. */\n async tableCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a table. */\n async tableRename(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Add a column to a table. */\n async tableColumnAdd(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n columnType: string,\n defaultValue?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_add\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n column_type: columnType,\n default_value: defaultValue ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a column from a table. */\n async tableColumnDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a column in a table. */\n async tableColumnRename(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set the default value for a column. */\n async tableColumnDefaultSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n defaultValue: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n default_value: defaultValue,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove the default value from a column. */\n async tableColumnDefaultDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Change the type of a column.\n *\n * `columnDefinition` is a serialized Arrow Schema with a single field whose\n * name identifies the target column and whose type is the new column type.\n * `expression` is an optional SQL expression used to convert existing values.\n */\n async tableColumnTypeChange(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnDefinition: Uint8Array,\n expression?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_type_change\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_definition: columnDefinition,\n expression: expression ?? null,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set a NOT NULL constraint on a column. */\n async tableNotNullSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove a NOT NULL constraint from a column. */\n async tableNotNullDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Get a view by name, or null if not found. */\n async viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo | null> {\n const result = await this.rpc.call(\"catalog_view_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeViewInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new view. */\n async viewCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n definition: string,\n onConflict: OnCreateConflict,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n definition,\n on_conflict: onConflict,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a view by name. */\n async viewDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a view. */\n async viewRename(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set or clear the comment on a view. */\n async viewCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n // ==========================================================================\n // Macro Catalog API\n // ==========================================================================\n\n /** Get a macro by name, or null if not found. */\n async macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo | null> {\n const result = await this.rpc.call(\"catalog_macro_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeMacroInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** List macros in a schema, filtered by type. */\n async schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n type: CatalogMacroType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_macros\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeMacroInfo);\n }\n\n /** Create a new macro. */\n async macroCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n macroType: MacroType,\n parameters: string[],\n definition: string,\n onConflict: OnCreateConflict,\n parameterDefaultValues?: Uint8Array | null,\n argumentsSchema?: Uint8Array | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n const innerBatch = batchFromColumns(\n {\n attach_opaque_data: [attachOpaqueData],\n schema_path: [normalizeSchemaPath(schemaPath)],\n name: [name],\n macro_type: [macroType],\n parameters: [parameters],\n definition: [definition],\n on_conflict: [onConflict],\n parameter_default_values: [parameterDefaultValues ?? null],\n arguments_schema: [argumentsSchema ?? null],\n transaction_opaque_data: [transactionOpaqueData ?? null],\n },\n MacroCreateRequestSchema,\n );\n await this.rpc.call(\"catalog_macro_create\", wrapRequest(innerBatch));\n }\n\n /** Drop a macro by name. */\n async macroDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_macro_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Close the underlying RPC connection. */\n close(): void {\n this.rpc.close();\n }\n}\n",
|
|
93
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI TypeScript - Public API (runtime-agnostic core)\n//\n// Everything exported from the package EXCEPT the node-only `Worker` (which\n// imports the AF_UNIX launcher's `serveUnix` from @query-farm/vgi-rpc). This\n// module must stay free of static node-only value imports so it can be bundled\n// for Cloudflare Workers / browsers via worker-cf-entry.ts. The node/bun barrel\n// (`./index.ts`) re-exports this plus `Worker`.\n\n// Result-cache control vocabulary (`vgi.cache.*`)\nexport {\n CACHE_ETAG_KEY,\n CACHE_EXPIRES_KEY,\n CACHE_IF_MODIFIED_SINCE_KEY,\n CACHE_IF_NONE_MATCH_KEY,\n CACHE_LAST_MODIFIED_KEY,\n CACHE_NO_STORE_KEY,\n CACHE_NOT_MODIFIED_KEY,\n CACHE_PARTITION_SCOPE_KEY,\n CACHE_PER_VALUE_KEY,\n CACHE_REVALIDATABLE_KEY,\n CACHE_SCOPE_CATALOG,\n CACHE_SCOPE_KEY,\n CACHE_SCOPE_TRANSACTION,\n CACHE_STALE_IF_ERROR_KEY,\n CACHE_STALE_WHILE_REVALIDATE_KEY,\n CACHE_TTL_KEY,\n type CacheControl,\n cacheControlMetadata,\n type CacheScope,\n} from \"./cache-control.js\";\n\n// Function factories (primary API)\nexport { defineScalarFunction, type ScalarFunctionConfig, type ScalarBindParameters, type ScalarParameterDef } from \"./functions/scalar.js\";\nexport { defineTableFunction, type TableFunctionConfig, type TableBindParams, type TableProcessParams } from \"./functions/table.js\";\nexport {\n defineAggregate,\n GROUP_COLUMN_NAME,\n type AggregateFunctionConfig,\n type AggregateBindParams,\n type AggregateUpdateParams,\n type AggregateFinalizeParams,\n} from \"./functions/aggregate.js\";\nexport {\n defineTableInOutFunction,\n defineRowTransformFunction,\n parentRowsMetadata,\n PARENT_ROW_METADATA_KEY,\n type TableInOutConfig,\n type TableInOutBindParams,\n type TableInOutProcessParams,\n type RowTransformConfig,\n type RowTransformProcessParams,\n} from \"./functions/table-in-out.js\";\nexport {\n defineTableBufferingFunction,\n type TableBufferingConfig,\n type TableBufferingBindParams,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./functions/table-buffering.js\";\nexport {\n defineCopyFromFunction,\n type CopyFromFunctionConfig,\n type CopyFromOption,\n type CopyFromReadParams,\n} from \"./functions/copy-from.js\";\nexport {\n defineCopyToFunction,\n type CopyToFunctionConfig,\n type CopyToOption,\n type CopyToWriteParams,\n type CopyToCloseParams,\n} from \"./functions/copy-to.js\";\n\n// Function types\nexport type { VgiFunction, FunctionMeta, StreamHandlers, FunctionExample, HandlerState } from \"./functions/types.js\";\n\n// Catalog\nexport { CatalogInterface, type CatalogAttachResult, type CatalogAttachResultInit, buildCatalogAttachResult, type SchemaContentsInfo, type CatalogContentsResult, type SchemaInfo, encodeSchemaInfo, decodeSchemaInfo, type TableInfo, encodeTableInfo, decodeTableInfo, type ViewInfo, encodeViewInfo, decodeViewInfo, type CatalogInfo, encodeCatalogInfo, decodeCatalogInfo, type FunctionInfo, encodeFunctionInfo, decodeFunctionInfo, type FunctionInfoOptions, type MacroInfo, encodeMacroInfo, decodeMacroInfo, type MacroType, type CopyFromFormatInfo, encodeCopyFromFormatInfo, type AttachOpaqueData, type TransactionOpaqueData, buildScanBranchesResult, encodeFormatOptions, type ScanBranchInput } from \"./catalog/interface.js\";\nexport type { CatalogDescriptor, SchemaDescriptor, TableDescriptor, ViewDescriptor, MacroDescriptor, SettingDescriptor, SecretTypeDescriptor, ForeignKeyDef, DefaultValue } from \"./catalog/descriptors.js\";\nexport { ReadOnlyCatalogInterface, READ_ONLY_ITEM_ATTACH_ID } from \"./catalog/read-only.js\";\nexport { CompositeCatalogInterface } from \"./catalog/composite.js\";\nexport { FunctionRegistry } from \"./functions/registry.js\";\n\n// Core types\nexport {\n FunctionType,\n FunctionStability,\n NullHandling,\n ArgumentMonotonicity,\n OrderPreservation,\n OrderDependence,\n DistinctDependence,\n TableInOutPhase,\n DEFAULT_MAX_WORKERS,\n} from \"./types.js\";\n\n// Protocol types\nexport type {\n BindRequest,\n BindResponse,\n CopyFromContext,\n CopyToContext,\n InitRequest,\n GlobalInitResponse,\n TableCardinality,\n} from \"./protocol/types.js\";\n\n// Arguments\nexport { Arguments } from \"./arguments/arguments.js\";\nexport { type ArgumentSpec, type ArgumentConstraints, argumentSpecsToSchema, schemaToArgumentSpecs, macroArgumentsSchema, macroParameterDocsFromSchema, formatRange, constraintSpecFields } from \"./arguments/argument-spec.js\";\n\n// Errors\nexport {\n VgiError,\n RowCountMismatchError,\n FunctionNotFoundError,\n CatalogReadOnlyError,\n CatalogNotFoundError,\n CatalogAlreadyExistsError,\n ArgumentValidationError,\n NoCatalogError,\n} from \"./errors.js\";\n\n// Metadata\nexport type { ResolvedMetadata, ParameterInfo } from \"./metadata/types.js\";\nexport { CatalogFunctionType } from \"./metadata/types.js\";\nexport { resolveMetadata } from \"./metadata/resolve.js\";\nexport { metadatasToArrow, arrowToMetadatas } from \"./metadata/serialize.js\";\n\n// Filter pushdown\nexport {\n PushdownFilters,\n FilteringOutputCollector,\n deserializeFilters,\n buildJoinKeysLookup,\n ComparisonOp,\n type Filter,\n type ConstantFilter,\n type IsNullFilter,\n type IsNotNullFilter,\n type InFilter,\n type AndFilter,\n type OrFilter,\n type StructFilter,\n formatPushedFilters,\n reprPushedFilters,\n} from \"./filter-pushdown/index.js\";\n\n// State serializer\nexport { arrowStateSerializer, EXCHANGE_STATE_SCHEMA, serializeUserState, deserializeUserState } from \"./protocol/state-serializer.js\";\n\n// Protocol assembly (for embedding the worker dispatcher in a custom HTTP server).\nexport { buildVgiProtocol, type ProtocolConfig } from \"./protocol/dispatch.js\";\n\n// VGI HTTP landing surface. The shared landing.html reads catalog metadata by\n// speaking the protocol through the client bundle the worker serves beside it,\n// so a worker supplies only its own identity via `createHttpHandler`'s\n// `landingInfo` option.\nexport type { LandingInfo } from \"./http/landing.js\";\nexport { createLandingRoutes } from \"./http/landing.js\";\n\n// Wire schemas — needed by workers that synthesize TableInfo.bind_result /\n// TableInfo.scan_function bytes to short-circuit per-scan RPCs.\nexport { BindResultSchema, ScanFunctionResultSchema } from \"./generated/vgi-protocol-schemas.js\";\n\n// Attach-option specs (for catalogs that advertise typed ATTACH options).\nexport { type AttachOptionSpec, serializeAttachOptionSpec, serializeAttachOptionSpecs, deserializeAttachOptionSpec, deserializeAttachOptionSpecs } from \"./catalog/attach-option.js\";\n\n// Column statistics (for inlining on TableInfo.column_statistics).\nexport { type ColumnStatistics, serializeColumnStatistics } from \"./util/statistics.js\";\n\n// Byte utilities\nexport { toUint8Array } from \"./util/bytes.js\";\n\n// Arrow utilities\nexport {\n iterRows,\n batchFromRows,\n batchFromColumns,\n emptyBatch,\n filterBatch,\n projectSchema,\n projectBatch,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n} from \"./util/arrow/index.js\";\n\nexport {\n type SecretFields,\n type SecretsDict,\n secretType,\n secretsOfType,\n secretForScope,\n secretForScopeOfType,\n} from \"./secrets/helpers.js\";\n\nexport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"./util/arrow/index.js\";\n\n// Arrow type system (phase 3): typed factories, precise descriptors, the\n// rich/raw value mapping, the codec registry, and branded raw scalar types\n// with their validating constructors. This is the statically-typed author API.\n// NOTE: the arrow factory names `int`, `int32`, `float32`, `bool` are NOT\n// re-exported here because the package root already exports vgi-rpc argument\n// builders of the same names. Authors needing those specific arrow factories\n// (and the full typed factory set) import them from the arrow facade module\n// (`@query-farm/vgi` -> \"./src/arrow/index.js\"). The non-colliding and\n// unit-precise factories below cover the common phase-3 typed/raw-mode cases.\nexport {\n // typed type factories (non-colliding subset)\n schema, field,\n nullType,\n int8, int16, int64,\n uint8, uint16, uint32, uint64,\n float16, float64,\n utf8, largeUtf8, binary, largeBinary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n timestampSeconds, timestampMillis, timestampMicros, timestampNanos,\n durationSeconds, durationMillis, durationMicros, durationNanos,\n list, fixedSizeList, struct, map,\n dictionary, union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n // codec registry\n codecFor,\n // branded raw constructors / unwrappers\n asDate32, asDate64Ms,\n asTime32S, asTime32Ms, asTime64Us, asTime64Ns,\n asTimestampSeconds, asTimestampMillis, asTimestampMicros, asTimestampNanos,\n asDurationSeconds, asDurationMillis, asDurationMicros, asDurationNanos,\n asUnscaledDecimal, asInt64, asUint64,\n fromBranded, fromBrandedNumber, fromBrandedBigInt,\n // backend-agnostic predicates + ids\n TypeId,\n isNull, isInt, isFloat, isBinary, isUtf8, isBool, isDecimal, isDate,\n isTime, isTimestamp, isInterval, isList, isStruct, isUnion,\n isFixedSizeBinary, isFixedSizeList, isMap, isDuration, isDictionary, isBatch,\n typeSignature,\n readCanonicalValue, columnFromArray, decodeDictValue, backend,\n adoptArrowJsShape,\n} from \"./arrow/index.js\";\n\nexport type {\n // backend-agnostic Arrow types\n VgiTypeId, VgiDataType, VgiField, VgiSchema, VgiColumn, VgiColumnData,\n VgiBatch, VgiBackendInfo, TaggedUnion,\n // precise nominal descriptors\n NullDescriptor, BoolType,\n IntType, Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n FloatType, Utf8Type, LargeUtf8Type, BinaryType, LargeBinaryType,\n FixedSizeBinaryType, DecimalType,\n Date32Type, Date64Type, Time32Type, Time64Type,\n TimestampType, DurationType, IntervalType,\n ListType, FixedSizeListType, StructType, MapType, DictionaryType, UnionType,\n TypedField, TUnit,\n // rich/raw mapping\n RichValue, RawValue, ValueFor, Repr,\n // codec\n Codec,\n // branded scalar aliases\n Branded,\n Date32, Date64Ms,\n Time32S, Time32Ms, Time64Us, Time64Ns,\n TimestampSeconds, TimestampMillis, TimestampMicros, TimestampNanos,\n DurationSeconds, DurationMillis, DurationMicros, DurationNanos,\n UnscaledDecimal, Int64Raw, Uint64Raw,\n} from \"./arrow/index.js\";\n\n// Typed scalar compute helper types (phase 3).\nexport type { ScalarComputeRow, ScalarOutputValue, ScalarComputeResult } from \"./functions/scalar.js\";\n\n// Storage\nexport {\n type FunctionStorage,\n type WorkerStateKey,\n FunctionStorageSqlite,\n BoundStorage,\n UnknownInvocationError,\n resolveStorageFromEnv,\n setStorage,\n storage as functionStorage,\n} from \"./functions/storage.js\";\nexport { FunctionStorageCfDo, type FetchLike } from \"./functions/storage-cf-do.js\";\n\n// Client\nexport { VgiClient, VgiClientError } from \"./client/client.js\";\nexport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType as ClientCatalogFunctionType,\n CatalogAttachOptions,\n AttachOptionValue,\n CatalogSnapshot,\n LoadCatalogOptions,\n} from \"./client/types.js\";\n\n// Re-export from vgi-rpc for convenience\nexport { str, bytes, int, int32, float, float32, bool, toSchema, OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nexport { subprocessConnect, httpConnect, tcpConnect } from \"@query-farm/vgi-rpc\";\nexport type { RpcClient, StreamSession, LogMessage } from \"@query-farm/vgi-rpc\";\n\n// Hosting additional protocols and opting into vgi_rpc.Identity.v1. The errors\n// are re-exported so a worker's resolveToken/mintGrant can throw the right one:\n// AuthUnavailableError (or IdentityUnavailableError) for \"could not find out\",\n// GrantRefusedError to decline a grant.\nexport {\n buildRpcServer,\n INTROSPECT_PRINCIPALS_ENV,\n type BuildRpcServerOptions,\n type HostingOptions,\n type ServerTransport,\n} from \"./rpc-server.js\";\nexport {\n AuthUnavailableError,\n GrantRefusedError,\n IdentityUnavailableError,\n StatusError,\n} from \"@query-farm/vgi-rpc\";\nexport type { GrantMinter, IssuedGrant, TokenIdentity, TokenResolver } from \"@query-farm/vgi-rpc\";\nexport { normalizeSchemaPath, schemaPathDisplay, schemaPathKey, schemaPathsEqual, type SchemaPath } from \"./schema-path.js\";\n",
|
|
94
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VgiClient — high-level client for calling VGI worker functions and catalog API.\n// Works with any RpcClient (subprocess or HTTP transport).\n\nimport { type VgiSchema, schema as schema_, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, list } from \"../arrow/index.js\";\n// `import type`, not `import { type … }`: the latter keeps the statement and\n// emits `import {} from \"@query-farm/vgi-rpc\"`, a side-effect import of the\n// package root — which re-exports the whole framework, server included, into\n// every browser bundle. See the note in ./errors.\nimport type { RpcClient, StreamSession } from \"@query-farm/vgi-rpc\";\nimport {\n serializeBindRequest,\n deserializeBindResponse,\n serializeInitRequest,\n deserializeGlobalInitResponse,\n} from \"../protocol/serialize.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport { FunctionType, TableInOutPhase } from \"../types.js\";\nimport { Arguments } from \"../arguments/arguments.js\";\nimport {\n batchFromRows,\n batchFromColumns,\n iterRows,\n} from \"../util/arrow/index.js\";\nimport {\n type SchemaInfo,\n decodeSchemaInfo,\n type TableInfo,\n decodeTableInfo,\n type ViewInfo,\n decodeViewInfo,\n type FunctionInfo,\n decodeFunctionInfo,\n type MacroInfo,\n decodeMacroInfo,\n type MacroType,\n type CatalogAttachResult,\n type SchemaContentsInfo,\n decodeIndexInfo,\n type IndexInfo,\n type AttachOpaqueData,\n type TransactionOpaqueData,\n decodeCatalogInfo,\n type CatalogInfo,\n type ScanFunctionResult,\n decodeScanFunctionResult,\n} from \"../catalog/interface.js\";\nimport { wrapRequest, unwrapResult } from \"./protocol.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport { serializeAttachOptions } from \"../catalog/attach-options.js\";\nimport { VgiClientError, wrapRpcWithErrorEnrichment } from \"./errors.js\";\nimport { normalizeSchemaPath } from \"../schema-path.js\";\nimport { encodeASD } from \"../codec/asd.js\";\nimport { ClientCapabilitiesSchema, MacroCreateRequestSchema } from \"../generated/vgi-protocol-schemas.js\";\nimport { decodeCatalogContentsResponse } from \"../generated/vgi-protocol-types.js\";\nimport { deserializeInfoList, deserializeTags, toAsyncIterator } from \"./helpers.js\";\n\nexport { VgiClientError };\nimport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType,\n CatalogMacroType,\n CatalogAttachOptions,\n OrderByPushdown,\n TablesamplePushdown,\n AttachOptionValue,\n CatalogSnapshot,\n LoadCatalogOptions,\n} from \"./types.js\";\n\n/**\n * High-level client for calling VGI worker functions and catalog API.\n *\n * Works with any RpcClient transport (subprocess or HTTP):\n * ```ts\n * import { subprocessConnect } from \"@query-farm/vgi-rpc\";\n * import { VgiClient, Arguments } from \"@query-farm/vgi\";\n *\n * const rpc = subprocessConnect([\"./my-worker\"]);\n * const client = new VgiClient(rpc);\n *\n * for await (const rows of client.tableFunctionRows({\n * functionName: \"sequence\",\n * arguments: new Arguments([10]),\n * })) {\n * console.log(rows);\n * }\n * client.close();\n * ```\n */\nexport class VgiClient {\n private readonly rpc: RpcClient;\n private readonly defaultAttachOpaqueData: Uint8Array | null;\n\n /**\n * Construct a VgiClient wrapping an `RpcClient` transport.\n *\n * `options.attachOpaqueData` sets a client-wide default attach ID used by every\n * function call that doesn't supply its own. Per-call `attachOpaqueData` on\n * `TableFunctionOptions`/`ScalarFunctionOptions`/`TableInOutFunctionOptions`\n * takes precedence — useful when a single client talks to multiple\n * attached catalogs.\n */\n constructor(rpc: RpcClient, options?: VgiClientOptions) {\n this.rpc = wrapRpcWithErrorEnrichment(rpc);\n this.defaultAttachOpaqueData = options?.attachOpaqueData ?? null;\n }\n\n /**\n * Connect the high-level client to a canonical `iroh://` or `httpi://`\n * endpoint. Native Node/Bun connectors are selected from the URI scheme.\n * Browser callers may inject the connector exported by the browser Iroh\n * package without changing the VGI client API.\n */\n static async fromIroh(\n endpoint: string,\n options: Record<string, unknown> = {},\n clientOptions?: VgiClientOptions,\n connector?: (endpoint: string, options: Record<string, unknown>) => Promise<RpcClient>,\n ): Promise<VgiClient> {\n if (!/^(iroh|httpi):\\/\\//.test(endpoint)) {\n throw new TypeError(\"VgiClient.fromIroh requires an iroh:// or httpi:// endpoint\");\n }\n let selected = connector;\n if (!selected) {\n const rpc = await import(\"@query-farm/vgi-rpc\");\n selected = endpoint.startsWith(\"iroh://\")\n ? (rpc.irohConnect as unknown as NonNullable<typeof selected>)\n : (rpc.httpiConnect as unknown as NonNullable<typeof selected>);\n }\n if (!selected) throw new TypeError(\"no Iroh connector is available in this runtime\");\n return new VgiClient(await selected(endpoint, options), clientOptions);\n }\n\n // ==========================================================================\n // Private helpers\n // ==========================================================================\n\n private async _doBind(\n functionName: string,\n functionType: FunctionType,\n args: Arguments,\n inputSchema: VgiSchema | null,\n settings: VgiBatch | null,\n secrets: VgiBatch | null,\n transactionOpaqueData: Uint8Array | null,\n attachOpaqueData: Uint8Array | null = null,\n onBind?: ((response: BindResponse) => void) | null,\n ): Promise<{ request: BindRequest; response: BindResponse }> {\n const request: BindRequest = {\n function_name: functionName,\n arguments: args,\n function_type: functionType,\n input_schema: inputSchema,\n settings: settings ?? null,\n secrets: secrets ?? null,\n attach_opaque_data: attachOpaqueData ?? this.defaultAttachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n resolved_secrets_provided: false,\n };\n\n const requestBatch = serializeBindRequest(request);\n const rpcResult = await this.rpc.call(\"bind\", wrapRequest(requestBatch));\n if (!rpcResult) throw new VgiClientError(\"bind returned null\");\n const inner = unwrapResult(rpcResult);\n const response = deserializeBindResponse(inner);\n if (onBind) onBind(response);\n return { request, response };\n }\n\n private async _doInit(\n bindRequest: BindRequest,\n bindResponse: BindResponse,\n opts?: {\n projectionIds?: number[] | null;\n pushdownFilters?: VgiBatch | null;\n phase?: TableInOutPhase | null;\n executionId?: Uint8Array | null;\n orderBy?: OrderByPushdown | null;\n tablesample?: TablesamplePushdown | null;\n joinKeys?: VgiBatch[] | null;\n },\n ): Promise<{ session: StreamSession; initResponse: GlobalInitResponse }> {\n const ob = opts?.orderBy ?? null;\n const ts = opts?.tablesample ?? null;\n const initRequest: InitRequest = {\n bind_call: bindRequest,\n output_schema: bindResponse.output_schema,\n bind_opaque_data: bindResponse.opaque_data,\n // This client does not plan scans, so it never redeems a split, and it\n // pushes no limit down.\n split_tokens: null,\n row_limit: null,\n projection_ids: opts?.projectionIds ?? null,\n pushdown_filters: opts?.pushdownFilters ?? null,\n join_keys: opts?.joinKeys ?? [],\n phase: opts?.phase ?? null,\n finalize_state_id: null,\n order_by_column_name: ob?.columnName ?? null,\n order_by_direction: ob?.direction ?? null,\n order_by_null_order: ob?.nullOrder ?? null,\n order_by_limit: ob?.limit == null ? null : BigInt(ob.limit),\n tablesample_percentage: ts?.percentage ?? null,\n tablesample_seed: ts?.seed == null ? null : BigInt(ts.seed),\n execution_id: opts?.executionId ?? null,\n init_opaque_data: null,\n substream_id: null,\n };\n\n const initBatch = serializeInitRequest(initRequest);\n const session = await this.rpc.stream(\"init\", wrapRequest(initBatch));\n\n const headerDict = session.header;\n if (!headerDict) throw new VgiClientError(\"init did not return a header\");\n const initResponse = deserializeGlobalInitResponse(headerDict);\n\n return { session, initResponse };\n }\n\n // ==========================================================================\n // Table function — RecordBatch API\n // ==========================================================================\n\n /** Call a table function, yielding output as RecordBatch instances. */\n async *tableFunction(\n opts: TableFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n\n const outputSchema = bindResp.output_schema;\n try {\n for await (const rows of session) {\n if (rows.length > 0) {\n yield batchFromRows(rows, outputSchema);\n }\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Scalar function\n // ==========================================================================\n\n /** Call a scalar function, yielding output as row objects. */\n async *scalarFunctionRows(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n // Peek first batch to get input schema\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n\n try {\n // Exchange first batch\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n // Exchange remaining batches\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n session.close();\n }\n }\n\n /** Call a scalar function, yielding output as RecordBatch instances. */\n async *scalarFunction(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n // Same path as scalarFunctionRows, but with the output schema captured\n // here so we can pack rows back into batches without a re-bind.\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Table-in-out function\n // ==========================================================================\n\n /** Call a table-in-out function, yielding output as row objects. */\n async *tableInOutFunctionRows(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE, // table-in-out uses TABLE function type at the bind level\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n // Phase 1: INPUT. We keep the init response around for its `execution_id`,\n // which we must echo back to pair the FINALIZE phase with this call.\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n inputSession.close();\n }\n\n // Phase 2: FINALIZE — skipped entirely for a function with no finalize stage.\n if (opts.hasFinalize === false) return;\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n /** Call a table-in-out function, yielding output as RecordBatch instances. */\n async *tableInOutFunction(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n inputSession.close();\n }\n\n // FINALIZE — skipped entirely for a function with no finalize stage.\n if (opts.hasFinalize === false) return;\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield batchFromRows(rows, outputSchema);\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n // ==========================================================================\n // Row convenience for table function\n // ==========================================================================\n\n /** Call a table function, yielding output as row objects. */\n async *tableFunctionRows(\n opts: TableFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const args = opts.arguments ?? new Arguments();\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n try {\n for await (const rows of session) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Catalog API\n // ==========================================================================\n\n /**\n * List all catalogs with their advertised version metadata.\n *\n * Each entry has `{name, implementation_version?, data_version_spec?}`.\n * Versioned workers populate the version fields; read-only workers\n * leave both null.\n */\n async catalogsInfo(): Promise<CatalogInfo[]> {\n const result = await this.rpc.call(\"catalog_catalogs\", {});\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeCatalogInfo);\n }\n\n /** List all available catalog names (shorthand for `catalogsInfo().map(c => c.name)`). */\n async catalogs(): Promise<string[]> {\n const infos = await this.catalogsInfo();\n return infos.map((i) => i.name);\n }\n\n /**\n * Attach a catalog by name. Returns connection details including the\n * attachOpaqueData.\n *\n * `opts.options` is a plain key→value map; column types are inferred from\n * the value at runtime (see AttachOptionValue for the mapping). Use\n * `opts.optionsBytes` instead when you need Arrow types the inference\n * can't express (Decimal, Timestamp, Int32 vs Int64, nested structs).\n * Providing both throws.\n *\n * Versioned catalogs (see vgi-example-versioned-worker) validate\n * `dataVersionSpec` / `implementationVersion` at attach time and echo\n * back the resolved values on the result — callers can read those from\n * `result.resolved_data_version` / `result.resolved_implementation_version`.\n *\n * @example\n * ```ts\n * const result = await client.catalogAttach(\"my_catalog\", {\n * options: { region: \"us-east-1\", maxCachedRows: 1000n, readOnly: true },\n * dataVersionSpec: \"1.0.0\",\n * });\n * ```\n */\n async catalogAttach(\n name: string,\n opts?: CatalogAttachOptions,\n ): Promise<CatalogAttachResult> {\n if (opts?.options != null && opts?.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogAttach: cannot specify both `options` and `optionsBytes`\",\n );\n }\n let wireOptions: Uint8Array | null;\n if (opts?.optionsBytes != null) {\n // Escape hatch: raw pre-serialized bytes. Same zero-byte guard as\n // before — pyarrow's IPC reader rejects 0-byte input on a non-null\n // binary field.\n wireOptions = opts.optionsBytes.byteLength === 0 ? null : opts.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(opts?.options);\n }\n\n const schema = schema_([\n field(\"name\", utf8(), false),\n field(\"options\", binary(), true),\n field(\"data_version_spec\", utf8(), true),\n field(\"implementation_version\", utf8(), true),\n field(\"client_capabilities\", binary(), true),\n ]);\n const innerBatch = batchFromColumns(\n {\n name: [name],\n options: [wireOptions],\n data_version_spec: [opts?.dataVersionSpec ?? null],\n implementation_version: [opts?.implementationVersion ?? null],\n client_capabilities: [opts?.clientCapabilities\n ? encodeASD(ClientCapabilitiesSchema, opts.clientCapabilities)\n : null],\n },\n schema,\n );\n const result = await this.rpc.call(\"catalog_attach\", wrapRequest(innerBatch));\n if (!result) throw new VgiClientError(\"catalog_attach returned null\");\n const inner = unwrapResult(result);\n return {\n attach_opaque_data: toUint8Array(inner.attach_opaque_data),\n supports_transactions: inner.supports_transactions ?? false,\n supports_time_travel: inner.supports_time_travel ?? false,\n catalog_version_frozen: inner.catalog_version_frozen ?? false,\n catalog_version: Number(inner.catalog_version ?? 0),\n attach_opaque_data_required: inner.attach_opaque_data_required ?? true,\n default_schema: inner.default_schema ?? \"main\",\n settings: inner.settings\n ? (Array.isArray(inner.settings) ? inner.settings : [...inner.settings]).map(toUint8Array)\n : [],\n secret_types: inner.secret_types\n ? (Array.isArray(inner.secret_types) ? inner.secret_types : [...inner.secret_types]).map(toUint8Array)\n : [],\n attach_catalogs: inner.attach_catalogs\n ? (Array.isArray(inner.attach_catalogs) ? inner.attach_catalogs : [...inner.attach_catalogs]).map(toUint8Array)\n : [],\n comment: inner.comment ?? null,\n tags: deserializeTags(inner.tags),\n supports_column_statistics: inner.supports_column_statistics ?? false,\n global_functions: inner.global_functions\n ? (Array.isArray(inner.global_functions) ? inner.global_functions : [...inner.global_functions]).map(toUint8Array)\n : [],\n global_function_prefix: inner.global_function_prefix ?? \"\",\n resolved_data_version: inner.resolved_data_version ?? null,\n resolved_implementation_version: inner.resolved_implementation_version ?? null,\n supports_catalog_contents: inner.supports_catalog_contents ?? false,\n };\n }\n\n /**\n * Load the whole catalog in one `catalog_contents` call: every schema (parents\n * before children) with all of its tables, views, functions, macros and\n * indexes. Only call it when the attach result set\n * `supports_catalog_contents`; it is the committed catalog at\n * `catalog_version` (no transaction).\n *\n * Pass the `etag` of a snapshot you hold as `ifNoneMatch`: when it is still\n * current the worker answers `not_modified` with no schemas. `etag` null\n * means the worker does not revalidate. Each schema's wire `path` is checked\n * against its decoded `SchemaInfo.path`.\n *\n * This is the raw RPC. To enumerate a catalog, use `loadCatalog`, which\n * checks the capability, revalidates and falls back to the per-schema RPCs.\n */\n async catalogContents(\n attachOpaqueData: AttachOpaqueData,\n ifNoneMatch: string | null = null,\n ): Promise<{ catalog_version: number; etag: string | null; not_modified: boolean; schemas: SchemaContentsInfo[] }> {\n const result = await this.rpc.call(\"catalog_contents\", {\n attach_opaque_data: attachOpaqueData,\n if_none_match: ifNoneMatch,\n });\n if (!result) throw new VgiClientError(\"catalog_contents returned null\");\n const response = decodeCatalogContentsResponse(toUint8Array(result.result));\n const schemas = response.schemas.map((c) => {\n const schema = decodeSchemaInfo(c.schema);\n if (JSON.stringify(c.path) !== JSON.stringify(schema.path)) {\n throw new VgiClientError(\n `catalog_contents: SchemaContents.path ${JSON.stringify(c.path)} != SchemaInfo.path ${JSON.stringify(schema.path)}`,\n );\n }\n return {\n schema,\n tables: c.tables.map(decodeTableInfo),\n views: c.views.map(decodeViewInfo),\n scalar_functions: c.scalar_functions.map(decodeFunctionInfo),\n aggregate_functions: c.aggregate_functions.map(decodeFunctionInfo),\n table_functions: c.table_functions.map(decodeFunctionInfo),\n scalar_macros: c.scalar_macros.map(decodeMacroInfo),\n table_macros: c.table_macros.map(decodeMacroInfo),\n indexes: c.indexes.map(decodeIndexInfo),\n };\n });\n return {\n catalog_version: Number(response.catalog_version ?? 0),\n etag: response.etag ?? null,\n not_modified: Boolean(response.not_modified),\n schemas,\n };\n }\n\n /**\n * Enumerate the whole catalog: every schema with all of its tables, views,\n * scalar/aggregate/table functions, scalar/table macros and indexes.\n *\n * Honors the attach result's `supports_catalog_contents` the way the DuckDB\n * extension does:\n *\n * - advertised (and `useCatalogContents` not false, no transaction): one\n * `catalog_contents` call. With `previous.etag` it is conditional\n * (`if_none_match`); `not_modified` returns `previous`'s contents.\n * - not advertised: `catalog_schemas` + per-schema\n * `catalog_schema_contents_*` calls -- `catalog_contents` is never sent.\n * Kinds whose `estimated_object_count` is exactly 0 are skipped.\n * - advertised but the call fails (or answers malformed, e.g. a\n * `SchemaContents.path` that disagrees with its `SchemaInfo.path`): falls\n * back to the per-schema calls and reports the failure in\n * `fallback_error`.\n *\n * A full answer older than `previous` (a lagging replica) is retried once,\n * then the per-schema path is used.\n */\n async loadCatalog(\n attach: Pick<CatalogAttachResult, \"attach_opaque_data\" | \"supports_catalog_contents\">,\n opts?: LoadCatalogOptions,\n ): Promise<CatalogSnapshot> {\n const attachOpaqueData = attach.attach_opaque_data;\n const previous = opts?.previous ?? null;\n const useContents =\n attach.supports_catalog_contents === true &&\n opts?.useCatalogContents !== false &&\n opts?.transactionOpaqueData == null;\n if (!useContents) {\n return this._loadCatalogPerSchema(attachOpaqueData, opts?.transactionOpaqueData, null);\n }\n\n let fallbackError: string | null = null;\n const ifNoneMatch = previous?.etag ?? null;\n const knownVersion = previous?.catalog_version ?? 0;\n for (let attempt = 0; attempt < 2; attempt++) {\n let response: Awaited<ReturnType<VgiClient[\"catalogContents\"]>>;\n try {\n response = await this.catalogContents(attachOpaqueData, ifNoneMatch);\n } catch (err) {\n fallbackError = err instanceof Error ? err.message : String(err);\n break;\n }\n if (response.not_modified) {\n if (previous == null || ifNoneMatch == null) {\n fallbackError = \"catalog_contents answered not_modified to an unconditional request\";\n break;\n }\n return {\n ...previous,\n // 0 = unknown: keep the version already known.\n catalog_version: response.catalog_version !== 0 ? response.catalog_version : previous.catalog_version,\n etag: response.etag ?? ifNoneMatch,\n not_modified: true,\n fallback_error: null,\n };\n }\n // Version adoption: a snapshot at least as new as the known version is\n // current; 0 means unknown and is accepted. An older one is retried once.\n if (response.catalog_version !== 0 && knownVersion !== 0 && response.catalog_version < knownVersion) {\n fallbackError = `catalog_contents snapshot version ${response.catalog_version} is older than the known version ${knownVersion}`;\n continue;\n }\n return {\n catalog_version: response.catalog_version,\n etag: response.etag,\n source: \"catalog_contents\",\n not_modified: false,\n fallback_error: null,\n schemas: response.schemas,\n };\n }\n return this._loadCatalogPerSchema(attachOpaqueData, undefined, fallbackError);\n }\n\n /** `loadCatalog` without `catalog_contents`: catalog_schemas + per-schema calls. */\n private async _loadCatalogPerSchema(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData | undefined,\n fallbackError: string | null,\n ): Promise<CatalogSnapshot> {\n const schemas = await this.schemas(attachOpaqueData, transactionOpaqueData);\n const out: SchemaContentsInfo[] = [];\n // Sequential on purpose: a stdio RpcClient carries one call at a time.\n for (const schema of schemas) {\n const counts = schema.estimated_object_count ?? {};\n const path = schema.path;\n // Only an explicit 0 is a guarantee; a missing count is unknown. Decoded\n // int64 counts are numbers, or bigints beyond the safe range, so compare\n // numerically.\n const has = (kind: string) => {\n const n = (counts as Record<string, unknown>)[kind];\n return n == null || Number(n) !== 0;\n };\n const t = transactionOpaqueData;\n out.push({\n schema,\n tables: has(\"table\") ? await this.schemaContentsTables(attachOpaqueData, path, t) : [],\n views: has(\"view\") ? await this.schemaContentsViews(attachOpaqueData, path, t) : [],\n scalar_functions: has(\"scalar_function\")\n ? await this.schemaContentsFunctions(attachOpaqueData, path, \"SCALAR_FUNCTION\", t)\n : [],\n aggregate_functions: has(\"aggregate_function\")\n ? await this.schemaContentsFunctions(attachOpaqueData, path, \"AGGREGATE_FUNCTION\", t)\n : [],\n table_functions: has(\"table_function\")\n ? await this.schemaContentsFunctions(attachOpaqueData, path, \"TABLE_FUNCTION\", t)\n : [],\n scalar_macros: has(\"macro\") ? await this.schemaContentsMacros(attachOpaqueData, path, \"SCALAR_MACRO\", t) : [],\n table_macros: has(\"macro\") ? await this.schemaContentsMacros(attachOpaqueData, path, \"TABLE_MACRO\", t) : [],\n indexes: has(\"index\") ? await this.schemaContentsIndexes(attachOpaqueData, path, t) : [],\n });\n }\n return {\n catalog_version: null,\n etag: null,\n source: \"per_schema\",\n not_modified: false,\n fallback_error: fallbackError,\n schemas: out,\n };\n }\n\n /** Detach a previously-attached catalog. */\n async catalogDetach(attachOpaqueData: AttachOpaqueData): Promise<void> {\n await this.rpc.call(\"catalog_detach\", { attach_opaque_data: attachOpaqueData });\n }\n\n /**\n * Create a new catalog.\n *\n * `options` is a plain key→value map; column types are inferred from the\n * value at runtime (see AttachOptionValue). Use `optionsBytes` instead\n * when you need Arrow types the inference can't express. Providing both\n * throws.\n */\n async catalogCreate(\n name: string,\n onConflict: OnCreateConflict,\n options?:\n | Uint8Array\n | { options?: Record<string, AttachOptionValue>; optionsBytes?: Uint8Array },\n ): Promise<void> {\n let wireOptions: Uint8Array | null;\n if (options == null) {\n wireOptions = null;\n } else if (options instanceof Uint8Array) {\n // Backwards-compatible escape hatch: caller pre-serialized the options batch.\n wireOptions = options.byteLength === 0 ? null : options;\n } else {\n if (options.options != null && options.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogCreate: cannot specify both `options` and `optionsBytes`\",\n );\n }\n if (options.optionsBytes != null) {\n wireOptions = options.optionsBytes.byteLength === 0 ? null : options.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(options.options);\n }\n }\n await this.rpc.call(\"catalog_create\", {\n name,\n on_conflict: onConflict,\n options: wireOptions,\n });\n }\n\n /** Drop a catalog by name. */\n async catalogDrop(name: string): Promise<void> {\n await this.rpc.call(\"catalog_drop\", { name });\n }\n\n /** Get the current catalog version number. */\n async catalogVersion(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<number> {\n const result = await this.rpc.call(\"catalog_version\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"catalog_version returned null\");\n const inner = unwrapResult(result);\n return Number(inner.version ?? 0);\n }\n\n /** Begin a new transaction. Returns the transaction ID. */\n async transactionBegin(attachOpaqueData: AttachOpaqueData): Promise<Uint8Array> {\n const result = await this.rpc.call(\"catalog_transaction_begin\", {\n attach_opaque_data: attachOpaqueData,\n });\n if (!result) throw new VgiClientError(\"transaction_begin returned null\");\n const inner = unwrapResult(result);\n if (!inner.transaction_opaque_data) {\n throw new VgiClientError(\"transaction_begin returned no transaction_opaque_data\");\n }\n return toUint8Array(inner.transaction_opaque_data);\n }\n\n /** Commit a transaction. */\n async transactionCommit(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_commit\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** Rollback a transaction. */\n async transactionRollback(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_rollback\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** List schemas in an attached catalog. */\n async schemas(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo[]> {\n const result = await this.rpc.call(\"catalog_schemas\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeSchemaInfo);\n }\n\n /** Get a schema by name, or null if not found. */\n async schemaGet(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo | null> {\n const result = await this.rpc.call(\"catalog_schema_get\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeSchemaInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new schema. */\n async schemaCreate(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n opts?: {\n onConflict?: OnCreateConflict;\n comment?: string | null;\n tags?: Record<string, string> | null;\n transactionOpaqueData?: TransactionOpaqueData;\n },\n ): Promise<void> {\n const tagsMap = opts?.tags\n ? new Map(Object.entries(opts.tags))\n : null;\n await this.rpc.call(\"catalog_schema_create\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n on_conflict: opts?.onConflict ?? \"error\",\n comment: opts?.comment ?? null,\n tags: tagsMap,\n transaction_opaque_data: opts?.transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a schema by name. */\n async schemaDrop(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_schema_drop\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** List tables in a schema. */\n async schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_tables\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeTableInfo);\n }\n\n /** List views in a schema. */\n async schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_views\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeViewInfo);\n }\n\n /** List functions in a schema, filtered by type. */\n async schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n type: CatalogFunctionType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<FunctionInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_functions\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeFunctionInfo);\n }\n\n /** List indexes in a schema. */\n async schemaContentsIndexes(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<IndexInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_indexes\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeIndexInfo);\n }\n\n /** Get a table by name, or null if not found. */\n async tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo | null> {\n const result = await this.rpc.call(\"catalog_table_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeTableInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new table. */\n async tableCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columns: Uint8Array,\n onConflict: OnCreateConflict,\n notNullConstraints?: number[],\n uniqueConstraints?: number[][],\n checkConstraints?: string[],\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n columns,\n on_conflict: onConflict,\n not_null_constraints: notNullConstraints ?? null,\n unique_constraints: uniqueConstraints ?? null,\n check_constraints: checkConstraints ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a table by name. */\n async tableDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Get the scan function for a table — tells DuckDB which function to call\n * to read the table data (e.g. `read_parquet` with a path argument). Used\n * by the VGI extension during query planning.\n */\n async tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n atUnit?: string | null,\n atValue?: string | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ScanFunctionResult> {\n const result = await this.rpc.call(\"catalog_table_scan_function_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n at_unit: atUnit ?? null,\n at_value: atValue ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"table_scan_function_get returned null\");\n return decodeScanFunctionResult(unwrapResult(result));\n }\n\n /** Set or clear the comment on a table. */\n async tableCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a table. */\n async tableRename(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Add a column to a table. */\n async tableColumnAdd(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n columnType: string,\n defaultValue?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_add\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n column_type: columnType,\n default_value: defaultValue ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a column from a table. */\n async tableColumnDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a column in a table. */\n async tableColumnRename(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set the default value for a column. */\n async tableColumnDefaultSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n defaultValue: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n default_value: defaultValue,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove the default value from a column. */\n async tableColumnDefaultDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Change the type of a column.\n *\n * `columnDefinition` is a serialized Arrow Schema with a single field whose\n * name identifies the target column and whose type is the new column type.\n * `expression` is an optional SQL expression used to convert existing values.\n */\n async tableColumnTypeChange(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnDefinition: Uint8Array,\n expression?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_type_change\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_definition: columnDefinition,\n expression: expression ?? null,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set a NOT NULL constraint on a column. */\n async tableNotNullSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove a NOT NULL constraint from a column. */\n async tableNotNullDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Get a view by name, or null if not found. */\n async viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo | null> {\n const result = await this.rpc.call(\"catalog_view_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeViewInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new view. */\n async viewCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n definition: string,\n onConflict: OnCreateConflict,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n definition,\n on_conflict: onConflict,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a view by name. */\n async viewDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a view. */\n async viewRename(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set or clear the comment on a view. */\n async viewCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n // ==========================================================================\n // Macro Catalog API\n // ==========================================================================\n\n /** Get a macro by name, or null if not found. */\n async macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo | null> {\n const result = await this.rpc.call(\"catalog_macro_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeMacroInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** List macros in a schema, filtered by type. */\n async schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n path: string[] | string,\n type: CatalogMacroType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_macros\", {\n attach_opaque_data: attachOpaqueData,\n path: normalizeSchemaPath(path),\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeMacroInfo);\n }\n\n /** Create a new macro. */\n async macroCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n macroType: MacroType,\n parameters: string[],\n definition: string,\n onConflict: OnCreateConflict,\n parameterDefaultValues?: Uint8Array | null,\n argumentsSchema?: Uint8Array | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n const innerBatch = batchFromColumns(\n {\n attach_opaque_data: [attachOpaqueData],\n schema_path: [normalizeSchemaPath(schemaPath)],\n name: [name],\n macro_type: [macroType],\n parameters: [parameters],\n definition: [definition],\n on_conflict: [onConflict],\n parameter_default_values: [parameterDefaultValues ?? null],\n arguments_schema: [argumentsSchema ?? null],\n transaction_opaque_data: [transactionOpaqueData ?? null],\n },\n MacroCreateRequestSchema,\n );\n await this.rpc.call(\"catalog_macro_create\", wrapRequest(innerBatch));\n }\n\n /** Drop a macro by name. */\n async macroDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaPath: string[] | string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_macro_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_path: normalizeSchemaPath(schemaPath),\n name,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Close the underlying RPC connection. */\n close(): void {\n this.rpc.close();\n }\n}\n",
|
|
95
95
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Wrap/unwrap helpers for the VGI double-wrapping protocol.\n// Mirrors the server's dispatch.ts:64-84 (unwrapRequest/wrapResult).\n\nimport {\n serializeBatch,\n deserializeBatch,\n batchToScalarDict,\n} from \"../util/arrow/index.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport type { VgiBatch } from \"../arrow/index.js\";\nexport { toUint8Array };\n\n/**\n * Wrap a RecordBatch as a { request: Uint8Array } dict for RPC params.\n * DuckDB wraps ArrowSerializableDataclass params in a single \"request\" Binary column.\n */\nexport function wrapRequest(batch: VgiBatch): { request: Uint8Array } {\n return { request: serializeBatch(batch) };\n}\n\n/**\n * Unwrap a { result: Uint8Array } response dict.\n * The \"result\" Binary column contains a serialized inner batch;\n * returns its row 0 as a flat dict.\n */\nexport function unwrapResult(\n result: Record<string, any>,\n): Record<string, any> {\n const resultBytes = toUint8Array(result.result);\n const innerBatch = deserializeBatch(resultBytes);\n return batchToScalarDict(innerBatch);\n}\n",
|
|
96
96
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n// Serialize a plain JS options map into a single-row Arrow RecordBatch\n// suitable for the `options` field of CatalogAttachRequest. Column types\n// are inferred per-value. This is the ergonomic layer that lets callers\n// write `{ region: \"us-east-1\", maxRows: 1000n }` instead of hand-building\n// an Arrow batch.\n\nimport { type VgiDataType, bool, binary, type VgiField, field, float64, int64, nullType, type VgiSchema, schema as schema_, utf8 } from \"../arrow/index.js\";\nimport { batchFromColumns, serializeBatch } from \"../util/arrow/index.js\";\n\n/**\n * Values supported in a CatalogAttach options map. The client infers an\n * Arrow type per value:\n *\n * string → Utf8\n * bigint → Int64\n * number → Float64 (JS numbers are doubles — safe for small ints too)\n * boolean → Bool\n * Uint8Array → Binary\n * null → Null (column with no concrete type; value is null)\n *\n * If you need types this can't express (Decimal, Timestamp, Int32 vs Int64,\n * nested structs), drop down to `optionsBytes` on CatalogAttachOptions and\n * build the RecordBatch yourself.\n */\nexport type AttachOptionValue = string | number | bigint | boolean | null | Uint8Array;\n\n/**\n * Infer an Arrow DataType for a single JS value. Exported for tests; not\n * part of the stable public API.\n */\nexport function inferAttachOptionArrowType(value: AttachOptionValue): VgiDataType {\n if (value === null) return nullType();\n if (typeof value === \"string\") return utf8();\n if (typeof value === \"bigint\") return int64();\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new TypeError(\n `Attach option number values must be finite (got ${value}). ` +\n `Use a bigint for integers or a finite number for floats.`,\n );\n }\n return float64();\n }\n if (typeof value === \"boolean\") return bool();\n if (value instanceof Uint8Array) return binary();\n throw new TypeError(\n `Unsupported attach option value type: ${typeof value}. ` +\n `Supported: string, number, bigint, boolean, null, Uint8Array.`,\n );\n}\n\n/**\n * Serialize a plain key→value options map to an Arrow IPC RecordBatch.\n *\n * Returns `null` when the map is empty or has no entries — the wire layer\n * then sends a null options field rather than a zero-column batch (which\n * pyarrow's IPC reader rejects).\n */\nexport function serializeAttachOptions(\n options: Record<string, AttachOptionValue> | undefined | null,\n): Uint8Array | null {\n if (!options) return null;\n const entries = Object.entries(options);\n if (entries.length === 0) return null;\n\n const fields: VgiField[] = [];\n const columns: Record<string, unknown[]> = {};\n for (const [key, value] of entries) {\n const type = inferAttachOptionArrowType(value);\n fields.push(field(key, type, true));\n columns[key] = [value];\n }\n const schema = schema_(fields);\n const batch = batchFromColumns(columns, schema);\n return serializeBatch(batch);\n}\n",
|
|
97
97
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VgiClient error class + RpcClient wrapper that translates RpcError into\n// VgiClientError, preserving the worker's remote traceback.\n\n// RpcError comes from the `/connect` subpath, not the package root, and the\n// distinction is worth ~160 kB in every browser bundle. The root re-exports the\n// whole framework — protocol, dispatch, access log, the server — and a bundler\n// cannot drop it, so importing one error class from there shipped `RpcServer`\n// to browsers to satisfy an `instanceof`. `RpcClient` is a pure `import type`\n// for the same reason: `import { type X }` leaves the statement behind, and a\n// bare `import {} from \"@query-farm/vgi-rpc\"` is a side-effect import of that\n// same graph.\nimport { RpcError } from \"@query-farm/vgi-rpc/connect\";\nimport type { RpcClient } from \"@query-farm/vgi-rpc\";\n\n/** Error thrown by VgiClient when an RPC call fails or returns unexpected data. */\nexport class VgiClientError extends Error {\n /** Remote traceback from the worker, when an RpcError carried one. */\n readonly remoteTraceback?: string;\n /** Underlying error type from the worker (e.g. \"ValueError\"), when known. */\n readonly errorType?: string;\n\n constructor(\n message: string,\n options?: { remoteTraceback?: string; errorType?: string; cause?: unknown },\n ) {\n super(message, options?.cause != null ? { cause: options.cause } : undefined);\n this.name = \"VgiClientError\";\n if (options?.remoteTraceback) this.remoteTraceback = options.remoteTraceback;\n if (options?.errorType) this.errorType = options.errorType;\n }\n\n /**\n * Build a VgiClientError from an underlying RpcError, preserving the\n * remote error type, message, and traceback so the worker-raised exception\n * shows up at the top of the stack rather than buried under VGI framing.\n * Mirrors Python's ClientError.from_rpc_error.\n */\n static fromRpcError(e: RpcError): VgiClientError {\n const head = `${e.errorType}: ${e.errorMessage}`;\n const message = e.remoteTraceback\n ? `${head}\\n\\nRemote traceback:\\n${e.remoteTraceback}`\n : head;\n return new VgiClientError(message, {\n remoteTraceback: e.remoteTraceback || undefined,\n errorType: e.errorType,\n cause: e,\n });\n }\n}\n\n/**\n * Wrap an RpcClient so any RpcError thrown by call/stream is rethrown as a\n * VgiClientError carrying the worker's remote traceback. Other errors\n * propagate unchanged.\n */\nexport function wrapRpcWithErrorEnrichment(rpc: RpcClient): RpcClient {\n return {\n async call(method, params) {\n try {\n return await rpc.call(method, params);\n } catch (e) {\n if (e instanceof RpcError) throw VgiClientError.fromRpcError(e);\n throw e;\n }\n },\n async stream(method, params) {\n try {\n return await rpc.stream(method, params);\n } catch (e) {\n if (e instanceof RpcError) throw VgiClientError.fromRpcError(e);\n throw e;\n }\n },\n // The batch-level twins (vgi-rpc 0.24.0) get the same treatment: a caller\n // holding encoded Arrow should still see the worker's traceback rather\n // than a bare RpcError.\n async callRaw(method, input) {\n try {\n return await rpc.callRaw(method, input);\n } catch (e) {\n if (e instanceof RpcError) throw VgiClientError.fromRpcError(e);\n throw e;\n }\n },\n async streamRaw(method, input, options) {\n try {\n return await rpc.streamRaw(method, input, options);\n } catch (e) {\n if (e instanceof RpcError) throw VgiClientError.fromRpcError(e);\n throw e;\n }\n },\n describe: () => rpc.describe(),\n close: () => rpc.close(),\n };\n}\n",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// The one place a VGI worker's vgi-rpc server is built.\n//\n// Every transport a worker serves -- stdin/stdout, AF_UNIX (the launcher), raw\n// TCP, the Iroh raw upstream, a caller-provided byte stream (Web Worker), and\n// HTTP (Bun.serve and Cloudflare Workers alike) -- builds its server through\n// `buildRpcServer`. Before this existed each built its own, five times over,\n// which is how \"what is hosted on which transport\" drifts.\n//\n// What a server hosts, in reflection order:\n//\n// 1. The worker's own protocol, `vgi.v2`.\n// 2. The worker's `hostedProtocols()`, in the order returned -- on EVERY\n// transport.\n// 3. `vgi_rpc.Reflection.v1` -- on every transport.\n// 4. `vgi_rpc.Identity.v1` -- HTTP only, and only when the worker supplies\n// `resolveToken` and/or `mintGrant`.\n//\n// Extra protocols cannot change `vgi.v2` behaviour: vgi-rpc routes every\n// request on its `vgi_rpc.protocol` key with no fallback to the primary, so a\n// client that only ever names `vgi.v2` (the DuckDB extension) dispatches\n// exactly as it would against a single-protocol server.\n\nimport {\n type GrantMinter,\n IdentityImpl,\n type Protocol,\n type TokenResolver,\n VgiRpcServer,\n} from \"@query-farm/vgi-rpc\";\n\n/** The transport a server is being built for. Only `\"http\"` changes what is\n * hosted (identity); the rest are recorded so the decision lives here rather\n * than at each call site. `\"iroh\"` is the raw TCP upstream of a\n * `vgi-iroh-bridge`; `\"stream\"` a caller-provided byte-stream pair. */\nexport type ServerTransport = \"pipe\" | \"unix\" | \"tcp\" | \"iroh\" | \"stream\" | \"http\";\n\nconst TRANSPORTS: ReadonlySet<string> = new Set<ServerTransport>([\"pipe\", \"unix\", \"tcp\", \"iroh\", \"stream\", \"http\"]);\n\n/** Transports that authenticate their callers, and so may host\n * `vgi_rpc.Identity.v1`. Identity answers questions about *other* callers'\n * credentials; its allowlist is a list of principals, which a transport with\n * no caller identity cannot check. */\nconst IDENTITY_TRANSPORTS: ReadonlySet<string> = new Set<ServerTransport>([\"http\"]);\n\nconst RESERVED_PREFIX = \"vgi_rpc.\";\n\n/** Environment variable naming the principals allowed to call `introspect_token`. */\nexport const INTROSPECT_PRINCIPALS_ENV = \"VGI_INTROSPECT_PRINCIPALS\";\n\n/**\n * What a worker hosts beyond `vgi.v2`, and whether it opts into identity.\n *\n * Accepted by `new Worker({...})`, `serveVgiWorker`, `createVgiWorkerFetch`\n * and `createVgiFetch` (Cloudflare Workers) alike, so one worker definition\n * hosts the same set on every transport.\n */\nexport interface HostingOptions {\n /**\n * Additional vgi-rpc protocols to host beside `vgi.v2`, on the **same**\n * listener, whatever the transport.\n *\n * A vgi-rpc `Protocol` carries its handlers, so each entry is a whole\n * `(protocol, implementation)` pair. Called **once**, when the server is\n * built; it may consult configuration or the environment, but the answer is\n * fixed for the life of the process, so reflection output and protocol\n * hashes stay stable. Hosted after `vgi.v2`, in the order returned.\n *\n * The protocol is the unit of optionality: there is no way to host a subset\n * of a protocol's methods. A capability that is optional is its own\n * protocol, returned here or not.\n *\n * Each needs a distinct wire name, which may not be `vgi.v2` and may not\n * use the reserved `vgi_rpc.` prefix: reflection is hosted automatically and\n * `vgi_rpc.Identity.v1` is enabled through {@link resolveToken} /\n * {@link mintGrant}. Violations are a startup error naming this hook.\n */\n hostedProtocols?: () => Iterable<Protocol>;\n\n /**\n * Resolve an opaque bearer credential to the identity it authenticates as.\n * Supplying it hosts `vgi_rpc.Identity.v1`'s `introspect_token` -- on HTTP,\n * the transport that authenticates callers. Absent, the method is absent\n * (not hosted-and-refusing), which keeps a dependency upgrade from growing a\n * credential-to-identity oracle on every existing worker.\n *\n * Return `null` for \"the store answered and this credential is unknown\".\n * For \"I could not find out\" (a store or sidecar outage, a timeout, a 5xx)\n * throw `AuthUnavailableError` from `@query-farm/vgi-rpc` -- the same error\n * an `authenticate` callback throws for an outage. The framework translates\n * it to `identity_unavailable` with that error's retry hint\n * (`vgi_rpc.RetryInfo`), so callers know to retry rather than cache a\n * refusal. `IdentityUnavailableError` works too. Never throw a plain\n * `Error` for an outage: a caller cannot tell it from a definitive answer.\n *\n * Requires {@link introspectPrincipals} (or `VGI_INTROSPECT_PRINCIPALS`);\n * there is no permissive default, and a worker without one refuses to start.\n */\n resolveToken?: TokenResolver;\n\n /**\n * Mint a standing delegation credential for the *calling* user. Supplying\n * it hosts `issue_grant` (HTTP only). Throw `GrantRefusedError` to decline,\n * and `AuthUnavailableError` for a transient failure (translated as for\n * {@link resolveToken}). Needs no allowlist: it is not an oracle about\n * anybody else.\n */\n mintGrant?: GrantMinter;\n\n /**\n * Principals permitted to call `introspect_token`. When omitted,\n * `VGI_INTROSPECT_PRINCIPALS` (comma-separated) is read. Only consulted when\n * {@link resolveToken} is supplied.\n */\n introspectPrincipals?: Iterable<string>;\n\n /** Maximum age of the caller's authentication for `issue_grant`, in\n * seconds. vgi-rpc's default when omitted. */\n maxAuthAge?: number;\n}\n\n/** Server-level options passed through to `VgiRpcServer`. */\nexport interface BuildRpcServerOptions {\n /** Which transport this server will serve. */\n transport: ServerTransport;\n /** Server identifier, surfaced through reflection. */\n serverId?: string;\n /** Environment to read `VGI_INTROSPECT_PRINCIPALS` from. Default\n * `process.env` where it exists (not on Cloudflare Workers). */\n env?: Record<string, string | undefined>;\n}\n\n/**\n * Build the vgi-rpc server for a worker's `vgi.v2` protocol on `transport`.\n *\n * Calls `hosting.hostedProtocols()` exactly once and hosts the result beside\n * `primary`; see the module comment for the full hosted set.\n *\n * @throws TypeError `hostedProtocols()` returned something other than an\n * iterable of vgi-rpc `Protocol`s.\n * @throws Error A hosted protocol's name is invalid, reserved, `vgi.v2`'s, or\n * repeated; the transport is unknown; or the worker supplies `resolveToken`\n * on HTTP with no introspector allowlist.\n */\nexport function buildRpcServer(\n primary: Protocol,\n hosting: HostingOptions,\n options: BuildRpcServerOptions,\n): VgiRpcServer {\n if (!TRANSPORTS.has(options.transport)) {\n throw new Error(`Unknown transport ${JSON.stringify(options.transport)}; expected one of ${[...TRANSPORTS].join(\", \")}.`);\n }\n const protocols = validatedHostedProtocols(hosting, primary);\n const identity = IDENTITY_TRANSPORTS.has(options.transport) ? buildIdentity(hosting, options.env) : undefined;\n return new VgiRpcServer(primary, {\n serverId: options.serverId,\n protocols,\n identity,\n });\n}\n\n/** Call `hostedProtocols()` once and check its shape and names.\n *\n * vgi-rpc checks these too, but its messages name a protocol and not the\n * worker hook that supplied it; checking here first lets the error say which\n * option to fix. */\nfunction validatedHostedProtocols(hosting: HostingOptions, primary: Protocol): Protocol[] {\n if (hosting.hostedProtocols === undefined) return [];\n const owner = \"hostedProtocols()\";\n if (typeof hosting.hostedProtocols !== \"function\") {\n throw new TypeError(`${owner} must be a function returning vgi-rpc Protocols, got ${typeof hosting.hostedProtocols}.`);\n }\n const raw = hosting.hostedProtocols();\n if (raw == null || typeof (raw as Iterable<Protocol>)[Symbol.iterator] !== \"function\" || typeof raw === \"string\") {\n throw new TypeError(`${owner} must return an iterable of vgi-rpc Protocols, got ${String(raw)}.`);\n }\n const seen = new Set<string>();\n const out: Protocol[] = [];\n let index = 0;\n for (const proto of raw as Iterable<Protocol>) {\n const p = proto as Partial<Protocol> | null;\n if (p == null || typeof p.name !== \"string\" || typeof p.getMethod !== \"function\") {\n throw new TypeError(`${owner} entry ${index} must be a vgi-rpc Protocol, got ${String(proto)}.`);\n }\n const name = p.name;\n if (name.startsWith(RESERVED_PREFIX)) {\n throw new Error(\n `${owner} entry ${index} is named '${name}', which claims the reserved '${RESERVED_PREFIX}' prefix. ` +\n \"Framework protocols are not supplied through this hook: reflection is hosted automatically, and \" +\n \"vgi_rpc.Identity.v1 is enabled by supplying resolveToken and/or mintGrant.\",\n );\n }\n if (!/^[A-Za-z_][A-Za-z0-9_.]*$/.test(name)) {\n throw new Error(\n `${owner} entry ${index}: protocol name '${name}' is not an identifier, optionally dot-qualified ` +\n \"(e.g. 'acme.Reports.v1').\",\n );\n }\n if (name === primary.name) {\n throw new Error(\n `${owner} entry ${index} is named '${name}', the worker's own protocol. Give it a distinct name.`,\n );\n }\n if (seen.has(name)) {\n throw new Error(\n `${owner} lists protocol name '${name}' twice. The name is the routing key, so each hosted protocol ` +\n \"needs a distinct name.\",\n );\n }\n seen.add(name);\n out.push(proto);\n index++;\n }\n return out;\n}\n\n/** Build the `vgi_rpc.Identity.v1` implementation, or `undefined`.\n *\n * `undefined` unless the worker supplies at least one hook -- and that is the\n * point: the server then does not host the protocol at all, rather than\n * hosting it and refusing every call. The two hooks are independent. */\nfunction buildIdentity(\n hosting: HostingOptions,\n env: Record<string, string | undefined> | undefined,\n): IdentityImpl | undefined {\n const { resolveToken, mintGrant } = hosting;\n if (!resolveToken && !mintGrant) return undefined;\n return new IdentityImpl({\n resolveToken,\n mintGrant,\n // Only meaningful for `introspect_token`; a worker that mints but resolves\n // nothing is not an oracle and needs no allowlist.\n introspectPrincipals: resolveToken ? resolveIntrospectPrincipals(hosting.introspectPrincipals, env) : undefined,\n maxAuthAge: hosting.maxAuthAge,\n });\n}\n\n/**\n * Resolve the introspector allowlist, or refuse to start.\n *\n * Fail-closed rather than defaulting to \"any authenticated caller\":\n * authenticating and introspecting are different capabilities, and a\n * permissive default lets any user resolve any other user's credential to its\n * owner. A worker that supplies `resolveToken` and forgets the allowlist must\n * not start.\n */\nfunction resolveIntrospectPrincipals(\n explicit: Iterable<string> | undefined,\n env: Record<string, string | undefined> | undefined,\n): string[] {\n let principals: string[];\n if (explicit !== undefined) {\n principals = [...explicit].map((p) => p.trim()).filter((p) => p !== \"\");\n } else {\n const source = env ?? (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env;\n const raw = source?.[INTROSPECT_PRINCIPALS_ENV] ?? \"\";\n principals = raw\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p !== \"\");\n }\n if (principals.length === 0) {\n throw new Error(\n \"This worker supplies resolveToken, which hosts the vgi_rpc.Identity.v1 protocol, but no \" +\n `introspector allowlist was configured. Set ${INTROSPECT_PRINCIPALS_ENV} (comma-separated) or pass ` +\n \"introspectPrincipals.\\n\\n\" +\n \"There is no permissive default on purpose: introspection is a separate capability from \" +\n \"authentication, and allowing every authenticated caller lets any user resolve any other user's \" +\n \"credential to its owner. Remove resolveToken to leave the protocol unhosted entirely.\",\n );\n }\n return principals;\n}\n",
|
|
100
100
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI Worker: main entry point for running a VGI function server.\n\nimport {\n observePeerIdentity,\n peerIdentityPrimary,\n serveUnix,\n serveTcp,\n serveStream as serveStreamRpc,\n type VgiRpcServer,\n} from \"@query-farm/vgi-rpc\";\nimport { buildRpcServer, type HostingOptions, type ServerTransport } from \"./rpc-server.js\";\nimport { FunctionRegistry } from \"./functions/registry.js\";\nimport type { VgiFunction } from \"./functions/types.js\";\nimport { buildVgiProtocol } from \"./protocol/dispatch.js\";\nimport type { Protocol } from \"@query-farm/vgi-rpc\";\nimport { schemaDescriptorPath, type CatalogDescriptor } from \"./catalog/descriptors.js\";\nimport type { CatalogInterface } from \"./catalog/interface.js\";\nimport { ReadOnlyCatalogInterface } from \"./catalog/read-only.js\";\n\n/**\n * Startup/lifecycle tracing, off unless `VGI_DEBUG` is set to something other\n * than \"\" or \"0\".\n *\n * These lines used to be unconditional, which put three of them in the log of\n * every worker anyone ever deployed. They are genuinely useful when an ATTACH\n * hangs and you need to know how far startup got, so they are kept rather than\n * deleted — just behind a flag. Errors are NOT gated: `Worker error:` and\n * `Worker init error:` always print.\n *\n * The message is a thunk so an unset flag costs no interpolation.\n *\n * stderr, never stdout: on the stdio transport stdout is the protocol.\n */\nfunction debug(message: () => string): void {\n const flag = process.env.VGI_DEBUG;\n if (flag === undefined || flag === \"\" || flag === \"0\") return;\n process.stderr.write(message() + \"\\n\");\n}\n\n// argv parser for the launcher's `--unix PATH` / `--tcp [HOST:]PORT` /\n// `--idle-timeout SEC` contract. The C++ launcher (vgi extension) appends\n// these to the worker's argv whenever LOCATION uses the `launch:` scheme.\n// Unknown args pass through.\ninterface LauncherArgs {\n unixPath?: string;\n /** TCP bind host, defaulting to 127.0.0.1 when `--tcp` gives a bare port. */\n tcpHost?: string;\n /** TCP bind port; present iff `--tcp` was passed. */\n tcpPort?: number;\n idleTimeout?: number;\n irohRawUpstream?: boolean;\n irohIssuer?: string;\n irohTrustedProxyAddresses: string[];\n irohAuthenticate: boolean;\n}\n\n// Parse a `[HOST:]PORT` --tcp bind spec into a LauncherArgs. A bare PORT (no\n// colon) binds 127.0.0.1; an empty host (leading \":\") also defaults to loopback.\nfunction parseTcpSpec(spec: string, out: LauncherArgs): void {\n const idx = spec.lastIndexOf(\":\");\n if (idx >= 0) {\n const h = spec.slice(0, idx);\n out.tcpHost = h === \"\" ? \"127.0.0.1\" : h;\n out.tcpPort = Number(spec.slice(idx + 1));\n } else {\n out.tcpHost = \"127.0.0.1\";\n out.tcpPort = Number(spec);\n }\n}\n\nfunction parseLauncherArgs(argv: readonly string[]): LauncherArgs {\n const out: LauncherArgs = { irohTrustedProxyAddresses: [], irohAuthenticate: true };\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--unix\" && i + 1 < argv.length) {\n out.unixPath = argv[++i];\n } else if (a.startsWith(\"--unix=\")) {\n out.unixPath = a.slice(\"--unix=\".length);\n } else if (a === \"--tcp\" && i + 1 < argv.length) {\n parseTcpSpec(argv[++i], out);\n } else if (a.startsWith(\"--tcp=\")) {\n parseTcpSpec(a.slice(\"--tcp=\".length), out);\n } else if (a === \"--idle-timeout\" && i + 1 < argv.length) {\n out.idleTimeout = Number(argv[++i]);\n } else if (a.startsWith(\"--idle-timeout=\")) {\n out.idleTimeout = Number(a.slice(\"--idle-timeout=\".length));\n } else if (a === \"--iroh-raw-upstream\" && i + 1 < argv.length) {\n parseTcpSpec(argv[++i], out);\n out.irohRawUpstream = true;\n } else if (a.startsWith(\"--iroh-raw-upstream=\")) {\n parseTcpSpec(a.slice(\"--iroh-raw-upstream=\".length), out);\n out.irohRawUpstream = true;\n } else if (a === \"--iroh-issuer\" && i + 1 < argv.length) {\n out.irohIssuer = argv[++i];\n } else if (a.startsWith(\"--iroh-issuer=\")) {\n out.irohIssuer = a.slice(\"--iroh-issuer=\".length);\n } else if (a === \"--iroh-trusted-proxy\" && i + 1 < argv.length) {\n out.irohTrustedProxyAddresses.push(...argv[++i].split(\",\").filter(Boolean));\n } else if (a.startsWith(\"--iroh-trusted-proxy=\")) {\n out.irohTrustedProxyAddresses.push(...a.slice(\"--iroh-trusted-proxy=\".length).split(\",\").filter(Boolean));\n } else if (a === \"--iroh-observe\") {\n out.irohAuthenticate = false;\n }\n }\n return out;\n}\n\nexport interface WorkerConfig extends HostingOptions {\n functions?: VgiFunction[];\n catalog?: CatalogDescriptor;\n catalogInterface?: CatalogInterface;\n /** Factory that receives the built ReadOnlyCatalogInterface and returns a custom catalog. */\n catalogInterfaceFactory?: (base: ReadOnlyCatalogInterface) => CatalogInterface;\n catalogName?: string;\n /**\n * Registry to dispatch through. Pass the same instance used to build a\n * pre-constructed `catalogInterface` — catalogs record which schema (and\n * catalog) declares each function on the registry they are given, and\n * schema-qualified resolution only works if that is the registry the worker\n * dispatches on. Omit to have the worker create its own.\n */\n registry?: FunctionRegistry;\n}\n\nexport class Worker {\n private _registry: FunctionRegistry;\n private _hosting: HostingOptions;\n private _catalogInterface?: CatalogInterface;\n private _catalogName?: string;\n\n constructor(config: WorkerConfig) {\n // Reuse the caller's registry when given: a catalogInterface built\n // elsewhere recorded its per-schema function ownership there, and that\n // index is what makes a schema-qualified bind resolve correctly.\n this._registry = config.registry ?? new FunctionRegistry();\n this._catalogName = config.catalogName;\n this._hosting = {\n hostedProtocols: config.hostedProtocols,\n resolveToken: config.resolveToken,\n mintGrant: config.mintGrant,\n introspectPrincipals: config.introspectPrincipals,\n maxAuthAge: config.maxAuthAge,\n };\n\n // Register explicit functions\n if (config.functions) {\n for (const func of config.functions) {\n this._registry.register(func);\n }\n }\n\n // Register functions from catalog descriptor\n if (config.catalog) {\n for (const schema of config.catalog.schemas) {\n if (schema.functions) {\n for (const func of schema.functions) {\n this._registry.register(func);\n // Also index by owning schema + catalog so a schema-qualified bind\n // resolves when one name is declared in more than one schema.\n this._registry.registerInSchema(func, schemaDescriptorPath(schema), config.catalog.name);\n }\n }\n }\n }\n\n // Set up catalog interface\n if (config.catalogInterface) {\n this._catalogInterface = config.catalogInterface;\n } else if (config.catalog) {\n const base = new ReadOnlyCatalogInterface(\n config.catalog,\n this._registry\n );\n this._catalogInterface = config.catalogInterfaceFactory\n ? config.catalogInterfaceFactory(base)\n : base;\n }\n }\n\n run(argv: readonly string[] = process.argv.slice(2)): void {\n debug(() => `[worker] starting, pid=${process.pid}`);\n try {\n const protocol = this.buildProtocol();\n debug(() => `[worker] protocol built`);\n\n const launcher = parseLauncherArgs(argv);\n if (launcher.irohRawUpstream) {\n if (!launcher.irohIssuer) throw new TypeError(\"--iroh-raw-upstream requires --iroh-issuer\");\n if (![\"127.0.0.1\", \"::1\", \"localhost\"].includes(launcher.tcpHost ?? \"\")) {\n throw new TypeError(\"--iroh-raw-upstream must bind loopback\");\n }\n }\n if (launcher.unixPath !== undefined) {\n // VGI_WORKER_IDLE_TIMEOUT overrides whatever the C++ launcher\n // appended via --idle-timeout. Useful in test setups where the\n // launcher's default of 300 s leaves stale workers around long\n // after the suite has finished — set 5 (or any small value) and\n // the worker self-shuts-down promptly when the suite ends.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n debug(() =>\n `[worker] AF_UNIX mode: ${launcher.unixPath} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}`,\n );\n serveUnix(this.buildServer(protocol, \"unix\"), {\n unixPath: launcher.unixPath,\n idleTimeout,\n }).then((handle) => handle.done).then(() => {\n debug(() => `[worker] serveUnix done (idle shutdown)`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n if (launcher.tcpPort !== undefined) {\n // Raw Arrow-IPC framing over TCP — the network sibling of the\n // AF_UNIX launcher transport. serveTcp prints the\n // `TCP:<host>:<port>` discovery line itself (with the actual bound\n // port when tcpPort is 0). NO auth/TLS — loopback/trusted networks\n // only; use the HTTP transport for untrusted networks.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n debug(() =>\n `[worker] TCP mode: ${launcher.tcpHost}:${launcher.tcpPort} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}`,\n );\n serveTcp(this.buildServer(protocol, launcher.irohRawUpstream ? \"iroh\" : \"tcp\"), {\n host: launcher.tcpHost,\n port: launcher.tcpPort,\n idleTimeout,\n ...(launcher.irohRawUpstream\n ? {\n proxyProtocolV2Required: true,\n trustedProxyAddresses: launcher.irohTrustedProxyAddresses.length > 0\n ? launcher.irohTrustedProxyAddresses\n : [\"127.0.0.1\"],\n irohProxyIssuer: launcher.irohIssuer,\n peerAuthenticationPolicy: launcher.irohAuthenticate\n ? peerIdentityPrimary(\"iroh\")\n : observePeerIdentity,\n }\n : {}),\n }).then((handle) => handle.done).then(() => {\n debug(() => `[worker] serveTcp done (idle shutdown)`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n const server = this.buildServer(protocol, \"pipe\");\n debug(() => `[worker] server created, calling run()`);\n server.run().then(() => {\n debug(() => `[worker] server.run() resolved cleanly`);\n }).catch((err) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n } catch (err: any) {\n process.stderr.write(`Worker init error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n }\n }\n\n /**\n * Build the vgi-rpc server for one transport: `vgi.v2`, the worker's\n * `hostedProtocols()` and reflection everywhere; identity on HTTP only. The\n * one construction path every transport uses (see `rpc-server.ts`).\n */\n private buildServer(protocol: Protocol, transport: ServerTransport): VgiRpcServer {\n return buildRpcServer(protocol, this._hosting, { transport });\n }\n\n /** Build the VGI protocol from this worker's registry + catalog interface. */\n private buildProtocol(): Protocol {\n return buildVgiProtocol({\n registry: this._registry,\n catalogInterface: this._catalogInterface,\n catalogName: this._catalogName,\n });\n }\n\n /**\n * Serve this worker over a caller-provided byte-stream pair, instead of the\n * argv-selected stdio/unix/tcp transports `run()` uses. Resolves when the\n * `readable` ends.\n *\n * This is the seam for transports that aren't a process/socket — most notably\n * a **Web Worker**: bridge the worker's `MessagePort` to a Node `Duplex`\n * (readable side ← `port.on('message')`, writable side → `port.postMessage`)\n * and pass it as both arguments. The same code runs in a browser Web Worker.\n *\n * @param readable incoming request bytes (web `ReadableStream` or Node `Readable`).\n * @param writable outgoing response sink (a `net.Socket`/`Duplex`, or an fd\n * number). Omit for the stdout fd.\n */\n async serveStream(\n readable: ReadableStream<Uint8Array> | NodeJS.ReadableStream,\n writable?: number | import(\"node:net\").Socket | import(\"@query-farm/vgi-rpc\").ByteSink,\n ): Promise<void> {\n await serveStreamRpc(this.buildServer(this.buildProtocol(), \"stream\"), { readable, writable });\n }\n}\n"
|
|
101
101
|
],
|
|
102
|
-
"mappings": "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",
|
|
103
|
-
"debugId": "
|
|
102
|
+
"mappings": "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",
|
|
103
|
+
"debugId": "03676B1C4ED9A21664756E2164756E21",
|
|
104
104
|
"names": []
|
|
105
105
|
}
|